JavaScript는 배후에서 메모리 관리를 수행합니다.
프리미티브, 객체, 함수, 우리가 만드는 모든 것이 메모리를 차지합니다.
그렇다면 더 이상 유용하지 않은 것은 어떻게 처리해야 할까요? 이제 JavaScript 엔진이 우리에게 필요하지 않은 것을 어떻게 찾아 제거하는지 살펴보겠습니다.
자바스크립트는 메모리 관리는 도달 가능성의 개념을 사용하여 수행됩니다.
“도달 가능” 값은 어떤 방식으로든 액세스하거나 사용할 수 있는 값입니다.
도달 가능한 값은 메모리에서 제거되지 않습니다.
예를 들어,
let a = 10;
여기서 값 10은 달성 가능한 값입니다.
이는 변수 영역의 특정 주소에 있는 변수 a의 값이 데이터 영역에서 10을 가리키기 때문입니다.
1. 아래에 기재된 값은 태어날 때부터 도달 가능한 값이므로 이유 없이 삭제되지 않습니다.
이 값 뿌리 그것은 알려져있다.
예:
현재 함수의 지역 변수 및 매개변수
중첩 함수 체인의 함수가 사용하는 변수 및 매개변수
글로벌 변수
등
2. 루트가 참조하는 값 또는 링크를 통해 루트가 참조하는 값은 도달 가능한 값이 됩니다.
3. 전역 변수에 저장된 개체가 있다고 가정합니다.
이 개체의 속성이 다른 개체를 참조하는 경우 해당 속성이 참조하는 개체는 도달 가능한 값이 됩니다.
이 개체가 참조하는 다른 항목도 도달 가능한 것으로 간주됩니다.
자세한 예는 아래에서 볼 수 있습니다.
자바스크립트 엔진에서 가비지 컬렉터끊임없이 일하십시오. 가비지 수집기는 모든 개체를 모니터링하고 연결할 수 없는 개체를 삭제합니다.
가비지 컬렉터가 원시 데이터를 처리하는 방법
가비지 컬렉터가 원시 데이터로 작동하는 방식은 변수의 원시 데이터를 저장한 다음 값을 변경하여 이전에 데이터 영역에 저장된 값이 더 이상 참조되지 않으면 메모리에서 지워집니다.
가비지 컬렉터가 개체 데이터를 처리하는 방법
네 가지 상황을 설명하겠습니다.
먼저 객체가 참조하는 객체에 속성이 있다고 가정해 보겠습니다.
이 경우 변수가 더 이상 개체를 참조하지 않고 null과 같은 값으로 바꾸면 개체에 액세스할 수 없게 됩니다.
따라서 가비지 컬렉터가 처리합니다.
둘째, 변수가 개체를 참조한다고 가정하면 새 변수를 선언하고 이전에 개체를 참조한 변수에 할당합니다.
그 상태에서 원래 할당된 변수의 값이 null과 같은 값으로 변경되더라도 나중에 할당된 변수를 사용하여 개체에 액세스할 수 있기 때문에 가비지 컬렉터에서 처리되지 않습니다.
셋째, 변수가 객체를 참조하고 그 객체 안에 두 객체가 있고 두 객체가 임의의 관계(예: 객체 1과 객체 2가 친구임)를 갖는다고 가정합니다.
) 이 경우 가비지 수집기가 변수가 참조하는 개체에서 두 개체 중 하나를 삭제하도록 하려면 해당 두 개체를 포함하는 개체에서 하나의 개체를 삭제하고 다른 개체를 삭제합니다.
제거해야 합니다.
넷째, 세 번째 초기 경우와 같이 변수에 할당된 값이 객체(null)가 아닌 다른 값으로 설정되면 이 두 객체를 포함하는 객체는 도달 불가능한 섬이 되어 가비지 컬렉터가 처리하게 됩니다.