본문 바로가기
IT_Developers/JAVA

JAVA - 가비지컬렉션(garbage collection)이란? / Stop The World / 예제

by 고코더 2020. 3. 12.

자바 메모리의 쓰레기 수거?


안녕하세요.
고코더 입니다.


자바의 중요한 특징 중 하나인 가비지컬렉션을 알아봅니다. 직역하면 "쓰레기 수거"라고 번역되는데요. 말 그대로 메모리 상에 있는 쓰레기를 수거 하는 방법 입니다. 불필요하게 저장된 메모리 영역을 해체하는 기능을 합니다. 1959년 존 매카시가 개발하였습니다. 이런 특성 덕분에 자바는 알아서 메모리를 정리하기 때문에 개발이 수월한 면이 있습니다.



직접 메모리를 관리하는 C, C++




C, C++ 에서는 메모리를 명시적으로 직접 해체해야 합니다. 그래서 메모리 관리를 하지 못하면 memory leak이 발생합니다. 직접적인 메모리 영역을 다루기 때문에 더 좋은 성능으로 프로그램을 작성 할 수 있습니다.


가비지 컬렉션(GC) 예제


자바는 OS 의 메모리 영역에 직접적으로 접근하지 않습니다. JVM 자바 가상머신에 간접적으로 접근합니다. JVM의 메모리는 크게 클래스 영역, 자바 스택, 힙, 네이티브 메소드 스택의 4개 영역으로 나뉩니다. GC는 여기서 힙메모리를 다룹니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class HelloWorld{
 
     public static void main(String []args){
         
        String[] array = new String[2];
 
        array[0= "GO";
        array[1= "Coder";
 
        array = new String[] {"G""C" };
         
        System.out.println(array[0]);
     }
}
cs

해당 예제 소스에서 기존 array[0],array[1]에 담은 변수 값이 더 이상 사용 용도가 없어져 자동으로 가비지 컬렉션에 의해 정리 됩니다. 


Stop The World


GC 실행을 위해 JVM이 애플리케이션 실행을 멈주는 걸 Stop the world라고 합니다. GC를 실행하는 쓰레드를 제외한 쓰레드들의 작업을 멈춥니다. Stop The World를 최적화 하는 과정을 가비지콜렉션을 튜닝한다고 표현합니다. 


마무리


GC는 알고보면 굉장히 복잡합니다.


댓글