들어가며

여러분이 JAVA를 처음 배울 때부터 가장 많이 들었던 단어 중에 하나가 Garbage Collection(GC)일 것이다.
너무 익숙한 나머지 중요성을 잊고 갈 수 있는 GC.
이번 포스팅에서는 GC에 대해서 자세하게 정리하려고 한다.



Garbage Collection이란

Garbage Collection이란 Heap 메모리에서 사용하지 않는 객체를 삭제하는 프로세스

C언어를 알고 있는 분이라면 malloc(), free() 함수에 대해서도 익숙할 것이다. 각각 메모리 할당과 메모리 초기화를 위한 함수들이다.

JAVA의 경우 C와 같이 메모리 관리를 개발자가 하지 않는다. 내부의 GC가 Heap 메모리 상의 사용하는 객체를 확인하여 메모리 지속적으로 비워준다.

'따로 메모리 관리를 하지 않아도 된다고? 편하겠네.' 라고 생각할 수도 있다. 하지만 다른 의미로는 개발자는 스스로 작성한 프로그램에서 언제 GC가 발생할 지 알 수 없기 때문에 주의해야 한다.
왜 주의가 필요한지는 아래에서 설명하겠다.



Stop-To-World

GC에 대해서 자세하게 알기 위해서는 Stop to world(STW)라고 부르는 작업을 알아야한다.
기본적으로 JAVA는 멀티 스레드 기반으로 실행된다. 하지만 GC가 실행되는 경우에는 모든 어플리케이션의 프로세스를 멈추고 GC 스레드만 실행이 된다. 이를 Stop-to-world(STW)라고 부른다.

STW가 웹 서버에서 중요한 이유가 이 때문이다. GC가 빈번하게 일어나는 경우 서비스하고 있는 웹 서버의 동작이 계속 멈추게 되고, 시스템 장애로 발전할 수 있다.
JAVA 개발자라면 시스템의 성능과 안정성을 위하여 GC의 발생이 적게 일어나도록, 짧은 시간동안 발생하도록 시스템을 설계하고 개발해야한다.

다음 포스팅에서는 GC가 일어나는 Heap영역에 대한 소개와 GC의 단계에 대해서 소개하겠다.

0개의 댓글