Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 명시적으로 GC(가비지 컬렉션)를 호출하는 방법

객체에 대한 참조가 더 이상 존재하지 않으면 해당 객체는 최종화(finalized)되며, 가비지 컬렉션(Garbage Collection)이 시작될 때 이렇게 최종화된 객체들이 수집됩니다. 이 과정은 JVM(Java Virtual Machine)에 의해 자동으로 수행됩니다.

개발자가 직접 가비지 컬렉션을 호출할 수도 있지만, 이는 GC가 즉시 실행된다는 것을 보장하지 않습니다. 호출은 단순히 JVM에 가비지 컬렉션 실행을 요청하는 것일 뿐입니다.

명시적으로 GC를 호출하는 두 가지 방법

  • System.gc() 메서드
  • Runtime.gc() 메서드

java.lang.Runtime.freeMemory() 메서드는 JVM에서 현재 사용 가능한 메모리의 양을 반환합니다. gc() 메서드를 호출하면 사용되지 않는 객체들이 정리되기 때문에 freeMemory()가 반환하는 값이 증가할 수 있습니다.

예제 코드

public class GarbageCollectionTest {
    public static void main(String args[]) {
        System.out.println(Runtime.getRuntime().freeMemory());
        for (int i=0; i<= 100000; i++) {
            Double d = new Double(300);
        }
        System.out.println(Runtime.getRuntime().freeMemory());
        System.gc();
        System.out.println(Runtime.getRuntime().freeMemory());
    }
}

위 예제에서는 먼저 초기 여유 메모리를 출력한 후, 반복문을 통해 다수의 Double 객체를 생성하여 메모리를 소비합니다. 이후 System.gc()를 호출하고 다시 여유 메모리를 출력함으로써, 가비지 컬렉션 실행 전후의 메모리 변화를 확인할 수 있습니다.

실행 결과

15648632
13273472
15970072

실행 결과를 보면 객체 생성 후 여유 메모리가 감소했다가, System.gc() 호출 이후 다시 회복된 것을 확인할 수 있습니다. 다만 실제 결과 값은 실행 환경과 JVM 설정에 따라 달라질 수 있습니다.