inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

객체 메모리 레이아웃과 해시코드

메타데이터의 위치에 대한 질문입니다.

해결된 질문

242

bynull

작성한 질문수 2

0

널널한 개발자님. 항상 잘 듣고 있습니다! 좋은 강의 감사합니다.

 

복습을 하던 도중 잘 이해가 안되는 부분이 있어 질문드립니다.

인스턴스의 메타데이터라 함은 강의 내용 중 해시코드, 오브젝트 나이, 락플래그를 말하는 것 같습니다.

강의 4분경에서 이런 메타데이터가 Klass word에서 참조하는 Metaspace에 저장되어 있다고 하셨습니다.

그리고 강의 6분경 핫스팟 VM 객체 Lock flag슬라이드 보거나, 실제 예제를 실행시켜 나온 결과(23:35)를 보면 Markword에도 해쉬파일과 락플래그가 있는 것으로 보입니다.

Metaspace, Markword 둘 다 같은 인스턴스의 해시코드값(+락플래그)을 가지는 건가요? 그러면 Metaspace는 생성된 인스턴스 모두의 메타데이터를 가지는건가요?

 

새벽에 보느라 머리가 잘 안돌아가네요..

긴 글 읽어주셔서 감사합니다!

 

java 객체지향 jvm data-structure

답변 2

0

널널한 개발자

그림이 잘못된 것이 맞습니다. 분리해서 표시했어야 했는데 묶어서 그리면서 혼란을 드린 것 같습니다. 해서 그림을 다음과 같이 수정했습니다.

(해시 코드, 나이, 락 플래그 등은 모두 Mark word 안에 담기는 정보입니다.)

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

 

중요한 이슈에 해당하므로 해당 차시는 조속히 다시 촬영해 올리도록 하겠습니다. 오류 제보에 감사드리며 현재 제작 중인 Part 3를 무료로 보실 수 있도록 제공하겠습니다. 인프런 가입 메일 계정을
cx8537@naver.com으로 보내주세요. Part 3 오픈과 동시에 수강자로 등록하겠습니다.
감사합니다. 😄

 

1

bynull

그렇군요. 올리시면 다시 보겠습니다.

메일 보냈습니다. 감사합니다!

0

인프런 AI 인턴

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

자바에서 인스턴스의 메타데이터는 객체의 상태를 관리하는 중요한 요소입니다. 이 정보는 JVM이 객체를 효율적으로 관리하고 작동시키는 데 도움을 줍니다. 이를 이해하기 위해 Markword와 Metaspace의 역할을 좀 더 구체적으로 살펴보겠습니다.

  1. Markword:

    • Markword는 객체 헤더의 일부로, 자바 객체의 내부에 포함되어 있습니다.
    • Markword는 해시 코드(hash code), 락 플래그(lock flags), GC 상태 정보, 스레드의 잠금 및 언락 정보 등을 포함하고 있습니다.
    • 객체 자체에 존재하며, JVM의 효율적인 동시성 및 GC 구현에 필수적입니다.
  2. Metaspace:

    • Metaspace는 JVM의 네이티브 메모리 영역으로, 클래스 메타데이터를 저장합니다.
    • 인스턴스가 아닌 클래스 수준의 정보를 포함하고 있습니다. 따라서 인스턴스 자체의 데이터인 해시코드나 락 플래그는 Metaspace에 포함되지 않습니다.

따라서, Metaspace는 인스턴스가 아닌 클래스에 대한 메타데이터를 보관하며, Markword는 본래 인스턴스의 일부로서 인스턴스에 특화된 정보를 갖고 있으므로, 인스턴스마다 별개로 저장됩니다.

정리하자면, 인스턴스의 해시코드와 락 플래그는 Markword에 저장되며, Metaspace는 클래스 수준의 정보를 관리합니다. 인스턴스 자체의 메타데이터가 Metaspace에 저장되는 것은 아닙니다.

관련하여 더 깊이 있는 설명을 원하신다면, 아래의 링크를 참고하시면 유익할 수 있습니다:
- JVM Markword의 구조와 역할
- Java 클래스 로딩과 Metaspace에 관한 이해

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

compareTo를 사용하는 이유가 뭔가요?

0

45

1

[실습] MyString에 복사 생성자 추가

0

38

1

안녕하세요~ 회수라는 의미에 대해서 질문합니다.

0

71

1

equals의 재정의(overriding)에 대해서

0

80

2

TestEx 객체 생성 시 생성자 호출 질문

0

62

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

189

3

하위 클래스와 상위 클래스의 생성자 순서

0

104

2

GC의 age와 관련하여 질문 있습니다.

0

97

2

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

0

115

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

116

2

스레드 관련해서 질문이 있습니다.

0

203

1