Java

[Java8] JVM의 MetaSpace

나프초 2024. 9. 4. 19:39

JVM Garbage Collector 관련 변화

  • JVM의 여러 메모리 영역중 PermGen 메모리 영역이 없어지고 MetaSpace영역이 생겼다.

 

PermGen (permanent generation)

  • 클래스 메타데이터를 담는 곳(클래스 이름, 스태틱한 필드 정보 등)
  • Heap 영역에 속함
    • Heap영역에 Eden 영역(young-genration 만든지 얼마 안된 객체), Old 영역(만든지 오래된 객체), PermGen 영역이 있음
  • 기본값으로 제한된 크기를 가지고 있음
    • -XX:PermSize=N : PermGen 초기 사이즈 설정
    • -XX:MaxPermSize=N : PermGen 최대 사이즈 설정
    • PermGen영역은 항상 고정된 크기를 가지고 생성되는데,
      클래스 로딩을 많이 하거나 동적으로 클래스를 많이 생성하는 경우 펌젠 영역이 꽉 차는 경우가 있다.
    • 꽉 차면 GC가 정리하는데, 그래도 계속 차서 정리가 되지 않으면 메모리 exception이 발생한다.

 

MetaSpace

  • 클래스 메타데이터를 담는 곳(클래스 이름, 스태틱한 필드 정보 등)
  • Heap 영역이 아니라, Native 메모리 영역이다.
  • 기본값으로  제한된 크기를 가지지 않는다. 필요한 만큼 계속 늘어난다.
  • 자바8부터 PermGen 관련 java 옵션은 무시된다. 
    • -XX:MetaspaceSize=N : Metaspace 초기 사이즈 설정
    • -XX:MaxMetaspaceSize=N : Metaspace 최대 사이즈 설정

더 공부해보자

  1. garbage collector가 각각의 상태에서 어떻게 일을 하는지
    1. young-generation
    2. old-generation

이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.

 

더 자바, Java 8 강의 | 백기선 - 인프런

백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합

www.inflearn.com