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 에서 접근 가능 한 범위내에서 순환 참조가 계속되면, 가비지 컬렉션이 이루어 지지 않으니, 메모리 누수를 방지할 수 있게 만들자.

반응형