가비지컬렉터
가비지 컬렉터를 명시적으로 실행
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메서드를 사용한다면 명시적으로 호출하는것도 가능하다