웹 프론트엔드 JS 튜토리얼 자바스크립트 메모리 재활용 메커니즘 이해_javascript 기술

자바스크립트 메모리 재활용 메커니즘 이해_javascript 기술

May 16, 2016 pm 06:11 PM
메모리 회수

1. 잔소리
JavaScript 언어는 스크립트 언어의 유연성 외에도 고급 언어의 많은 기능을 갖추고 있습니다. 객체의 인스턴스화, 가비지 재활용 메커니즘(GC: Garbage Collection) 일반적으로 우리는 객체를 생성하기 위해 new를 사용하며, GC는 객체가 차지하는 메모리 영역을 재활용하는 역할을 담당합니다. 따라서 GC를 이해하면 JavaScript 가비지에 대한 이해가 깊어질 수 있습니다. 수집 메커니즘.
2. GC를 설명하려면 로컬 변수와 전역 변수를 사용하세요
GC는 메모리를 회수할 때 먼저 다른 개체 참조가 없는지 확인한 후 해당 개체를 참조합니다. , 객체 메모리가 해제됩니다. 따라서 객체가 더 이상 참조되지 않는지 확인하는 방법이 GC의 핵심입니다. 🎜> 코드는 다음과 같습니다.
<script> function aa(){ this.rr = "팝업 창" } function bb(){ this.rr = "팝업 창" ";
}
var b1;
function cc(){
var a1 = new aa();
b1 = new bb();
return b1; }
cc()
alert(b1.rr)



위 코드에서는 cc()를 실행한 후 a1이 재활용됩니다. b1.rr을 통해 텍스트 창을 띄울 수 있습니다. 일부 기본 서적에서는 a1이 전역 변수라고 설명되어 있습니다. 지역 변수는 실행 후 GC에 의해 재활용됩니다. 그러나 항상 그런 것은 아닙니다. 다음 코드는




코드 복사

입니다. 코드는 다음과 같습니다:

<script> function aa(){ this .rr = "팝업 창" } function bb( ){ this.rr = "팝업 창"; }
function cc(){
var a1 = new aa()
var b1 = new bb();
return b1;
}
var b1 = cc();
alert(b1.rr)
&lt ;/script> cc 함수의 a1 및 b1은 로컬 변수이지만 텍스트 창이 계속 나타납니다. 이는 b1이 GC에 의해 재활용되지 않았음을 의미합니다. 따라서 javascript의 로컬 변수가 항상 GC에 의해 재활용되는 것은 아닙니다.
3. GC의 추상적인 이해

GC 재활용 메커니즘에 대해서는 더 많은 이해가 필요합니다. 이때 이중 연결 목록, 범위 체인, 활성 개체 등 여러 개념을 소개합니다(이해의 편의를 위해 원문의 개념을 단순화했습니다[http://softbbs.pconline.com.cn/9497825.html]. ]), 여기서는 이중 연결 리스트의 복잡한 객체의 상위 및 하위 계층 관계를 설명합니다. 범위 체인과 활성 객체는 각각 이중 연결 리스트의 노드입니다. cc 함수를 예로 들면, 가변 계층 관계는 다음과 같습니다. :
window<=>cc<=>a1<=&gt ;rr
<=>b1<=>rr
(자세한 설명은 원문에 있음) cc( ) 메서드에서 메모리 내 변수의 참조 관계는 위와 같으며, 텍스트 설명은 다음과 같습니다.
window cc의 활성 개체에는 cc가 포함됩니다. 작업 중 재활용되지 않음)
cc의 활성 개체에는 a1 및 b1이 포함되며 범위 체인은 window입니다.
a1의 활성 개체에는 rr이 포함되며, 역할은 도메인 체인이 cc입니다.
활성 개체의 b1에는 rr이 포함되어 있고 해당 스코프 체인은 cc입니다.
cc()가 실행되면 cc의 실행 환경은 활성 개체를 생성하고 해당 지역 변수 a1, b1은 cc의 활성 개체에 매달립니다. cc()가 실행되면 실행 환경은 활성 객체가 차지한 메모리를 회수하려고 시도합니다. 그러나 지역 변수 b1이 b1을 반환하므로 범위 체인이 여기에 추가됩니다. window ;b1 ;rr, 그래서 GC는 b1 재활용을 중단합니다.
따라서 지역 변수/함수를 전역으로 승격하려면 범위 체인을 추가하면 됩니다.
동시에 객체의 범위 체인을 제어하는 ​​것도 중요합니다. 범위 체인으로 인해 실수로 GC가 대상 객체를 재활용할 수 없게 됩니다. 예:


코드 복사


코드는 다음과 같습니다.


<SCRIPT LANGUAGE="JavaScript">
//cat
function cat( name){
var zhuren;
this.name = name //소유자 설정this.addZhuRen = function(zr) zhuren = zr; } this.getZhuRen = function(){ return zhuren;
}
}
//Master
function zhuren(이름) {
this.name = 이름;
}
//소유자 만들기:
var zr = new zhuren("zhangsan")
//고양이 만들기
var cat1 = new cat("asan");//고양이 소유자 설정
cat1.addZhuRen(zr)
//소유자 해제
zr = null; 또한 여기
alert(cat1.getZhuRen ().name)
//-->
</SCRIPT>
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JavaScript로 문자열 문자를 교체하십시오 JavaScript로 문자열 문자를 교체하십시오 Mar 11, 2025 am 12:07 AM

JavaScript로 문자열 문자를 교체하십시오

jQuery 날짜가 유효한지 확인하십시오 jQuery 날짜가 유효한지 확인하십시오 Mar 01, 2025 am 08:51 AM

jQuery 날짜가 유효한지 확인하십시오

jQuery는 요소 패딩/마진을 얻습니다 jQuery는 요소 패딩/마진을 얻습니다 Mar 01, 2025 am 08:53 AM

jQuery는 요소 패딩/마진을 얻습니다

상위 5 일 날짜 조작 JS 플러그인 상위 5 일 날짜 조작 JS 플러그인 Feb 28, 2025 am 12:34 AM

상위 5 일 날짜 조작 JS 플러그인

10 JQuery 플러그인을 확인할 가치가 있습니다 10 JQuery 플러그인을 확인할 가치가 있습니다 Mar 01, 2025 am 01:29 AM

10 JQuery 플러그인을 확인할 가치가 있습니다

10 JQuery Accordions 탭 10 JQuery Accordions 탭 Mar 01, 2025 am 01:34 AM

10 JQuery Accordions 탭

jQuery div에 스크롤 바를 추가합니다 jQuery div에 스크롤 바를 추가합니다 Mar 01, 2025 am 01:30 AM

jQuery div에 스크롤 바를 추가합니다

10 Ajax/JQuery Autocomplete 튜토리얼/플러그인 10 Ajax/JQuery Autocomplete 튜토리얼/플러그인 Feb 28, 2025 am 01:03 AM

10 Ajax/JQuery Autocomplete 튜토리얼/플러그인

See all articles