Garbage Collection(가비지 컬렉션)

Ga0·2023년 4월 28일
0

java

목록 보기
3/6

Garbage Collection(가비지 컬렉션)

  • 더이상 참조 되지 않는 Garbage(가비지)라고 불리는 불필요한 메모리를 알아서 정리해주는 역할을 한다.

  • 가비지 컬렉터가 주기적으로 메모리 누수를 방지하기 위해 메모리를 청소하는 과정을 Garbage Collection(=GC)라고 한다.

  • 힙 영역에서 참조되지 않은 데이터를 삭제하는 역할을 해서, 개발자가 직접 참조하지 않는 데이터를 삭제하지 않아도 된다. (개발자의 불편을 많이 덜어줌)

  • 하지만, 개발자는 메모리가 언제 해제되는지 정확하게 알 수 없고, 가비지 컬렉션(GC)이 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생한다.
    -> GC가 동작하는 동안 다른 동작을 멈추는 것을 Stop-the-world라고 하며, 어떤 GC알고리즘이든 stop-the-world가 발생한다. (GC를 실행하는 스레드를 제외하고 나머지 스레드들의 모든 작업을 멈춘다. GC 작업이 완료되면 다시 중단된 작업들을 수행한다.)

가비지 컬렉션의 대상

  • 객체(new연산자를 사용하는)들은 실질적으로 Heap 영역에서 생성되고 Method Area이나 Stack Area등 Root Area에 생성된 객체의 주소만을 참조하는 형식으로 구성된다.

  • Heap Area 객체들을 참조하던 Method Area의 객체나 Stack Area의 객체가 메소드가 끝나느 등의 특정 이벤트들로 인해 Heap Area 객체의 메모리 주소를 참조하고 있는 참조 변수가 삭제되는 현상이 발생하면, 이 객체를 Unreachable이라고 하며 주기적으로 가비지 컬렉터가 제거해준다.

    • Reachable : 객체가 참조되고 있는 상태
    • Unreachable : 객체가 참조되고 있지 않는 상태

힙 영역(Heap Area)

  • GC를 이해하기 위해서는 힙 영역(Heap Area)을 이해해야 한다.

  • Heap Area는 new 키워드로 생성된 객체와 배열이 생성되는 영역이다.

  • 주기적은 GC가 제거하는 영역이다.

  • Heap Area는 효율적인 GC를 위해 위의 사진과 같이 3가지의 여역으로 나눈다.

  • Young Generation 영역은 자바 객체가 생성되자마자 저장되고, 생긴지 얼마 안되는 객체가 저장되는 공간이다.

  • Heap 영역에 객체가 생성되면 최초로 Eden 영역에 할당된다.

  • Eden영역에 데이터가 어느정도 쌓이게 되면 참조정도에따라 Servivor의 빈 공간으로 이동되거나 회수된다.

  • Young Generation(Eden+Servivor) 영역이 차게 되면 또 참조정도에따라 Old 영역으로 이동이 되거나 회수가 된다.

  • Young Generation과 Tenured Generaction에서의 GC를 Minor GC라고 한다.

  • Old 영역에 할당된 메모리가 허용치를 넘기게 되면 Old 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 GC가 실행된다.

  • 이때, Stop-the-world이 발생하며, Old 영역의 메모리를 회수하는 GC를 Major GC라고 한다.


참고사이트
https://coding-factory.tistory.com/829

0개의 댓글