
- Object Header의 Mark word의 Lock flag로 객체에 접근하는 스레드 동기화 작업을 한다.
- Hash code는 Object.hashCode() 가 호출되는 시점에 계산
- 나이는 GC에서 살아남은 횟수
- Lock flag는 객체를 중심으로 멀티스레드 환경에서 경쟁조건이 발생하는 문제를 해결하기 위한 것
핫스팟 VM 객체 Lock flag
| Lock flag | 상태 | Mark word 저장 정보 |
|---|---|---|
| 00 | Lightweight locking | Lock 레코드(스핀락 동기화) |
| 01 | Unlock | 객체의 Hash code 및 나이 |
| 01 | Biased locking | 스레드 ID, 타임스탬프, 객체 나이 |
| 10 | Heavyweight locking | -(뮤텍스로 동기화) |
| 11 | GC mark | -(GC가 객체 이동 중) |
JVM 객체 수준 Lock
- Java에서 모든 함수와 자료는 Class 에 속한다.
- 정적 멤버 변수는 인스턴스 없이 별도 존재
- 동기화가 필요한 경우 임계 영역 통제를 위한 인스턴스가 필요함(Monitor Lock)