ECLIPSE MAT – Входящие ссылки, Исходящие ссылки

Eclipse Memory Analyzer (MAT) — мощный инструмент для анализа дампа кучи. Он имеет несколько замечательных функций для эффективной отладки проблем с памятью. «Входящие ссылки» и «исходящие ссылки» — одна из таких функций. В этой статье давайте обсудим «входящие ссылки», «исходящие ссылки» и разницу между ними.

В Eclipse MAT, когда вы щелкаете правой кнопкой мыши по любому объекту, вы увидите выпадающее меню. Если вы выберете пункт меню «Список объектов», вы увидите две опции:

1.’с исходящими ссылками’
2.’с входящими ссылками’
Поскольку легче понять новые концепции на примерах, давайте изучим «Входящие ссылки», «Исходящие ссылки» также на примере. Допустим, исходный код вашего приложения выглядит так:

 public class A {
     private C c1 = C.getInstance();
}
 public class B {
     private C c2 = C.getInstance();
}
 public class C {
     private static C myC = new C();
     public static C getInstance() {
             return myC;
     }
     private D d1 = new D();
     private E e1 = new E();
}
 public class D {
}
 public class E {
}
 public class SimpleExample {
     public static void main (String argsp[]) throws Exception {
            A a = new A();
            B b = new B();
     }
 }

Теперь, если мы нарисуем объекты схематически для приведенного выше примера приложения, это будет выглядеть так:

объект-модель.png
Рис. Ссылки на объекты примера приложения

a.Объект A и объект B содержат ссылку на объект C
b.Объект C содержит ссылку на объект D и объект E.
Теперь в этом примере проекта давайте изучим «Входящие ссылки» и «Исходящие ссылки» объекта C.

Входящие ссылки объекта C
Все объекты, которые содержат ссылки на объект C, называются «входящие ссылки». В этом примере Объект C входящая ссылка находятся объект А, объект Б **а также **класс С.

Чтобы подтвердить эту теорию, мы записали дамп кучи из приведенного выше примера приложения и загрузили его в Eclipse MAT. Ниже приведены «Входящие ссылки», о которых сообщает Eclipse MAT для объекта C.

eclipse-mat-incoming-reference-v2.PNG
Рис. Входящие ссылки Объекта C

Когда вы щелкнете правой кнопкой мыши на объекте C в «Дереве доминаторов» и выберите опцию «Список объектов> с входящими ссылками», вы заметите, что Eclipse MAT сгенерирует приведенный выше отчет. Вы можете заметить, что объект A, объект B и класс C сообщаются как входящие ссылки. Eclipse MAT также отображает переменные, используемые для ссылки на объект C. Вы можете видеть, что объект A ссылается на объект C, используя переменную ‘c1’. Точно так же сообщаются и другие переменные, используемые для ссылки на объект C.

Исходящие ссылки объекта C
Все объекты, на которые ссылается объект C, называются «исходящими ссылками». В этом примере **исходящая ссылка объекта C**является объект D, объект E и класс C.

Ниже приведены «Исходящие ссылки», о которых сообщает Eclipse MAT для объекта C.

eclipse-mat-outgoing-reference-v2.PNG
Рис. Исходящие ссылки Объекта C

Когда вы щелкнете правой кнопкой мыши на объекте C в «Дереве доминаторов» и выберите опцию «Список объектов> с исходящими ссылками», вы заметите, что Eclipse MAT сгенерирует приведенный выше отчет. Вы можете заметить, что объект D, объект E и класс C сообщаются как входящие ссылки. Eclipse MAT также отображает переменные по объекту C для ссылки на другие объекты. Вы можете видеть, что объект C ссылается на объект D, используя переменную ‘d1’. Точно так же сообщаются и другие переменные, используемые в объекте C.

Мы надеемся, что эта статья прояснила разницу между «Входящими ссылками» и «Исходящими ссылками». Чтобы узнать о разнице между «мелкой кучей» и «сохраненной кучей», вы можете обратитесь к этой статье.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *