我试图了解我下面编写的代码是如何工作和输出的。
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 运行时的这种行为?