Хммм. Есть ли где-нибудь пример использования памяти в Java? Я бы подумал, что у Sun или IBM была бы хорошая статья на эту тему, но я не могу найти ничего, что выглядит действительно солидно. Мне интересно знать две вещи:
- во время выполнения, выяснение того, сколько памяти используют классы в моем пакете в данный момент времени
- во время разработки, оценивая общие требования к памяти для различных вещей, таких как:
- сколько дополнительной памяти требуется для пустого объекта (в дополнение к пространству, требуемому его полями)
- сколько ресурсов памяти требуется при создании замыканий
- сколько дополнительной памяти требуется для коллекций, таких как ArrayList
Возможно, у меня созданы сотни тысяч объектов, и я хочу быть «хорошим соседом», чтобы не тратить слишком много оперативной памяти. Я имею в виду, что мне все равно, использую ли я на 10% больше памяти, чем «оптимальный случай» (что бы это ни было), но если я реализую что-то, использующее в 5 раз больше памяти, чем я мог бы, если бы сделал простой изменить, я бы хотел использовать меньше памяти (или иметь возможность создавать больше объектов для фиксированного объема доступной памяти).
Я нашел несколько статей ( Информационный бюллетень Java-специалистов и что-то из Javaworld ) и один из встроенных классов java.lang.instrument.getObjectSize () который утверждает, что измеряет «приближение» (??) использования памяти, но все это кажется немного расплывчатым ...
(и да, я понимаю, что JVM, работающая в двух разных ОС, может использовать разные объемы памяти для разных объектов)