자바스크립트 가비지 컬렉션
메모리 관리는 프로그래밍에서 매우 중요하므로 JavaScript 엔진은 도달할 수 없는 모든 개체를 제거하거나 정리합니다.
이전 기사에서 가비지 수집에 대해 배웠지만 아래에서 조금 더 살펴보겠습니다.
접근성
스크립트에서 실행되는 프로그램은 접근성 또는 도달 가능성을 위해 메모리에 저장됩니다.
아래에서 몇 가지 예를 살펴보겠습니다.
const person = {
name: 'Bello'
};
위의 예
person
에서 개체{ name: 'Bello' }
를 참조하지만 개체가 변경되거나 덮어쓰이면 어떻게 됩니까?아래 예를 참조하십시오.
let person = {
name: 'Bello'
};
person = null;
위의 예에서
Bello
에 대한 참조가 없기 때문에 이제 연결할 수 없습니다. 이것은 가비지 수집기가 메모리를 해제하기 위해 데이터를 버리는 곳입니다.두 개의 참조
객체를
null
로 설정하고 이미 다른 변수에 복사된 경우 계속 참조할 수 있습니다.아래 예를 참조하십시오.
const person = {
name: 'Bello'
};
let user = person;
user = null;
console.log(person.name); // Bello
위의 예에서 객체
person
는 여전히 도달할 수 있지만 복사된 객체user
를 통해 도달할 수 있습니다.상호 연결된 개체
아래 예를 참조하십시오.
const marry = (man, woman) => {
woman.husband = man;
man.wife = woman;
return {
father: man,
mother: woman
}
}
const family = marry(
{ name: "Bello" },
{ name: "Monica" }
);
console.log(family);
/*
{
father: { name: 'Bello', wife: { name: 'Monica', husband: [Circular] } },
mother: { name: 'Monica', husband: { name: 'Bello', wife: [Circular] } }
}
*/
delete family.father; // true
delete family.mother.husband; // true
console.log(family) // { mother: { name: 'Monica' } }
[Circular]
는 개체 간에 상호 연결된(폐쇄 루프) 관계가 있음을 의미합니다.Circular reference is a series of references where an object references itself directly or indirectly through a series of objects, resulting in a closed-loop, appearing in most computer programming including JavaScript - Akinjide Bankole
위의 모든 객체는 다음 코드가 발생한 후에도 도달 가능합니다.
delete family.father;
delete family.mother.husband;
그러나 가족 개체에서 아버지 개체를 삭제하면
Bello
더 이상 들어오는 참조가 없습니다.delete family.father;
console.log(family)
/*
{
mother: { name: 'Monica', husband: { name: 'Bello', wife: [Circular] } }
}
*/
console.log(family.father) // undefined
Bello는 도달할 수 없기 때문에 가비지 수집기에 의해 메모리에서 제거됩니다. 데이터도 액세스할 수 없게 되었습니다.
도달할 수 없는 섬
전역 개체(
family
)가 null
로 초기화되면 상호 연결된 개체에 연결할 수 없게 됩니다.아래 예를 참조하십시오.
const marry = (man, woman) => {
woman.husband = man;
man.wife = woman;
return {
father: man,
mother: woman
}
}
let family = marry({
name: "Bello"
}, {
name: "Monica"
});
family = null;
console.log(family) // null
전역 객체
familly
를 null
로 설정하면 위에서 상호 연결된 객체의 전체 섬이 메모리에서 제거됩니다.Reference
이 문제에 관하여(자바스크립트 가비지 컬렉션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bello/javascript-garbage-collection-3jha텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)