Какой объем памяти занимает метод интенсивного Java-объекта? - PullRequest
6 голосов
/ 01 декабря 2009

Предположим, у меня есть класс Java, имеющий код метода на 100 КБ, содержащий НЕТ переменных, но только 20 байтов атрибутов.

Я создаю экземпляр 1000 объектов из этого класса.

Я использовал 100 000 КБ памяти? Или только 100K + (20 байтов * 1000)? Или что-то совсем другое?

Ответы [ 4 ]

10 голосов
/ 01 декабря 2009

Объем памяти для загрузки самого класса будет приблизительно соответствовать размеру кода, но код не будет дублироваться для каждого экземпляра класса. Экземпляру потребуется только столько памяти, сколько атрибутов экземпляра + некоторые накладные расходы для управления самим экземпляром объекта.

2 голосов
/ 01 декабря 2009

Вот общее руководство по определению использования памяти объектами в Java: http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

Я подозреваю, что использование памяти из-за определений методов будет фиксированным (возможно, помещенным в пространство permgen при загрузке класса), а не пропорциональным количеству экземпляров.

0 голосов
/ 01 декабря 2009

Попробуйте подключиться с помощью jvisualvm (в JDK) и расскажите нам, что вы видите.

0 голосов
/ 01 декабря 2009

Вы будете создавать только «переменную» часть объектов, то есть только атрибуты (и, я думаю, несколько байтов здесь и там). Ваше последнее предположение является правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...