Skip to content

자바가상머신(Java Virtual Machine, JVM) Garbage Collection #
Find similar titles

Garbage Collection이란? #

Garage란 응용프로그램에서 더 이상 사용되지 않는 메모리를 말한다. 객체나 배열을 가리키는 레퍼런스가 하나도 없음을 의미한다. 이러한 Garage 영역을 자동적으로 해제하여 메모리 공간을 확보하는 기능을 Garbage Collection이라고 말한다. 한글 명칭인 가비지 컬렉션을 혼용한다.

 class Insilicogen {
    private String memberNm;
    public MemberList(String memberNm) {
        this.memberNm = memberNm
    }
 }

 public class IncoPlay {
    public static void main(String[] args) {
        Insilicogen inco1 = new Insilicogen("JO");
        Insilicogen inco2 = new Insilicogen("CHOI");
        /* inco1 레퍼런스가 처음에 가리키던 객체는 어떤 레퍼런스 변수도 참조하지                않는 가비지가 된다.  */
        inco1 = inco2;
    }
 }

왜 Garbage Collector가 필요한가? #

가비지 컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 일일이 체크하고 반환하는 일을 수동적으로 처리해야 할 것이다. 자동으로 메모리를 관리할 수 있다는 점은 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와준다.

Garbage Collection 수행과정 #

1) 참조되지 않은 객체들을 탐색 후 삭제한다. 2) 삭제된 객체의 메모리를 반환한다. 3) Heap 메모리를 재사용한다.

주의사항 #

하지만 가비지 컬렉션은 JVM이 내부적인 알고리즘의 판단에 의해서 수행되기 때문에 언제 가비지 컬렉션이 일어나는지 알기가 어렵다. 아니 알 수가 없다. 따라서 할당된 메모리가 해제되는 타이밍이나 점유 시간을 예측하는 것이 불가능하기 때문에 예측 불가능하게 프로그램이 정지할 수 있다는 단점을 가진다.

TIP #

특정 시점에 가비지 컬렉션을 요청하는 방법은 있다.

 System.gc(); 
 /* 또는 */
 Runtime.getRunTime().gc();

다만, 이것은 말 그대로 요청일 뿐, 위문장을 실행하자마자 가비지 컬렉터가 작동되는 것이 아니다. 단지 가비지 컬렉션이 필요하다고 JVM에 요청한 것에 불과하며 메모리 해제 여부 및 시점은 JVM이 판단한다.

참조 #

http://blog.naver.com/madplay?Redirect=Log&logNo=220875675406

Suggested Pages #

0.0.1_20210630_7_v33