자바스크립트 엔진은 메모리 용량을 언제 할당할까요? #10
Unanswered
moonheekim0118
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
질문
각 데이터 타입은 할당되는 메모리 용량이 다른데, 자바스크립트 엔진은 컴파일 시가 아니라 런타임 시 타입을 추론한다고 알고 있어요! 이 메모리 용량도 런타임 시에 타입에 맞게 할당되는 걸까요?
답변
먼저 자바스크립트 변수가 자바스크립트 엔진의 어디에 저장되는지부터 설명드려야 할 것 같아요.
이렇게 두 군데에 저장이 됩니다.
말씀해주신 대로, 자바스크립트는 컴파일 시에는 타입이 정해져있지 않기 때문에 사용할 메모리 용량을 알 수 없어요. 다만, 자바스크립트는 딱 두가지 타입 (원시값- 객체값) 으로 나누어져있습니다. 사실상 원시값은 불변하기 때문에, 원시값의 최대 메모리 크기는 자바스크립트 엔진이 쉽게 예측할 수 있어요. 따라서 원시값의 경우 메모리 용량이 변할 일이 없기 때문에, 원시값은 컴파일 타임에 스택에 저장됩니다.
그러면 객체값은 어떨까요? 객체값은 배열의 길이가 늘어날 수도 있고, 객체의 프로퍼티가 추가될 수도 있기 때문에, 힙 메모리에 저장된다고 합니다. 컴파일타임에 코드 내에서 해당 객체의 크기가 늘어날지 아닐지 예측 할 수도 없거니와, 메모리 용량의 효율을 위해서라고 해요.
만약, 배열을 원시값처럼 정해진 메모리에 저장했는데, 배열의 크기가 늘어난다면...? 해당 메모리 앞 뒤에 있는 메모리를 모두 옮겨야하는 불상사가 일어나니까요~!
그런데 그렇다고 객체값이 힙에만 저장되는건 아닙니다. 위와같이 객체값도 스택에 저장된 채로, 그 객체는 힙에 있는 해당 객체에 대한 참조주소 를 가진다고 합니다. 객체값의 레퍼런스 역시 컴파일 타임에 저장이 되구요.
결론
좋은 질문 해줘서 고마워요 하리~!
참고자료
Beta Was this translation helpful? Give feedback.
All reactions