객체 크기 구하기
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);
}
}
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
가용한 힙 메모리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
가용한 힙 메모리5021040
객체 생성 후 가용한 힙 메모리4595032
String 객체 하나의 메모리 크기는 42
5.0에서는 44
전체 힙 메모리2031616
가용한 힙 메모리1884632
객체 생성 후 가용한 힙 메모리1444456
String 객체 하나의 메모리 크기는 44
가용한 힙 메모리1884632
객체 생성 후 가용한 힙 메모리1444456
String 객체 하나의 메모리 크기는 44