| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 프로세스
- letterspacing
- API
- HTML
- 스레드
- 컨트롤러
- cmd
- ibatis
- wsdl
- MariaDB
- Docker
- 티스토리챌린지
- Database
- JDBC
- 스레드 덤프
- equals
- integer
- Linux
- oracle
- Tomcat
- java
- START WITH
- 삼성증권
- 오블완
- 영상편집
- 키보드
- http
- 톰캣
- MySQL
- 안드로이드 스튜디오
- Today
- Total
블로그 이름
[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 바이트로 측정되었다.
오늘은 객체의 메모리 크기 확인 방법을 알아보았다.
'개발 > Java' 카테고리의 다른 글
| [JAVA] 스레드 덤프 출력 및 분석 (데드락, 무한루프) (0) | 2025.11.16 |
|---|---|
| [JAVA] Integer 비교 시 ==가 아닌 equals() 를 사용하는 이유 (0) | 2025.08.31 |
| [Java] Java 임시파일 경로 설정하기 (1) | 2025.06.09 |
| [JAVA] 윈도우 PC에 JAVA 설치 (0) | 2025.06.09 |
| [JAVA] List와 String (문자열, 배열) 변환 (0) | 2025.05.23 |