Javascript
[Garbage Collection]
★개발일기★
2023. 7. 5. 13:55
반응형
1. 가비지 컬렉션이란?
- 할당된 메모리를 관리하는 기능
- 사용되지 않는 메모리를 식별하고 해제하여 프로그램의 메모리 누수를 방지하고 성능을 향상시킨다.
2. 자바스크립트 가비지 컬렉션 동작 원리
- 자바스크립트 데이터 구조를 생성하면 메모리가 할당된다.
- root 로 부터 도달 가능하지 않은 객체는 메모리에서 해제시킨다.
2-1) 기본적인 예시
// fruit 변수에 객체를 할당했으므로 메모리가 할당된다.
let fruit = {
name: "peach"
}
// null 값을 재할당
fruit = null
// {name: "peach"} 라는 객체는 더 이상 참조되지 않는다.
// 가비지 컬렉션에 의해 메모리가 해제된다.
2-2) 다른 예시
// fruit 변수에 객체를 할당했으므로 메모리가 할당된다.
let fruit = {
name: "peach"
}
// fruit2 변수의 값을 할당했으므로 메모리가 할당된다.
let fruit2 = null
// fruit2 에 fruit 객체 주소값을 할당한다.
fruit2 = fruit
// null 값을 재할당
fruit = null
// {name: "peach"} 라는 객체는 fruit2 가 참조하고 있다.
// 가비지 컬렉션에 의해 메모리가 해제되지 않는다.
2-3) 함수내부 예시
function fruits() {
const peach = {}
const apple = {}
// 순환 참조하여 가비지 컬렉션에서 제거되지 않나?
peach.obj = apple
apple.obj = peach
return '과일'
}
fruits()
위와 같은 함수 내부에서는 서로 순환참조 중이여서 가비지컬렉션이 이루어지지 않는다.
하지만 fruits 함수를 실행하고, '과일' 값이 return 된다면, root 에서 이 함수 내부에는 도달 할 수 없기 때문에,
가비지 컬렉션에 의해 메모리가 해제된다.
3. 결론
- 가비지 컬렉션은 자동으로 실행(자바스크립트 엔진) 된다. ( 개발자가 직접 메모리 관리를 할 필요는 없다 )
- root 에서 접근 가능 한 범위내에서 순환 참조가 계속되면, 가비지 컬렉션이 이루어 지지 않으니, 메모리 누수를 방지할 수 있게 만들자.
반응형