профилирования является лучшим способом, но вы можете получить хорошую оценку, как так:
8 байт на объект (голые накладные расходы), плюс поле.
- Примитивные поля: как указано на Java. Примечание: booleans нужно 1 полный байт.
- Поля объекта: 1 указатель (4 байта на 32-разрядной виртуальной машине, 8 на 64-разрядной версии), плюс размер самого объекта (если не ссылка на существующий объект)
- Массивы: 4 байта + объект/примитивы для элементов
- Строки: далеко, слишком много. IIRC, 24 байта + 2 байта/символ. Может быть больше.
Конечный результат увеличен до ближайшего кратного 8 байт.
См. Также мой пример here, как рассчитать использование памяти на более сложном объекте. Примечание. Эти правила могут отличаться от виртуальных машин и могут изменяться по мере выхода новых версий VM. Моя оценка применима только к Sun JVM, хотя я подозреваю, что результаты IBM будут похожи.
Обратите внимание, что «размер самого объекта» может не применяться, если вы ссылаетесь на объекты, которые уже существуют. То же самое касается элементов массива. –
Я думал, что это предполагалось, но достаточно справедливо - я добавил пару квалификаторов, чтобы дать понять, при каких условиях эта оценка применяется. – BobMcGee
Я бы сказал, что наложенные накладные расходы составляют 16 байт. (По крайней мере на 64-битных JVM) –