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/

What is GC

힙 영역의 메모리에 사용하지 않는 변수가 있다면 자동으로 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 에선 해당 문제가 발생하지 않음