728x90
실행 컨택스트와 스코프, 콜 스택과 힙의 사전 지식이 필요하다.
메모리 누수
Javascript 메모리는 원시값을 저장하는 콜 스택 메모리와 참조 값을 저장하는 힙 메모리로 구분된다.
실행 컨텍스트(GEC, FEC)가 콜 스택에 쌓이게 되면 참조 값이 있다면 힙 메모리에 데이터가 쌓이게 됩니다.
실행 컨텍스트가 차례대로 제거 된다면, 그 순서에 맞게 힙 메모리에 쌓인 데이터는 더이상 참조되지 않으므로 필요가 없어집니다.
이때 계속해서 힙 메모리에 불필요한 데이터가 메모리를 차지하게되면 메모리 누수로 인해 성능이 떨어지게됩니다.
메모리 누수? 사용하지 않는 메모리를 해제하지 못하여 계속 메모리를 점유하는 것
종합하자면, 가비지 컬렉터가 더이상 참조되지 않는 객체를 인지하고, 불필요한 메모리를 해제한다.
가비지 컬렉션
프로그래밍 언어가 자동으로 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 메모리를 찾아서 해제하는 프로세스를 말한다.
루트(Root)라는 용어는 메모리에서 해제되지 않는 값들을 부르는 용어로, 아래와 같은 값에서 적용된다
- 현재 함수의 지역 변수와 매개변수
- 중첩 함수의 스코프 체인에 있는 함수에서 사용하는 변수와 매개변수
- 전역변수
자바 스크립트 엔진에서 가비지 컬렉션은 끊임 없이 동작한다.가비지 컬렉션이 모든 객체를 모니터링하고 루트가 아닌 참조 없는 값들을 메모리에서 해제한다.
루트가 아닌 값을 메모리에서 해제하는 과정을 통해 메모리를 최적화 한다는 장점이 있다.
하지만 참조하지 않게되는 시점이 아닌 가비지 컬렉션이 동작할 때에 해제되기 때문에 최적의 메모리 관리를 할 수 없다는 단점이 있다.
참고 링크
728x90
'JavaScript > Javascript' 카테고리의 다른 글
프로토타입 (Prototype) (0) | 2023.10.09 |
---|---|
자바스크립트 비동기와 이벤트 루프 (1) | 2023.10.07 |
콜 스택(Call stack)과 힙(Heap) (0) | 2023.10.06 |
IIFE (Immediately Invoked Function Expression, 즉시 실행 함수 표현식) (0) | 2023.10.04 |
변수, var 그리고 블럭 스코프를 갖는 let, const (0) | 2023.10.02 |