JavaScript의 쓰레기 수거 메커니즘과 메모리 관리

만약 우리가 성능을 최적화하고 싶다면, 우선 자바스크립트의 쓰레기 회수 메커니즘을 알아야 한다. 이렇게 하면 사용되지 않은 많은 변수를 메모리에서 제거하고 더 많은 메모리 공간을 비워 다른 변수에 메모리 공간을 분배할 수 있다.
JavaScript의 쓰레기 수거 메커니즘

인용문


이 글은 자바스크립트의 쓰레기 회수 메커니즘을 설명할 것이다.이 동시에 우리는 먼저 작용역 체인의 개념을 갖추어야 한다. 모르는 파트너는 먼저 5분 동안 이 글을 보고 작용역 체인에 대한 지식을 간단하게 이해할 수 있다0부터 JavaScript에서 도메인 체인의 개념 및 용도 설명

본문


1. 쓰레기 회수 메커니즘


자바스크립트에서는 자동 쓰레기 회수 메커니즘이 있다. 즉, 실행 환경은 코드 실행 과정에서의 메모리 사용 상황을 자동으로 관리하고 쓸모없는 변수를 자동으로 제거하여 메모리를 방출한다.이 메커니즘은 일정 시간마다 한 번씩 실행된다.
예를 들어 아래 코드는 함수 change가 실행할 때 국부 변수 my_를 설명합니다color, 그리고 함수가 실행된 후에 이 국부 변수도 작용하지 않기 때문에 쓰레기 회수 메커니즘은 이 쓸모없는 국부 변수 my_컬러가 지워져요.

let color = 'red'

function change() {
	let my_color = 'blue'
	color = 'green'
}

change()
JavaScript에서 이러한 쓰레기 수거 기능을 실현할 수 있는 방법은 모두 두 가지가 있는데 그것이 바로 태그 제거, 인용 계수입니다.

(1) 태그 지우기


태그 지우기는 JavaScript에서 가장 자주 사용하는 쓰레기 수거 방식입니다.그것의 실현 방식은 이렇다. 코드가 한 환경에서 실행될 때 변수를 성명할 때마다 이 변수에 대해 표시를 한다. 예를 들어 실행 환경에 들어가는 것을 표시한다.코드가 다른 환경에 실행될 때, 즉 이전 환경을 떠나야 한다는 것이다. 이때 이전 환경의 변수에 표시를 한다. 예를 들어 실행 환경을 떠나고 쓰레기 수거가 실행될 때 표시에 따라 어떤 변수를 제거할지 결정한다.

(2) 참조 개수


인용 계수는 그다지 자주 사용하지 않는 쓰레기 회수 방식의 하나다.말 그대로 값이 인용 유형 데이터의 변수에 대해 계수를 하는 것이다. 그러면 우리는 먼저 아래의 이 예를 보고 이 방식의 실현 방식을 이해하자

let color = [1, 2, 3]

function change() {
	let new_color = [4, 5, 6]
	color = new_color
}

change()

console.log(color) //  [4, 5, 6]
이 예에서 함수 change 내부에 변수 new_color, 인용 형식 값을 부여하고 변수 new_color가 전역 변수 color에 값을 부여했습니다. 그러면 이 부분 변수 new_color는 쓰레기 회수로 간주되지 않습니다. 왜냐하면 이 변수 new_color는 쓸모없는 국부 변수가 아닙니다. 전역 변수 color에 인용되었습니다.
그럼 왜 변수 new_컬러는 쓰레기 수거로 취급되지 않을까요?사실 인용 계수의 쓰레기 회수 방식은 이렇다. 하나의 변수를 성명할 때 이 변수에 0의 인용 횟수를 설정하고 이 변수가 다른 변수에 인용되면 인용 횟수를 +1로 하고 원래의 인용을 취소하면 인용 횟수를 -1로 한다. 쓰레기 회수 메커니즘은 한 변수의 인용 횟수가 0인지 아닌지를 판단하는 것이다. 0이면 무용 변수로 간주하여 회수한다. 0이 아니라면,이 변수에 대해 어떠한 처리도 하지 않는다.

2. 메모리 관리


때때로 우리는 메모리의 분배와 제거를 수동으로 관리해야 한다. 더 큰 메모리 공간이 있다면 더 많은 변수에 메모리를 분배할 수 있기 때문에 코드 운행의 효율을 높이고 라인에서 실행할 수 있는 코드 문장의 수량을 증가시킬 수 있다는 것을 잘 이해할 수 있다.
따라서 우리는 더 적은 메모리를 사용해서 페이지가 더 좋은 성능을 얻을 수 있도록 확보해야 한다. 필요한 데이터만 변수에 저장할 수 있다. 데이터가 더 이상 사용되지 않으면 변수에 값을 부여해서 데이터의 인용을 방출할 수 있다. 이런 방법을 인용 해제라고 한다.이런 방법은 대부분 전역 변수에 쓰인다. 왜냐하면 국부 변수는 일반적으로 환경을 떠난 후에 자동으로 제거되기 때문이다.
우리는 위의 이 예를 바꾸어 변수new_color가 인용된 후 무용 변수로 제거합니다

let color = [1, 2, 3]

function change() {
	let new_color = [4, 5, 6]
	color = new_color
}

change()

console.log(color) //  [4, 5, 6]

color = null
이 예에서 함수 change 내부 성명 변수 new_color는 전역 변수 color에 인용되기 때문에 이때 변수 new_color의 인용 횟수는 1입니다. 변수를 new_color가 제거되었습니다. 그래서 코드의 마지막 줄에null을 전역 변수 color에 부여하고 변수 color 대 변수 new_를 수동으로 해제합니다.color 참조, 변수 new_color의 인용 횟수-1, 그래서 현재 인용 횟수는 0입니다.쓰레기 회수 메커니즘이 실행되었을 때 인용 횟수가 0인 것을 발견하고 이 변수를 무용 변수로 삼아 제거하고 메모리를 방출했다.

끝말


js의 쓰레기 회수 메커니즘을 이해해야만 우리는 코드를 수정하여 성능을 최적화할 수 있다.자, 자바스크립트의 쓰레기 수거 메커니즘에 대한 설명은 여기까지입니다. 여러분에게 도움이 되었으면 합니다.
저는 전단지 Lpyexplore입니다. 오리지널은 쉽지 않습니다. 제 글을 좋아해서 팔로우하고 좋아요를 눌러주세요. 귀찮지 않은 댓글로 응원해 주세요. 감사합니다.
자바스크립트의 쓰레기 수거 메커니즘과 메모리 관리에 관한 이 글은 여기까지 소개되었습니다. 자바스크립트의 쓰레기 수거 메커니즘에 관한 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 찾아보세요. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기