문득 가비지 컬렉션의 동작 원리가 궁금해져서 구글링을 해보았는데 좋은 글이있어서 글을 써본다.
가비지컬렉션이란 자바뿐만 아니라 파이썬,js등 많은 언어에 내장되어있는 동적 메모리중 필요없어진 메모리 객체들을 제거하는 프로세스이다.
C,C++은 GC가없어서 개발자가 수동으로 메모리를 할당하고 해제해야하는 번거로움이있다.
가비지 컬렉션의 예를들어보자
for (int i = 0; i < 100; i++) {
NewObject obj = new NewObject();
obj.doSomething();
}
이 for문은 반복문이 끝나면 newObject의 동적 메모리는 쓸 일이 없어진다. 이런 객체생성 메모리가 계속 점유한다면 overHead가 높아질 것이다. 하지만 Java에서는 이런 쓰레기객체들을 제거해주는
가비지 컬렉션이라는 좋은 프로세스가있다.
가비지 컬렉션의 대상에는 무엇이있을까?
가비지 컬렉션은 객체가 참조되어 있지 않은 상태라면
GC의 대상이된다.
JVM에서 객체들은 Heap영역에서 생성이되고
stack,메서드 영역들은 heap영역에서 생성된 객체들의 주소를 참조 하는 형식으로 생성이된다.
동적영역에서 생성된 객체들은 메서드가 끝나면 객체들을 제거해준다.