[JAVA] 객체의 메모리 크기 확인 방법
타 언어의 경우 Python의 getsizeof나 c의 sizeof 를 사용하여 객체의 크기를 확인 할 수 있다.
JAVA의 경우 객체의 메모리 크기를 확인 할 수 있는 방법이 기본적으론 없는 편
확인 시 2가지 방법이 있다는데
1.Runtime.getRuntime().totalMemory() 를 사용하여 메모리 사용량을 확인하고 객체 생성 전후의 차이를 계산하여 객체 크기를 추정하거나
2. Object의 경우 16bytes (12 header, 4 padding), Integer의 경우 16 bytes (12 header, 4 int) 와 같이 객체 안의 타입을 확인하여 크기를 예상하는 방법
둘 다 두루뭉실하여 확실하지가 않다
다른 방법을 찾아보던 중 JOL (Java Object Layout) 이라는 OpenJDK에서 제공하는 도구로 객체의 레이아웃과 크기를 분석할 수 있다는 것을 확인
jol-core-0.16.jar 를 사용하여 아래 코드 실행 시 TestDTO 라는 객체의 메모리 크기를 확인 할 수 있다.
import org.openjdk.jol.info.GraphLayout;
public class Main {
public static void main(String[] args) {
TestDTO obj = new TestDTO();
System.out.println(GraphLayout.parseInstance(obj).toFootprint());
}
}

여기서 COUNT란 같은 타입의 객체가 몇 개나 있는지, AVG란 해당 타입 객체 1개의 추정 메모리 크기(byte), SUM은 COUNT * AVG (총 메모리 사용량), DSCRIPTION은 객체 타입이다.
실제로 TestDTO 는 1개 생성되었고, TestDTO 안엔 TestUnitDTO와 String, int, Integer 등의 객체가 존재한다.
해당 객체의 크기는 약 240 바이트로 측정되었다.
오늘은 객체의 메모리 크기 확인 방법을 알아보았다.