프로그래밍 언어/Java
[Java] PermGen과 Metaspace
자바 7과 8 비교
자바 7의 HotSpot JVM 구조
<----- Java Heap -----> <--- Native Memory --->
+------+----+----+-----+-----------+--------+--------------+
| Eden | S0 | S1 | Old | Permanent | C Heap | Thread Stack |
+------+----+----+-----+-----------+--------+--------------+
<--------->
Permanent Heap
S0: Survivor 0
S1: Survivor 1
자바 8의 HotSpot JVM 구조
<----- Java Heap -----> <--------- Native Memory --------->
+------+----+----+-----+-----------+--------+--------------+
| Eden | S0 | S1 | Old | Metaspace | C Heap | Thread Stack |
+------+----+----+-----+-----------+--------+--------------+
자바 8로 넘어가면서 Permanent 영역이 사라지고 Metaspace 영역이 새로 추가된 것을 볼 수 있습니다.
Permanent Generation 영역이란?
1) PermGen 영역은 Heap 영역에 속합니다.
2) PermGen 영역은 현재까지 로드한 클래스와 메서드의 메타 데이터, 정적 변수와 상수 정보들이 저장되는 공간입니다.
Metaspace 영역이란?
1) Metaspace 영역은 현재까지 로드한 클래스와 메서드의 메타 데이터가 저장되는 공간입니다.
2) Heap 영역이 아니라 Native 메모리 영역에 위치합니다.
PermGen이 Metaspace 영역으로 바뀐 이유
PermGen은 제한된 메모리 영역이기 때문에 OutOfMemoryError가 발생했습니다. 이 문제를 해결하기 위해 Native 메모리를 사용하는 Metaspace로 바뀌게 된 것입니다. 결국 Metaspace가 Native 메모리를 이용함으로써 개발자는 영역 확보의 상한을 크게 의식할 필요가 없어지게 되었습니다.
정리하자면, 각종 메타 정보를 OS가 관리하는 영역으로 옮겨 PermGen 영역의 크기 제한을 없앤 것이라 할 수 있습니다.
참고
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] Generic (0) | 2021.11.24 |
---|---|
[Java] Reflection (0) | 2021.11.21 |
[Java] ClassLoader (0) | 2021.11.02 |
[Java] Garbage Collection (0) | 2021.10.31 |
[Java] JVM (0) | 2021.10.25 |
댓글