인프런 커뮤니티 질문&답변
메타데이터의 위치에 대한 질문입니다.
해결된 질문
작성
·
209
·
수정됨
0
널널한 개발자님. 항상 잘 듣고 있습니다! 좋은 강의 감사합니다.
복습을 하던 도중 잘 이해가 안되는 부분이 있어 질문드립니다.
인스턴스의 메타데이터라 함은 강의 내용 중 해시코드, 오브젝트 나이, 락플래그를 말하는 것 같습니다.
강의 4분경에서 이런 메타데이터가 Klass word에서 참조하는 Metaspace에 저장되어 있다고 하셨습니다.
그리고 강의 6분경 핫스팟 VM 객체 Lock flag슬라이드 보거나, 실제 예제를 실행시켜 나온 결과(23:35)를 보면 Markword에도 해쉬파일과 락플래그가 있는 것으로 보입니다.
Metaspace, Markword 둘 다 같은 인스턴스의 해시코드값(+락플래그)을 가지는 건가요? 그러면 Metaspace는 생성된 인스턴스 모두의 메타데이터를 가지는건가요?
새벽에 보느라 머리가 잘 안돌아가네요..
긴 글 읽어주셔서 감사합니다!
답변 2
0
그림이 잘못된 것이 맞습니다. 분리해서 표시했어야 했는데 묶어서 그리면서 혼란을 드린 것 같습니다. 해서 그림을 다음과 같이 수정했습니다.
(해시 코드, 나이, 락 플래그 등은 모두 Mark word 안에 담기는 정보입니다.)

중요한 이슈에 해당하므로 해당 차시는 조속히 다시 촬영해 올리도록 하겠습니다. 오류 제보에 감사드리며 현재 제작 중인 Part 3를 무료로 보실 수 있도록 제공하겠습니다. 인프런 가입 메일 계정을
cx8537@naver.com으로 보내주세요. Part 3 오픈과 동시에 수강자로 등록하겠습니다.
감사합니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. cby9017님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의와 관련된 질문을 주셔서 감사합니다.
자바에서 인스턴스의 메타데이터는 객체의 상태를 관리하는 중요한 요소입니다. 이 정보는 JVM이 객체를 효율적으로 관리하고 작동시키는 데 도움을 줍니다. 이를 이해하기 위해 Markword와 Metaspace의 역할을 좀 더 구체적으로 살펴보겠습니다.
Markword:
- Markword는 객체 헤더의 일부로, 자바 객체의 내부에 포함되어 있습니다.
- Markword는 해시 코드(hash code), 락 플래그(lock flags), GC 상태 정보, 스레드의 잠금 및 언락 정보 등을 포함하고 있습니다.
- 객체 자체에 존재하며, JVM의 효율적인 동시성 및 GC 구현에 필수적입니다.
- Markword는 객체 헤더의 일부로, 자바 객체의 내부에 포함되어 있습니다.
Metaspace:
- Metaspace는 JVM의 네이티브 메모리 영역으로, 클래스 메타데이터를 저장합니다.
- 인스턴스가 아닌 클래스 수준의 정보를 포함하고 있습니다. 따라서 인스턴스 자체의 데이터인 해시코드나 락 플래그는 Metaspace에 포함되지 않습니다.
- Metaspace는 JVM의 네이티브 메모리 영역으로, 클래스 메타데이터를 저장합니다.
따라서, Metaspace는 인스턴스가 아닌 클래스에 대한 메타데이터를 보관하며, Markword는 본래 인스턴스의 일부로서 인스턴스에 특화된 정보를 갖고 있으므로, 인스턴스마다 별개로 저장됩니다.
정리하자면, 인스턴스의 해시코드와 락 플래그는 Markword에 저장되며, Metaspace는 클래스 수준의 정보를 관리합니다. 인스턴스 자체의 메타데이터가 Metaspace에 저장되는 것은 아닙니다.
관련하여 더 깊이 있는 설명을 원하신다면, 아래의 링크를 참고하시면 유익할 수 있습니다:
- JVM Markword의 구조와 역할
- Java 클래스 로딩과 Metaspace에 관한 이해
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






그렇군요. 올리시면 다시 보겠습니다.
메일 보냈습니다. 감사합니다!