以下に記述したコードがどのように機能し、出力されるかを理解しようとしています。
public static void getRunTimeMemoryConsumption(){
List<Integer> array = new ArrayList<Integer>();
for(int i = 0 ; i < 100000 ; i++){
array.add(i);
}
List<Integer> array1 = new ArrayList<Integer>();
for(int i = 0 ; i < 100 ; i++){
array1.add(i);
}
Runtime rt = Runtime.getRuntime();
//Run the GC
rt.gc();
long memoryFreed = rt.totalMemory() - rt.freeMemory();
System.out.println("Memory freed in Mbytes :: " + memoryFreed/(1024));
}
このコードを実行すると、常に出力として132 KBが返されます(9/10実行)。ただし、rt.gc()
呼び出しを削除すると、出力ステートメントに書き込まれるメモリが解放されます(> 100 MB)。Javaランタイムのこの動作をどのように理解できますか?