인프런 강의 "더 자바, JAVA8"(백기선님)의 강의를 듣고 정리한 글 입니다.
JAVA8에 추가된 핵심 기능들을 이해하기 쉽게 설명해 주시니 한번씩 들어보시는 것을 추천드립니다.
"더 자바, JAVA8 바로가기"
JVM의 여러 메모리 영역 중에 PermGen 메모리 영역이 없어지고 Metaspace 영역이 생겼다.
PermGen
- permanaent generation, 클래스 메타데이터를 담는 곳.
- Heap 영역에 속함.
- 기본값으로 제한된 크기를 가지고 있음.
-> GC를 해도 메모리가 넘게 되면 exception이 발생함.
-> 근본적인 문제를 해결하기 위해서는 코드를 분석해야 함.
- -XX:PermSize=N, PermGen 초기 사이즈 설정
- -XX:MaxPermSize=N, PermGen 최대 사이즈 설정
- 클래스 메타데이터를 담는 곳.
- Heap 영역이 아니라, Native 메모리 영역이다.
- 기본값으로 제한된 크기를 가지고 있지 않다. (필요한 만큼 계속 늘어난다.)
-> 그래도 죽는다면 서버가 죽는 것이다.
-> 그것을 방지하기 위해 최대 사이즈를 정해주면 된다.
- 자바 8부터 PermGen 관련 java 옵션은 무시한다.
- -XX:MetaspaceSize=N, Metaspace 초기 사이즈 설정
- -XX:MaxMetaspaceSize=N, Metaspace 최대 사이즈 설정.
보통의 경우에는 설정할 필요가 없습니다. 하지만 클래스를 계속 만들어내는 문제가 발생하고 누수가 되고 있다면 이 부분도 확인해보아야 하고, Metaspace의 최대 사이즈 설정을 해주어야 합니다.