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