객체 헤더
Java에서 객체 헤더(object header)는 각 객체의 메타데이터를 저장하는 부분으로, JVM이 객체를 관리하는 데 필요한 정보를 포함합니다. 객체 헤더는 JVM 구현마다 다를 수 있지만, 일반적으로 다음과 같은 정보를 포함합니다:
Mark Word:
Klass Pointer:
Java 64비트 HotSpot VM의 경우, 객체 헤더는 일반적으로 다음과 같이 구성됩니다:
이러한 헤더는 JVM에서 객체를 관리하고 동기화, GC 등을 수행하는 데 필수적입니다.
다음은 객체 헤더의 역할을 간략히 보여주는 예제입니다:
public class Main {
public static void main(String[] args) {
Object obj = new Object();
// System.identityHashCode는 객체의 헤더에 저장된 해시 코드를 반환
int hashCode = System.identityHashCode(obj);
System.out.println("HashCode: " + hashCode);
// 기본 동기화 블록, 객체의 모니터 락을 획득
synchronized (obj) {
System.out.println("Object is locked");
}
}
}
이 예제에서:
System.identityHashCode(obj)
는 객체의 해시 코드를 반환하는데, 이는 객체 헤더의 일부인 Mark Word
에 저장될 수 있습니다.synchronized (obj)
는 객체의 모니터 락을 획득하여, 객체 헤더에 있는 락 정보를 사용합니다.객체 헤더는 Java 객체의 중요한 부분으로, JVM이 객체를 효율적으로 관리하고 동기화, 해시 코드 계산, GC 등의 작업을 수행할 수 있도록 돕습니다. 이를 통해 JVM은 객체 지향 프로그램의 효율성을 극대화할 수 있습니다