Mixalis Navridis :
모든 나는 간단한 질문이 제공됩니다. 우리는 하나 개의 클래스가있는 경우 자바 문서와 자바 메모리 개체의 레이아웃에 대한 많은 기사에 따르면 int
해당 개체의 총 메모리 소비가 될 것입니다 변수 :
- 표제 8 바이트
- INT 4 바이트
- (전체 최대 8 바이트의 배수 일 라운드) 4 바이트 패딩 = 16 바이트 전체
public class Ab {
int b;
}
public static void main(String args[]) throws InterruptedException {
Ab ab = new AB();
}
내 문제는 지금은 힙 덤프의 비주얼 VM 및 모양을 사용할 때이 내가 그 개체의 메모리 소비는 것을 발견 이론적 접근 관찰하는 것입니다 20 바이트 대신에 16 ? 이런 이유는 무엇입니까? 누군가가 나에게 설명 할 수 있습니까?
올렉산드르 Pyrohov :
은 Using 자바 객체 레이아웃 나는 다음과 같은 출력을 받았다 도구 :
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 int Ab.b N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
그리고 그와 -XX:-UseCompressedOops
VM 옵션 (비활성화 압축 참조)
OFFSET SIZE TYPE DESCRIPTION VALUE
0 16 (object header) N/A
16 4 int Ab.b N/A
20 4 (loss due to the next object alignment)
Instance size: 24 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
Java 환경 :
java version "11" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)