我正在尝试查看Runtime.freeMemory()的使用情况。
文档称它“返回Java虚拟机中可用的空闲内存量”。
我执行了一个简单的程序来测试这个功能。程序如下:
public class Test {
public static void main(String a[]) throws Exception {
System.out.println("Total memory: " +Runtime.getRuntime().totalMemory());
System.out.println("Free memory: " +Runtime.getRuntime().freeMemory());
Integer intArr[]= new Integer[10000];
for(int i =0; i<10000;i++){
intArr[i] = new Integer(i+500);
}
System.out.println("Free memory: " +Runtime.getRuntime().freeMemory());
System.out.println("sample print :"+ intArr[0]);
System.out.println("sample print :"+ intArr[5000]);
System.out.println("sample print :"+ intArr[9999]);
}
}
输出:
总内存:67108864
可用内存:61822408 < 在分配10000个对象之前 >
可用内存:61822408 < 即使在分配10000个对象之后,大小仍然保持不变。为什么?>
示例打印:500
示例打印:5500
示例打印:10499
由于对象是在堆上创建的,第二次打印的“可用内存”值应该比第一次输出少,对吗?
但它打印相同的值。有人能解释一下为什么会打印相同的值吗?