inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

클래스 로더 및 로딩 과정

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

해결된 질문

115

dhdwotjd

작성한 질문수 1

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 등) 이 어떻게 구별되서 저장되나요?

java 객체지향 jvm data-structure

답변 2

1

널널한 개발자

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

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

 

0

인프런 AI 인턴

안녕하세요, 인프런 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는 해당 객체의 정보로 초기화됩니다.

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

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

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

85

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

203

1

metaspace 관련 문의드립니다.

0

199

2