메모리 - 가비지 컬렉션

ROCKBELL·2022년 11월 11일
0

CS 전공지식

목록 보기
5/18

가비지 컬렉션 (Garbage Collection)

엔진이 도달가능한 값이 아닌 값(객체)들을 삭제하는 등 자동으로 메모리 관리를 수행

가비지 컬렉터

자바스크립트 엔진내에서 끊임없이 동작하면서 모든 객체를 모니터링하고 도달할수 없는 개체는 삭제합니다

도달가능한 값

  • 현재 함수의 지역변수와 매개변수
  • 중첩 함수의 체인에서 사용되는 변수와 매개변수
  • 전역변수
let user = {
	name : 'ria'
}

// 참조 화살표가 사라지고 더이상 user에 접근 할 수 없기때문에
데이터가 삭제되고, 메모리에서도 삭제됩니다
user = null; 

도달할 수 없는 섬

참조되는 객체들간의 연결 구조에서 루투의 연결이 사라져 도달할 수 없는 상태가 되면
루트를 참조하는 객체 전체가 도달할 수 없는 섬의 상태가 됩니다

내부 알고리즘 (mark-and-sweep)

mark-and-sweep 은 가비지 컬렉션의 기본 알고리즘을 뜻 합니다

수행 단계

  • root 정복를 수집하고 이를 mark(기억) 합니다
  • 루트가 참조하고 있는 객체를 mark 합니다
  • mark된 객체를 참조 하는 객체도 mark 합니다
    (한번 mark 된 객체는 다시 방문하지 않습니다)
  • 위 과정을 반복합니다
  • 반복하는 과정에서 mark 되지 않는 객체는 삭제합니다

최적화 기법

  • 세대별 수집 : 새로운 객체와 오래된 객체로 분류하여 실행 (오래된 객체는 덜 감시)
  • 점진적 수집 : 컬렉션을 여러개로 분산하여 실행 (속도향상)
  • 유휴시간 수집 : CPU가 유휴 상태일때만 실행

메모리 누수

어떤 이유로 활성화된 상태인 루트 트리 안에 존재하는 메모리 조각

  • 우발적으로 생성된 전역변수
  • DOM 외부에서의 참조
  • 클로저의 잘못된 사용
profile
luv it

0개의 댓글