>  기사  >  웹 프론트엔드  >  몇 초 만에 js의 가비지 수집 메커니즘 이해

몇 초 만에 js의 가비지 수집 메커니즘 이해

hzc
hzc앞으로
2020-06-13 09:49:412969검색

머리말


js에는 자동 가비지 수집 메커니즘이 있습니다. 즉, 실행 환경은 코드 실행 중에 사용되는 메모리를 관리합니다.

JS 가비지 컬렉션의 원리


실행 환경은 더 이상 사용되지 않는 변수를 찾아 해당 변수가 차지하는 메모리를 해제합니다.

js 가비지 수집 전략


마크 지우기

변수가 환경에 들어가면 "환경에 들어감"으로 표시되고, 변수가 환경에 들어가면 "환경을 떠나는 것"으로 표시됩니다. " ".

변수를 표시하는 방법은 특정 구현에 따라 다릅니다. 예를 들어 "환경 시작" 변수 목록과 "환경 종료" 변수 목록을 사용하여 어떤 변수가 변경되었는지 추적할 수 있습니다.

표시 제거를 사용한 브라우저에는 IE, Firefox 및 Chrome이 포함됩니다.

참조 계산

이것은 덜 일반적인 가비지 수집 전략입니다. 각 값이 참조되는 횟수를 추적합니다.

변수 a가 선언되고 변수에 참조 유형 값({name:'cc'})이 할당되면 이 값에 대한 참조 개수는 1개입니다. a({name:'cc'}) 및 다른 변수 b에 할당하면 해당 값에 대한 참조 수가 1씩 증가합니다. 반대로 a에 {name:'xx'} 값이 할당되면 {name:'cc'} 값에 대한 참조 수가 1개 감소합니다. {name:'cc'} 값에 대한 참조 횟수가 0이 되면 더 이상 {name:'cc'} 값에 접근할 수 있는 방법이 없으므로 해당 값이 차지하는 메모리 공간을 재활용할 수 있다는 의미입니다. 이런 방식으로 가비지 컬렉터가 작동하면 {name:'cc'} 값이 차지하는 메모리 공간이 재활용됩니다.

이 방법은 Netscape Navigator 3.0에서 사용되었지만 순환 참조라는 심각한 문제가 있습니다.

function circleReferenceProbem(){
  let objectA = new Object()
  let objectB = new Object()

  objectA.someOtherObject = objectB
  objectB.anotherObject = objectA
}

이 함수를 실행한 후에는 이 두 참조 값의 참조 수가 절대 0이 되지 않으므로 가비지 수집기는 이들이 차지하는 메모리 공간을 결코 회수하지 않습니다.

js 가비지 수집기의 성능


js 가비지 수집기는 매 주기마다 가비지 수집을 수행하기 때문입니다.

변수에 할당된 메모리 양이 크지 않으면 가비지 컬렉터의 재활용 작업량이 크지 않습니다. 그러나 가비지 컬렉터의 작업 부하가 너무 크면 지연이 발생할 가능성이 높습니다.

js에서 메모리 관리에 대한 권장 사항


  • 전역 변수를 최대한 적게 사용하세요

  • 변수 참조를 최대한 수동으로 삭제하세요

읽어주셔서 감사합니다!

위챗으로 소통이 필요하시면 메시지를 남겨주세요!

추천 튜토리얼: "JS Tutorial"

위 내용은 몇 초 만에 js의 가비지 수집 메커니즘 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제