해결된 질문
작성
·
15
0
안녕하세요 널널한개발자님
수업들으면서 많은 것을 배우고 있습니다!
다름이 아니고 Method Area 수업에서는 Method Area가 Java 8부터는 PermGen에서 Metaspace에 속하게 되고, JVM Heap 영역이 아니라 Native Memory에서 관리한다고 배웠는데
JVM Heap 영역 수업에서 영구 세대(Metaspace)가 같은 것을 지칭하는 것일까요? 제가 보기에는 같은 것을 지칭하는 것 같다고 생각합니다. 그러면 Meataspace는 더 이상 Heap 영역에서 관리하지 않기 때문에 GC로 제거가 되지 않는 것이 맞을까요?
또한 저는 처음에 PermanentGen = Method Area라고 생각했는데 그게 아니라 Permanent 영역이 Method Area 영역을 포괄하는 큰 영역이기 때문에
Java 8 이전: PermentGen에 포함된 MethodArea까지 GC가 관리(full시)
Java 8 이후: MethodArea가 PermGen인 Heap 영역에서 분리되었으니 더이상 GC 관리 X 다만 다른 PermGen 영역만 full gc때 관리
라고 생각하면 될까요?
답변 2
0
좋은 세상입니다. 요즘은 AI 답변이 제공이 되니까요. AI 답변과 더불어 제 답변도 함께 올려드립니다.
메서드 영역은 Java 8부터는 Metaspace 영역과 힙 영역을 둘로 분리 되어 관리됩니다. 대표적으로 정적 변수와 Constant pool은 힙 영역에 존재합니다. 그외 메타 데이터 및 메서드 관련 정보는 Metaspace에 저장됩니다.
Metaspace가 사실상 영구 세대 역할을 수행하긴 하지만 그렇다고 GC가 아예 수행되지 않는 것은 아닙니다. 사용하지 않는 클래스에 대한 메타 데이터들은 회수 대상이 됩니다. 이는 클래스가 언로드 될 때 발생하는 일입니다. 물론 자주 발생하는 일은 아닙니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 이신광님, 인프런 AI 인턴입니다.
Metaspace와 관련하여 질문을 주셔서 감사합니다.
자바 8부터 PermGen(Permanent Generation)이 Metaspace로 대체된 것은 잘 알고 계시네요. 이를 통해 자바에서 메모리 관리가 더 유연해졌습니다. Metaspace는 네이티브 메모리를 사용하기 때문에, 운영 체제에 따라 확장이 가능하며, 한계에 더 적은 영향을 받습니다. 이 부분은 Heap 메모리와는 다르며, JVM에서 직접 관리되지 않고 운영 체제에 의해 관리됩니다.
Metaspace와 Method Area:
Garbage Collection:
기타 메모리 관리 관점:
-XX:MaxMetaspaceSize
등을 설정하여 메타스페이스 크기를 제한할 수 있습니다.관련된 질문들이나 더 구체적인 설명을 원하신다면, 아래 링크들을 참고하시기 바랍니다:
- Metaspace에 대한 깊이 있는 설명
- Metaspace와 Method Area의 관계
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
대댓글은 AI가 답변하지 않으므로 제가 답변해드립니다.
Java7에서 PermGen에 저장되는 정보는 클래스 메타데이터, 바이트코드, 런타임 상수 풀(스트링 풀 포함), 정적 변수, JIT 컴파일러가 최적화한 메서드 정보 및 컴파일된 코드 정보 등이 있습니다. 참고하시기 바랍니다. 😄
그럼 자바 8 이전에 PemGen이 Method Area를 포함하는 거라면? Method Area를 제외한 PemGen 영역에는 무엇이 저장되나요?