Object 클래스에 size() 라는 메소드가 없습니다. 그럼 객체의 크기를 알 수 없을까요;;

약간 돌아가면 알 수 있습니다. Runtime 이라는 클래스를 사용하여 힙 영역의 크기를 재면 됩니다.

public class Size {
    public static void main(String[] args) {
        System.gc();
        Runtime r = Runtime.getRuntime();
        System.out.println(“전체 힙 메모리” + r.totalMemory());
        long firstMemorySize = r.freeMemory();
        System.out.println(“가용한 힙 메모리” + firstMemorySize);
        Object[] o = new Object[10000];
        for(int i = 0 ; i < 10000 ; i++){
            o[i] = new Object();
        }
        long lastMemorySize = r.freeMemory();
        System.out.println(“객체 생성 후 가용한 힙 메모리” + lastMemorySize);
        System.out.println(“Object 객체 하나의 메모리 크기는 ” + (firstMemorySize – lastMemorySize)/10000);
    }
}
전체 힙 메모리5177344
가용한 힙 메모리5021040
객체 생성 후 가용한 힙 메모리4917928
Object 객체 하나의 메모리 크기는 10

재미있는 건 JVM 또는 JRE 마다 객체의 크기가 다르다는 것입니다.
위의 결과는 JDK6.0 정확히 JRE1.6.0_01 에서 확인한 결과고.. 같은 코드를 JRE 1.5.0_10에서 확인한 결과는 다음과 같스비낟.

전체 힙 메모리2031616
가용한 힙 메모리1884632
객체 생성 후 가용한 힙 메모리1773680
Object 객체 하나의 메모리 크기는 11

1 차이가 나네요. String 객체의 크기도 재미삼아 재봤습니다.

6.0에서는 42

전체 힙 메모리5177344
가용한 힙 메모리5021040
객체 생성 후 가용한 힙 메모리4595032
String 객체 하나의 메모리 크기는 42

5.0에서는 44

전체 힙 메모리2031616
가용한 힙 메모리1884632
객체 생성 후 가용한 힙 메모리1444456
String 객체 하나의 메모리 크기는 44