티스토리 뷰

가비지 컬렉션(Garbage Collection)이란?

가비지 컬렉션은 자바의 메모리 관리 기법이다. 힙 메모리에서 동적으로 할당되어 사용 중인 객체와 사용하지 않는 객체를 식별하고 사용하지 않는 개체를 삭제하는 작업을 담당하고 있다. C와 같은 프로그래밍 언어는 메모리 할당 및 할당 해제를 수동으로 하지만 Java에서는 이 가비지 컬렉션이 자동으로 처리된다.

사용 중인 객체와 사용하지 않는 객체를 어떻게 판단할까?

객체로 선언된 변수의 경우 힙 메모리에 할당된 객체의 주소를 가리키는 포인터의 역할이다. 그래서 객체 변수의 역할을 모두 끝내고 사라지더라도 힙 메모리에 할당된 객체들은 그대로 남아있게 된다. 객체의 주솟값을 가지고 있는 변수가 없으면 가비지 컬렉션은 접근할 수 없는 객체(Garbage)라고 판단한다.

가비지 컬렉션 동작 방식

Stop The World

가비지 컬렉션을 수행하기 위해 JVM이 애플리케이션의 실행을 일시 정지하는 것을 말한다. 가비지 컬렉션이 실행되면 GC 작업을 맡은 스레드를 제외한 나머지 스레드는 모두 멈추게 되고 GC 작업이 종료되면 재개된다.

Mark and Sweep

애플리케이션이 일시 중지되면 GC는 참조되고 있는 객체와 연결된 객체를 타고 이동하며 접근 가능한 객체를 식별(Mark)하는데 이 과정을 Mark라고 한다. 모든 객체 탐색이 끝나면 식별(Mark)되지 않은 객체들을 메모리에서 해제시키는데 이것을 Sweep이라 한다.

힙 메모리구조 그리고 Minor GC, Major GC

힙 메모리는 위와 같이 영역이 구분되어있다.

  • Young Generation: 새로운 객체가 생성되면 Eden 영역에 위치하게 된다. Eden 영역을 다 사용하면 GC가 발생하면 살아남은 객체는 Survivor 영역으로 이동하게 되고 객체에 Age를 설정한다. 이 과정을 반복하면서 계속 살아남아 일정 Age가 된 객체는 Old Generation으로 이동하게 된다. 이 Young Generation에서 객체가 사라질 때 Minor GC라고 한다.
  • Old Generation: Young Generation에서 살아남은 객체가 여기로 이동된다. 대부분 Young Generation보다 크게 메모리가 할당되며 크기가 큰 만큼 GC가 적게 발생한다. 그리고 이 영역에서 객체가 사라질 때 Major GC라고 말한다.

GC의 장단점

  • GC의 가장 큰 장점은 개발자가 동적으로 할당된 메모리 전체를 관리할 필요가 없어진다.
    이로 인해 유효하지 않은 포인터에 접근하거나 이미 한번 해제한 메모리를 두 번 해제하는 등 버그나 불필요한 작업을 해소할 수 있다.
  • 반면 단점으로는 가비지 컬렉션이 수행되는 정확한 시점을 알 수가 없다. 가비지 컬렉션이 실행될 때는 반드시 애플리케이션을 중지시키는 Stop The World가 수행되고 이는 오버헤드를 일으킨다. 오버헤드는 성능 저하의 원인이 될 수 있다. 그리고 프로그램이 예측 불가능하게 일시 정지 될 수 있기 때문에 실시간 시스템에 적합하지 않다.

'프로그래밍 > Java' 카테고리의 다른 글

[JAVA] 접근 제어자(Access modifier)  (0) 2021.06.25
[JAVA] 객체지향 이란?  (0) 2021.06.22
[JAVA] JVM(Java Virtual Machine)이란?  (0) 2021.05.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함