javascript 에서의 constant pool

hoin_lee·2023년 9월 15일
0

TIL

목록 보기
218/236

Constant pool

constant pool에 대해 구글링을 검색해봐도 대부분 Java에서의 constant pool만 나와서 배운 걸 바탕으로 정리해보려고 한다.
물론 constant pool이 하는 일은 java와 크게 다른 것 같지는 않다.
java에서와 마찬가지로 캐싱,보안,복사가 필요없는 빠른 재사용성, 동기화 성능 때문이라고 하는데 마찬가지로 js에서도 동작하는 방식을 보면 같은 것 같다.

javascript에서의 stack과 heap

일단 우리가 알고있는 메모리 구조에서 코드와 데이터 영역을 제외하고 스택과 힙이 constant pool에 밀접한 관계가 있다
우선 스택에 관해 생각하자면 보통 primitive한 값들만 해당 영역에 저장하는데
a=1,b=false....등과 같은 값들이 들어간다
하지만 string도 js에선 primitive 타입으로 보는데 당연히 stack에 저장된다라고 생각하긴 힘들다

javascript에서만 primitive 타입으로 보지 다른 곳에선 object(char[])로 본다. 그만큼 값이 가변적일 수 있다는 얘기가 아닐까 싶다.
우리가 string을 얼마든지 길게 쓸수도 있고 길게 썼다가 급 초기화 할 수 있듯이 말이다
그러면 stack의 범위는 그렇게 크지 않은데 엄청나게 긴 string도 stack에 저장해야 할까?

기본적으로 heap영역은 가변성 데이터들을 저장하기 위해 엄청나게 넓은 메모리 영역이다. 엄청 넓은 운동장에서 바늘의 위치를 알아도 찾아가기 힘들지만 내 방에서 바늘의 위치를 알고 찾아가기엔 많이 쉽다.
이처럼 stack이 내 방이고 heap이 운동장이라 치면 당연히 stack이 일처리를 할 때 더 쉽고 heap이 더 어렵다고 생각한다. 그런데 stack이라는 내 방에 엄청나게 긴 string 예를 들면 엄청 큰 장롱이 하나 들어오면 티비,침대,책상,컴퓨터 등등 내가 바로 사용할 수 있는 것들을 둬야 하는데 언제 입을지도 모르는 겨울 옷 장롱이 모든 공간을 차지하고 있으면 엄청 비 효율적이라고 생각한다

그래서 string 같은경우(char[]) constant pool에 둔다. 물론 기본적으로 constant pool은 heap에 잡혀있다.
짧게 보면 레퍼런스 타입인데 stack에 두고 싶은 것들(커다란 값을 가지는 primitive타입)을 constant pool에 두는 것이다
예전 정보를 찾아보면 java에서도 constant pool은 heap과 별개로 두었다고 나오는데 OOM(out of memory) 문제로 java7 이후엔 heap영역에 있다고 한다.

참고로 constant pool은 Map으로 구성되어 있다

profile
https://mo-i-programmers.tistory.com/

0개의 댓글