TIL_20210330
가비지 컬렉션
- 자바스크립트는 도달 가능성(reachability) 이라는 개념을 사용해 메모리 관리를 수행
- ‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값
- 아래의 값들은 그 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 아니함. 이러한 값들을 루트(root)라고 부름
- 현재 함수의 지역 변수와 매개변수
- 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
- 전역 변수
- 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값
// Example 1
let user = {
name: "John"
};
let admin = user;
user
엔 객체 참조 값 저장
user
의 값을 다른 값으로 덮어쓰기
user = null;
- 전역 변수
admin
을 통하면 여전히 객체 John에 접근할 수 있기 때문에 John은 메모리에서 삭제되지 아니함. 이 상태에서admin
을 다른 값(null 등)으로 덮어쓰면 John은 메모리에서 삭제
// Example 2
function marry(man, woman) {
woman.husband = man;
man.wife = woman;
return {
father: man,
mother: woman
}
}
let family = marry({
name: "John"
}, {
name: "Ann"
});
-
함수
marry
는 매개변수로 받은 두 객체를 서로 참조하게 하고, 두 객체를 포함하는 새로운 객체를 반환
-
참조 삭제
delete family.father;
delete family.mother.husband;
-
John은 이제 도달 가능한 상태가 아니기 때문에 메모리에서 제거. John에 저장된 데이터(프로퍼티) 역시 메모리에서 사라짐
-
가비지 컬렉션 후 메모리 구조
도달할 수 없는 섬
- 객체들이 연결되어 섬 같은 구조를 만드는데, 이 섬에 도달할 방법이 없는 경우, 섬을 구성하는 객체 전부가 메모리에서 삭제
"family"
객체와 루트의 연결이 사라지면 루트 객체를 참조하는 것이 아무것도 없게 되어, 섬 전체가 도달할 수 없는 상태가 되고, 섬을 구성하는 객체 전부가 메모리에서 제거
family = null;
Author And Source
이 문제에 관하여(TIL_20210330), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qkrcndtlr123/TIL20210330저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)