[JAVA8] Metaspace

이재훈·2023년 5월 25일
0

JAVA8

목록 보기
17/23

인프런 강의 "더 자바, JAVA8"(백기선님)의 강의를 듣고 정리한 글 입니다.
JAVA8에 추가된 핵심 기능들을 이해하기 쉽게 설명해 주시니 한번씩 들어보시는 것을 추천드립니다.

"더 자바, JAVA8 바로가기"


Metaspace

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

PermGen

  • permanaent generation, 클래스 메타데이터를 담는 곳.
  • Heap 영역에 속함.
  • 기본값으로 제한된 크기를 가지고 있음.
    -> GC를 해도 메모리가 넘게 되면 exception이 발생함.
    -> 근본적인 문제를 해결하기 위해서는 코드를 분석해야 함.
  • -XX:PermSize=N, PermGen 초기 사이즈 설정
  • -XX:MaxPermSize=N, PermGen 최대 사이즈 설정

Metaspace

  • 클래스 메타데이터를 담는 곳.
  • Heap 영역이 아니라, Native 메모리 영역이다.
  • 기본값으로 제한된 크기를 가지고 있지 않다. (필요한 만큼 계속 늘어난다.)
    -> 그래도 죽는다면 서버가 죽는 것이다.
    -> 그것을 방지하기 위해 최대 사이즈를 정해주면 된다.
  • 자바 8부터 PermGen 관련 java 옵션은 무시한다.
  • -XX:MetaspaceSize=N, Metaspace 초기 사이즈 설정
  • -XX:MaxMetaspaceSize=N, Metaspace 최대 사이즈 설정.

보통의 경우에는 설정할 필요가 없습니다. 하지만 클래스를 계속 만들어내는 문제가 발생하고 누수가 되고 있다면 이 부분도 확인해보아야 하고, Metaspace의 최대 사이즈 설정을 해주어야 합니다.

profile
부족함을 인정하고 노력하자

0개의 댓글