[TIL] #8 Runtime Constant Pool in Java

phdljr·2023년 10월 13일
0

TIL

목록 보기
8/70

JVM에 대해 알아보던 도중, 상수가 저장되는 위치에 대해 의문점이 생겨서 알아보는 시간을 갖게 되었다.

String이 가지는 리터럴 값(문자열)이 Heap에 존재하는 공간인 String Pool에 저장된다는 것까진 알고 있었다.

그렇다면, 숫자나 다른 리터럴 값들은 어디에 저장되는 것일까?
정답은 Runtime Constant Pool인 듯 하다.



Runtime Constant PoolJVMRuntime Data Area에서 Heap에 위치한다. 이는 JVM이 해당 class에서 사용되는 모든 리터럴 값들을 저장한다.


Runtime Constant Pool의 내부 구조를 살펴보면, 다양한 종류의 리터럴 값들이 존재한다.


여기서 우리가 다시 봐야할 부분은 JVM 8부터 Method Area 영역이 저장되는 Permanent GenerationMetaspace으로 바꼈으며, JVM이 아니라 Native Memory(JVM이 아닌 실제 물리적인 메모리 공간)으로 옮겨진 것을 볼 수 있다.

이전까지는 JVM에 할당된 메모리 크기만큼 리터럴 값을 사용할 수 있었지만, Java 8부터는 Nativa Area로 옮겨진 탓에 리터럴 값을 많이 선언하였다고 OutOfMemoryError 예외가 더 이상 발생하지 않는다.

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글