Как я могу получить занятую область Java-объектом в куче памяти? - PullRequest
3 голосов
/ 21 июля 2010

Сколько места занимает объект из кучи памяти?Как это можно сделать?

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Это гораздо сложнее, чем просто использование вычислений свободной памяти (в которых не учитываются сборки мусора и новые распределения другими потоками).Взгляните на:

http://www.javaspecialists.eu/archive/Issue142.html

Однако это сложный материал.

- EDIT -

Приведенное выше решение находит глубокий размер объекта (с использованием стека для обхода эталонной сети, коллекции посещенных ссылок и, конечно, контрольно-измерительных приборов).

Однако, получая мелкий размеробъекта проще и может быть достигнуто с помощью инструментария Java 1.5 без дополнительной работы (см. Instrumentation.getObjectSize () ).

0 голосов
/ 21 июля 2010

Объем памяти, занимаемый объектом, варьируется от одной реализации JVM к другой, а иногда и от одной платформы к следующей.

Вы можете оценить сумму, посчитав количество и размер примитивных типов и ссылок на объекты, объявленных как переменные экземпляра класса объекта.

Например:

public class Monkey {
  int arms;
  Animal parent;
}

.. имеет 1 ссылку на объект и 1 примитив int, что в 32-разрядной архитектуре займет приблизительно 8 байт на экземпляр.

...