> 웹 프론트엔드 > JS 튜토리얼 > JS 가비지 수집 메커니즘 및 메모리 관리에 대한 간략한 분석

JS 가비지 수집 메커니즘 및 메모리 관리에 대한 간략한 분석

零到壹度
풀어 주다: 2018-04-04 14:36:24
원래의
1173명이 탐색했습니다.

이 글은 주로 JS 가비지 수집 메커니즘과 메모리 관리에 대한 간략한 분석을 소개합니다. 편집자는 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 함께 살펴볼까요

가비지 컬렉션

JavaScript의 가비지 컬렉션 메커니즘은 매우 간단합니다. 더 이상 사용하지 않는 변수를 찾아서 해제합니다.

로컬 변수는 실행 중에만 존재합니다. 함수가 실행될 때 로컬 변수가 존재할 필요는 없습니다. 그러나 모든 변수가 그렇게 쉽게 판단할 수 있는 것은 아니므로 이러한 변수를 재활용하려면 몇 가지 방법을 사용해야 합니다.

1 마크 지우기:

자바스크립트의 최고 흔히 사용되는 가비지 수집 방법은 변수가 환경에 들어갈 때 변수가 환경에 들어갈 때 변수가 "탈출"로 표시됩니다. 일반적으로 환경으로 표시된 변수는 액세스할 방법이 없기 때문에 그대로 두어 변수를 지웁니다. 그런 다음 가비지 수집기가 메모리 정리 작업을 완료합니다.

2 참조 계산:

이 방법은 일반적으로 사용되지 않습니다. 참조 카운팅의 의미는 참조되는 각 값을 기록하는 것입니다. 횟수가 참조 횟수가 0이 되면 해당 값에 접근할 수 있는 방법이 없다는 의미입니다.

그러나 참조 계산에는 문제가 있습니다: 순환 참조. 예: 이 예에서는 Objecta와 ObjectB가 서로 인용됩니다. 즉, 이 두 개체의 참조는 2입니다. 표시 및 스윕 전략을 사용하는 구현에서는 함수가 실행된 후 두 개체가 모두 범위를 벗어나기 때문에 이 상호 참조는 문제가 되지 않습니다. 그러나 참조 계산 전략을 사용하는 구현에서는 참조 수가 결코 0이 되지 않기 때문에 함수가 실행된 후에도 objectA 및 objectB가 계속 존재합니다. 이 함수를 여러 번 호출하면 많은 양의 메모리가 재활용되지 않습니다

이러한 문제를 방지하려면 순환 참조를 제거하기 위해 사용되지 않을 때 null로 설정해야 합니다


메모리 관리:


우리 모두는 웹 브라우저에 할당된 사용 가능한 메모리 양이 일반적으로 데스크톱 애플리케이션에 할당된 메모리 양보다 적다는 것을 알고 있습니다. 이것의 목적은 주로 보안상의 이유이며 JavaScript를 실행하는 웹 페이지가 모든 시스템 메모리를 사용하여 시스템 충돌을 일으키는 것을 방지하는 것입니다. 메모리 제한 문제는 변수에 대한 메모리 할당뿐만 아니라 스레드에서 동시에 실행될 수 있는 명령문 수와 호출 스택에도 영향을 미칩니다.

따라서 페이지가 최소한의 메모리를 차지하도록 하면 더 나은 성능을 얻을 수 있습니다. 메모리 사용을 최적화하는 가장 좋은 방법은 실행 코드에 필요한 데이터만 저장하는 것입니다. 데이터가 더 이상 유용하지 않으면 해당 값을 null로 설정하여 참조를 해제하는 것이 좋습니다. 이를 역참조라고 합니다. 이 접근 방식은 대부분의 전역 변수와 전역 개체의 속성에 적용됩니다. 다음 예제와 같이 지역 변수는 실행 환경을 떠날 때 자동으로 역참조됩니다.


function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}
로그인 후 복사

값 역참조가 해당 값이 차지하는 메모리를 자동으로 재활용한다는 의미는 아닙니다. 역참조가 실제로 수행하는 작업은 다음에 실행될 때 가비지 수집기가 회수할 수 있도록 실행 환경에서 값을 가져오는 것입니다.


관련 권장 사항:


java 가비지 수집 메커니즘, 메모리 관리

JS 가비지 수집 메커니즘 및 메모리 할당

JavaScript 가비지 수집 메커니즘 및 메모리 누수 문제

위 내용은 JS 가비지 수집 메커니즘 및 메모리 관리에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿