Ответ 1
Используйте метод getObjectSize() инструментария.
Посмотрите здесь для деталей реализации:
Я работаю над вычислением размера [памяти] java-объекта [hashmap]. Он содержит элементы разных типов данных [во время выполнения], поэтому [no-of-elem * size-of-element] не является хорошим подходом. Код прямо сейчас делает это по серии
if (x)
do something
else if (primitives)
lookup size and calculate
Однако этот процесс является болотом процессора и неэффективным.
Я думаю о следующих двух подходах:
Я ищу опыт работы с этими подходами для производительности, эффективности, масштабирования и т.д. ИЛИ если вы знаете лучший способ.
P.S: Это фоновая утилита, которую я создаю, поэтому размер не должен быть слишком точным, хотя он должен быть прав. Поэтому я готов торговать с точностью до производительности
Меня не интересует глубокий размер (размер объектов, на которые ссылается этот объект, не будет вычислен.)
Я ищу сравнение производительности и понимание того, как getObjectSize() работает внутри.. так что я не перепутаю что-то еще, чтобы улучшить производительность
Спасибо
Используйте метод getObjectSize() инструментария.
Посмотрите здесь для деталей реализации:
Сериализованный размер определенно не подходит, по двум причинам:
Если вам нужна более высокая производительность, это будет зависеть от распределения ваших объектов. Одной из возможностей было бы сделать некоторую случайную выборку значений на вашей карте, определить среднее значение и рассчитать оценку этого значения.
Для получения справки о том, как искать случайное значение в хэш-карте, см. этот question.
Вам может быть интересна статья, которую я написал некоторое время назад в как рассчитать использование памяти Java-объекта. Он, по общему признанию, нацелен в первую очередь на 32-битную точку доступа, хотя большая ее часть применима в основном к другим средам.
Вы также можете загрузить простой агент для измерения размера объекта Java с того же сайта, который потребует от него тяжелой работы для вы должны работать в 64-разрядных средах.
Обратите внимание, как я уже говорил, что сериализованная форма объекта не совпадает с формой в памяти, поэтому использование сериализации не подходит, если вы хотите точно измерить объем памяти.