← 질문 목록
#277깊이 0
자바의 원시 타입과 래퍼 클래스는 메모리 구조상 어떤 차이가 있는가?
원시 타입은 변수 공간에 실제 값을 직접 저장하고, 래퍼 클래스 변수는 힙에 있는 객체를 가리키는 참조를 저장한다. 메모리 점유량과 접근 방식에서 큰 차이가 난다.
| 기준 | 원시 타입 (예: int) | 래퍼 클래스 (예: Integer) |
|---|---|---|
| 저장 위치 | 스택 프레임 또는 객체 필드 | 힙 영역 |
| 저장 내용 | 실제 데이터 값 | 객체 헤더 + 데이터 값 |
| 메모리 크기 | 값 자체는 4바이트 | 객체 머리와 정렬, 참조 압축 설정에 따라 다르다 |
int 값은 32비트, 4바이트다. Integer는 객체 헤더와 정렬까지 합쳐 흔한 64비트 압축 참조 구성에서 대략 16바이트다 — 구현과 JVM 옵션에 따라 달라진다.
래퍼 클래스는 힙 영역에 할당되므로 가비지 컬렉션의 관리 대상이다. 변수를 읽을 때도 참조를 거치는 간접 접근이 일어나 CPU 캐시 효율이 떨어진다. 반복문에서 캐시 범위 밖 값이 오토박싱되면 짧은 시간에 많은 객체가 생겨 GC 부담을 늘릴 수 있다.