Object Header 의 Klass word (39강 36:00)
39강의 36분 경에 보여주시는 그림에 보면 Object Header 의 Klass word 가 Metaspace 영역의 Class 클래스의 메타데이터를 가르키고 있습니다.
해당 Class 클래스의 메타데이터 내용을 보면 Object Age 나 Lock Flag 등이 들어가는데 제가 공부하기로는 Object Age 나 Lock Flag 와 같은 개별 인스턴스가 가져야 하는 메타데이터는 Mark Word 에 저장되는 것으로 알고 있었는데, 아닌가요?
그렇다면 이 강의에서 설명하신 바로는 Class 클래스가 클래스로더의 "준비" 단계에서 생성되고, 실제 인스턴스 객체는 나중에 생성된다고 하셨는데 "준비"단계에 생성된 Class 클래스에 인스턴스 별로 다르게 가져야 하는 정보 (age, lock flag 등) 이 어떻게 구별되서 저장되나요?
답변 2
1
지적해주신 내용은 본인이 생각하시는 것이 맞습니다. 이와 관련해 문제를 확인하고 영상 및 자료를 수정했으나 일부 남아 있었던 것 같습니다. 바르게 수정한 그림을 첨부하오니 참고하시기 바랍니다.

0
안녕하세요, 인프런 AI 인턴입니다. dhdwotjd님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의와 관련된 질문을 주셔서 감사합니다.
자바의 메모리 관리 및 JVM 구조에 대한 이해는 실제 개발에서 성능 최적화와 디버깅에 도움이 되는 중요한 기초 지식입니다. 질문하신 부분에 대해 설명드리겠습니다.
Object Header와 Klass Word:
- Klass Word는 JVM이 객체의 클래스를 식별하는 데 사용되는 참조 포인터입니다. 이는 객체 헤더의 일부이며, 해당 객체가 어떤 클래스로부터 유래했는지를 명확히 구분합니다.
- Klass Word는 JVM이 객체의 클래스를 식별하는 데 사용되는 참조 포인터입니다. 이는 객체 헤더의 일부이며, 해당 객체가 어떤 클래스로부터 유래했는지를 명확히 구분합니다.
Metaspace와 Mark Word:
- Metaspace는 클래스 메타데이터를 저장합니다. 이는 클래스 정의와 관련된 정보입니다. 인스턴스가 아닌 클래스 수준의 정보이며, 크기는 네이티브 메모리로 동적 확장 가능하고 이를 통해 관리됩니다.
- Mark Word는 인스턴스의 객체 헤더에서 관리되며, 객체의 락 정보 및 해시 코드, 객체 나이(Age) 등의 정보가 포함됩니다. 이 정보는 실제 인스턴스마다 다르게 사용되며, 객체의 동시성 제어 및 GC 최적화에 사용됩니다.
- Metaspace는 클래스 메타데이터를 저장합니다. 이는 클래스 정의와 관련된 정보입니다. 인스턴스가 아닌 클래스 수준의 정보이며, 크기는 네이티브 메모리로 동적 확장 가능하고 이를 통해 관리됩니다.
클래스 로더의 “준비” 단계:
- 클래스 로더가 “준비” 단계에서 수행하는 작업은 클래스 변수(static 변수)에 대한 메모리 공간을 할당하고 이를 초기화하는 것입니다. 이 과정에서 메모리는 0으로 초기화됩니다.
- 객체 인스턴스의 Age나 Lock Flag는 클래스로더의 준비 단계가 아니라 인스턴스가 생성될 때 개별적으로 관리됩니다. 각 객체가 생성되는 시점에서 Mark Word는 해당 객체의 정보로 초기화됩니다.
- 클래스 로더가 “준비” 단계에서 수행하는 작업은 클래스 변수(static 변수)에 대한 메모리 공간을 할당하고 이를 초기화하는 것입니다. 이 과정에서 메모리는 0으로 초기화됩니다.
관련하여 더 깊이 있는 설명이 필요하시다면, 아래의 유사한 질문 게시판을 참조하면 도움이 되실 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
compareTo를 사용하는 이유가 뭔가요?
0
44
1
[실습] MyString에 복사 생성자 추가
0
38
1
안녕하세요~ 회수라는 의미에 대해서 질문합니다.
0
71
1
equals의 재정의(overriding)에 대해서
0
80
2
TestEx 객체 생성 시 생성자 호출 질문
0
61
2
[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)
0
100
2
주소록 실습 3단계에서 막혔어서 조언을 구하려고 질문 드립니다.
0
84
2
해시 알고리즘 관련으로 질문이 있습니다.
0
73
2
21분 경 Old generation의 GC 설명 질문입니다.
0
102
3
임시 객체의 첫 번째 상황에 대한 질문
0
70
2
String 객체가 하나 더 생성되는 이유가 궁금합니다
0
188
3
하위 클래스와 상위 클래스의 생성자 순서
0
103
2
GC의 age와 관련하여 질문 있습니다.
0
97
2
method area는 이름이 class area가 아니고 왜 method aread인지 궁금합니다.
0
139
2
교안 p.305 'throw 필수' 질문
0
81
1
Metaspace에 대한 질문
0
257
2
clone() 메서드를 재정의함으로써 Deep copy로 구현한다로 이해하면 될까요?
0
120
2
MyListEx 질문드립니다.
1
136
1
part3 강의 개강
0
197
2
문자열 비교 강좌에서 문자열 선언 방법 간에 hashCode() 값 관련한 질문입니다.
0
222
2
상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.
1
182
2
보이지 않는 임시 객체의 자막 수정 요청
0
115
2
스레드 관련해서 질문이 있습니다.
0
202
1
metaspace 관련 문의드립니다.
0
199
2





