JVM - Garbage Collector

최대 1 분 소요

JVM - Garbage Collector

  • C나 C++에서는 직접 free를 통해 메모리를 직접 해제해야 하지만, JVM에서는 Garbage Collector가 직접 알아서 메모리를 해제해줍니다. Java에서는 JVM의 heap memory에 new에 의해 생성되는 Object를 올려서 관리합니다. 그런데, 메모리를 효율적으로 사용하기 위해서, 더이상 Object가 필요없다는 판단이 들면 알아서 처리해주죠. 따라서, Java 개발자는 보통은 직접 GC를 관리할 필요가 없기는 한데, 더 잘 쓰기 위해서는 GC가 어떻게 메모리를 제거하는지, 언 정도 알고 있는 것이 좋습니다.
  • 직접 GC를 호출하는 방법은 다음과 같은 두 가지가 있습니다.
System.gc()
Runtim.getRuntime().gc()

Simpla Garbage Collector

  • System.gc()를 통해 쓰지 않는 객체들을 모두 삭제하는 간단한 코드를 만들었습니다.
import java.lang.Integer;

class Main {
    public static void main(String[] args) throws Exception {
        Runtime thisRuntime = Runtime.getRuntime();

        System.out.printf("Runtime Used Memory: %d\n", thisRuntime.totalMemory() - thisRuntime.freeMemory());
        for (int i = 0; i < 1_000; i++) {
            // 무의미하게 객체를 마구 생성해둡니다. 
            // 사실 Integer Constructor를 통해 Object를 만들었고, 얘는 Heap에 올라가게 되죠.
            // 그러나, 사실 쓸모없는 아이이기 때문에 gc를 call하게 되면 모두 deallocation됩니다.
            new Integer(i);
        }
        System.out.printf("Runtime Used Memory: %d\n", thisRuntime.totalMemory() - thisRuntime.freeMemory());
        System.gc();
        System.out.printf("Runtime Used Memory: %d\n", thisRuntime.totalMemory() - thisRuntime.freeMemory());
    }

}

댓글남기기