我想了解我的下面的書面代碼如何工作和輸出。瞭解JVM GC
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));
}
當我運行這個代碼時,它總是給我132KB作爲輸出(9/10運行)。 但是,如果我刪除rt.gc()調用,則會在輸出語句中釋放更多釋放的內存(> 100 MB)。請幫我理解java Runtime的這種行爲。
在此先感謝。
只是爲了記錄,由於ArrayLists的大小調整,可以收集垃圾的是丟棄的數組,因爲它們沒有按預期的大小進行預分配。 – 2013-02-20 22:55:25
哦,是的,你是對的。沒想到那個... – pushy 2013-02-21 08:39:46