2013-02-21 1 views
2

У меня есть следующие классы в моем приложении:просмотров памяти JProfiler -> Размер объекта

class A { 
    String someString; 
    Locale someLocale; 

    Map<Integer, B> someMap = new HashMap<Integer, B>(); 

    fillMap() { 
    // some logic to fill the map with instances of B 
    } 
} 

class B { 
    // lots of filled collections 
} 

Я делаю сеанс профилирования с JProfiler выявить некоторые проблемы с памятью. На вкладке «Просмотр памяти», с классами уровня агрегации, у меня есть, например, 2000 экземпляров A с общим размером 156 КБ.

Мой вопрос будет таким, как этот размер означает? Это просто размер ссылок на объект A или размер всех заполненных членов A (мне интересно, особенно о Карте)? Я предполагаю, что это как-то только контрольный размер A, но хотел убедиться в этом.

ответ

1

Динамические виды памяти не показывают сохраненные размеры, только мелкие размеры.

Чтобы увидеть сохраненные размеры, перейдите к куратору кучи, дважды щелкните по классу, чтобы создать новый набор объектов. Затем нажмите «Рассчитать сохраненный и глубокий размер» в заголовке.

Это дает вам сохраненный размер для всего класса, хотя сохраненные размеры для отдельных экземпляров могут быть более интересными. Для этого перейдите в представление «Ссылки» или «Самые большие объекты».