본문으로 건너뛰기

가비지컬렉터

가비지 컬렉터를 명시적으로 실행

public class GarbageCollector {

static Runtime runtime;
public static void main(String[] args) {

GarbageCollector.runtime = Runtime.getRuntime();

System.out.println("초기상태");
GarbageCollector.print();

// Heap 를 사용
List<String> list = new ArrayList<>();

for (int i = 0; i < 5000; i++) {
list.add(new String("ABCDE"));
}
System.out.println("리스트 작성 직후");
GarbageCollector.print();

// 인스턴스 참조를 없앤다
list = null;

// 가비지 컬렉터를 실행
System.gc();

System.out.println("가비지 컬렉터 직후");
GarbageCollector.print();
}

static void print() {
System.out.println("------------------------------------------");
System.out.println("Free : " + GarbageCollector.runtime.freeMemory());
System.out.println("Total : " + GarbageCollector.runtime.totalMemory());
System.out.println("Max : " + GarbageCollector.runtime.maxMemory());

System.out.println();
}
}
초기상태
------------------------------------------
Free : 395974864
Total : 402653184
Max : 6249512960

리스트 작성 직후
------------------------------------------
Free : 395974864
Total : 402653184
Max : 6249512960

가비지 컬렉터 직후
------------------------------------------
Free : 37018624
Total : 41943040
Max : 6249512960

예제가 좀 이상한건.. 아닌데 원래는 가비지 컬렉터 직후 늘어나야 되는데.. ㅋㅋ
근데 확실한건. for 문을 더 늘리고 초기상태에~직후 를 비교하면 메모리는 쓰기는 쓴다

힙 영역에 있는 인스턴스중에서, 어디에서도 참조되지 않고있는 애들을 찾아서 메모리 해제 해주는 일을 담당하는것이 가비지 컬렉터 이다.
가비지 컬렉터는 JavaVM이 자동으로 해주는데, System.gc메서드를 사용한다면 명시적으로 호출하는것도 가능하다