См. Мои MonitoringTools на моем сайте (www.csd.uoc.gr/~andreou)
class X {
byte b1, b2, b3...;
}
long memoryUsed = MemoryMeasurer.measure(new X());
(Может использоваться и для более сложных объектов / графов объектов)
В версии 1.6 JDK от Sun кажется, что байт действительно занимает один байт (в более старых версиях, интбайт с точки зрения памяти) Но обратите внимание, что даже в более старых версиях byte [] также был упакован в один байт на запись.
В любом случае, дело в том, что нет необходимости в сложных тестах, подобных описанным выше Джоном Скитом, которые дают только оценки. Мы можем напрямую измерить размер объекта!