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();
}
}
Теперь, если мы нарисуем объекты схематически для приведенного выше примера приложения, это будет выглядеть так:
Рис. Ссылки на объекты примера приложения
a.Объект A и объект B содержат ссылку на объект C
b.Объект C содержит ссылку на объект D и объект E.
Теперь в этом примере проекта давайте изучим «Входящие ссылки» и «Исходящие ссылки» объекта C.
Входящие ссылки объекта C
Все объекты, которые содержат ссылки на объект C, называются «входящие ссылки». В этом примере Объект C входящая ссылка находятся объект А, объект Б **а также **класс С.
Чтобы подтвердить эту теорию, мы записали дамп кучи из приведенного выше примера приложения и загрузили его в Eclipse MAT. Ниже приведены «Входящие ссылки», о которых сообщает Eclipse MAT для объекта C.
Рис. Входящие ссылки Объекта C
Когда вы щелкнете правой кнопкой мыши на объекте C в «Дереве доминаторов» и выберите опцию «Список объектов> с входящими ссылками», вы заметите, что Eclipse MAT сгенерирует приведенный выше отчет. Вы можете заметить, что объект A, объект B и класс C сообщаются как входящие ссылки. Eclipse MAT также отображает переменные, используемые для ссылки на объект C. Вы можете видеть, что объект A ссылается на объект C, используя переменную ‘c1’. Точно так же сообщаются и другие переменные, используемые для ссылки на объект C.
Исходящие ссылки объекта C
Все объекты, на которые ссылается объект C, называются «исходящими ссылками». В этом примере **исходящая ссылка объекта C**является объект D, объект E и класс C.
Ниже приведены «Исходящие ссылки», о которых сообщает Eclipse MAT для объекта C.
Рис. Исходящие ссылки Объекта C
Когда вы щелкнете правой кнопкой мыши на объекте C в «Дереве доминаторов» и выберите опцию «Список объектов> с исходящими ссылками», вы заметите, что Eclipse MAT сгенерирует приведенный выше отчет. Вы можете заметить, что объект D, объект E и класс C сообщаются как входящие ссылки. Eclipse MAT также отображает переменные по объекту C для ссылки на другие объекты. Вы можете видеть, что объект C ссылается на объект D, используя переменную ‘d1’. Точно так же сообщаются и другие переменные, используемые в объекте C.
Мы надеемся, что эта статья прояснила разницу между «Входящими ссылками» и «Исходящими ссылками». Чтобы узнать о разнице между «мелкой кучей» и «сохраненной кучей», вы можете обратитесь к этой статье.