블로그 이름

[JAVA] 객체의 메모리 크기 확인 방법 본문

개발/Java

[JAVA] 객체의 메모리 크기 확인 방법

Hide 2025. 8. 3. 22:22

타 언어의 경우 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 바이트로 측정되었다.

 

오늘은 객체의 메모리 크기 확인 방법을 알아보았다.