Reference counting
Mark and Sweep
https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management
https://ko.wikipedia.org/wiki/쓰레기_수집_(컴퓨터_과학)
https://yaboong.github.io/java/2018/06/09/java-garbage-collection/
힙 영역의 메모리에 사용하지 않는 변수가 있다면 자동으로 free해줌
자바, 자바스크립트, C# 등과 같은 고급언어에선 지원해줌, C, C++은 프로그래머가 직접함
자바는 JVM위에서 자바프로그램이 돌아가는데 그 안에서만 메모리변수를 할당할 수 있다.
자바 자체가 메모리관리를 해야하는데 new
로 메모리할당하나 free
는 없다.
GC는 힙영역에서 접근할 수 없는 변수가 생기면 GC가 확인을 해서 free
를 시킨다.
포인터 등과 같이 지역변수를 통해 힙영역에 접근할 수 있다. → 참조할 수 있는데 이렇게 힙영역에 참조할 수 있는 수단이 없는지 확인함
레퍼런스 카운트라고 하며 이게 하나도 없다면 free
를 한다. 그러나 매번 이를 확인하기에 느리다, 확인하는 동안에 프로그램이 멈춘다 stop the world, 멈춰 !
를 줄이기 위해 mark and sweep
기법을 도입했다.
많은 GC가 사용하고있고, 변수를 생성하면 접근할 수 있는지를 체크한다.
minor
, major
생성된지 오래될수록 major
로 올라간다. 많이쓰고 오래있는 건 계속 사용하기에 free
판단 횟수를 적게함. ⇒ 멈춰 !
현상을 줄일 수 있다. → JS, Java
다 해주는데 메모리 신경안써도 되겠네? → NOPE
서로 참조하고 있는 상황이면 ? → 계속 free
되지 않음 → mark and sweep
에선 해당 문제가 발생하지 않음