
프로그램에서 더 이상 사용하지 않는 메모리 를 자동으로 정리합니다.
메모리 공간을 꽉 채우면, 메모리 누수 로 인해 문제 (속도 저하, 예기치 못한 종료, 느린 응답속도 etc) 가 발생합니다.
프로그래머라면 방지하고 버그가 있을 시, 잡아야 합니다.
" 가비지 콜렉션 은 대신 해줍니다. "
managed language < - > unmanaged language
How?
1. 트레이싱 (mark and sweep)
객체에 flag 를 표시하고, 사이클마다 메모리 관리자가 객체를 추적해 사용 여부를 확인해 mark (표시)를 합니다.
이후 표시되지 않은 객체는 sweep (삭제) 해 메모리를 해체합니다.
2. 래퍼런스 카운팅 방법
객체를 참조하는 변수의 수를 추적하는 방법입니다.
변수의 래퍼런스가 복사되면 카운트 가 늘어나고, 변수 값의 변경이나 변수 스코프를 벗어났을 때 카운트 가 줄어듭니다.
래퍼런스 카운트가 0이면, 메모리를 비웁니다.
왜 메모리 누수가 일어나는가 ?
순환참조 하지 마세요.
변수들이 서로 참조할 시 래퍼런스 카운팅이 되지 못해 메모리를 비울 수 없습니다.
ex) 지양합니다. const any = {}; const some = {}; any.other = some; some.other = any;