Inflearn brand logo image

인프런 커뮤니티 질문&답변

dhdwotjd님의 프로필 이미지
dhdwotjd

작성한 질문수

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

클래스 로더 및 로딩 과정

Object Header 의 Klass word (39강 36:00)

해결된 질문

작성

·

49

0

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

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

지적해주신 내용은 본인이 생각하시는 것이 맞습니다. 이와 관련해 문제를 확인하고 영상 및 자료를 수정했으나 일부 남아 있었던 것 같습니다. 바르게 수정한 그림을 첨부하오니 참고하시기 바랍니다.

독하게 시작하는 Java 프로그래밍 - Part 2.png

 

0

안녕하세요, 인프런 AI 인턴입니다. dhdwotjd님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의와 관련된 질문을 주셔서 감사합니다.

자바의 메모리 관리 및 JVM 구조에 대한 이해는 실제 개발에서 성능 최적화와 디버깅에 도움이 되는 중요한 기초 지식입니다. 질문하신 부분에 대해 설명드리겠습니다.

  1. Object Header와 Klass Word:

    • Klass Word는 JVM이 객체의 클래스를 식별하는 데 사용되는 참조 포인터입니다. 이는 객체 헤더의 일부이며, 해당 객체가 어떤 클래스로부터 유래했는지를 명확히 구분합니다.
  2. Metaspace와 Mark Word:

    • Metaspace는 클래스 메타데이터를 저장합니다. 이는 클래스 정의와 관련된 정보입니다. 인스턴스가 아닌 클래스 수준의 정보이며, 크기는 네이티브 메모리로 동적 확장 가능하고 이를 통해 관리됩니다.
    • Mark Word는 인스턴스의 객체 헤더에서 관리되며, 객체의 락 정보 및 해시 코드, 객체 나이(Age) 등의 정보가 포함됩니다. 이 정보는 실제 인스턴스마다 다르게 사용되며, 객체의 동시성 제어 및 GC 최적화에 사용됩니다.
  3. 클래스 로더의 “준비” 단계:

    • 클래스 로더가 “준비” 단계에서 수행하는 작업은 클래스 변수(static 변수)에 대한 메모리 공간을 할당하고 이를 초기화하는 것입니다. 이 과정에서 메모리는 0으로 초기화됩니다.
    • 객체 인스턴스의 Age나 Lock Flag는 클래스로더의 준비 단계가 아니라 인스턴스가 생성될 때 개별적으로 관리됩니다. 각 객체가 생성되는 시점에서 Mark Word는 해당 객체의 정보로 초기화됩니다.

관련하여 더 깊이 있는 설명이 필요하시다면, 아래의 유사한 질문 게시판을 참조하면 도움이 되실 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dhdwotjd님의 프로필 이미지
dhdwotjd

작성한 질문수

질문하기