我试图查看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
可用内存:61822408
样本打印:500
样本打印:5500
样本打印:10499
由于对象是在堆上创建的,因此第二次打印的“可用内存”值应小于第一次输出,对吗?
但是它显示相同的值。谁能解释为什么它打印相同的值?
最佳答案
我知道这不是您想要的答案-但根据JavaDoc-freeMemory
返回:
总量的近似
当前可用于的内存
future 分配的对象,以
个字节。
只是为了测试-我拿了你的代码并运行了两次。一次将数组大小设置为10,000-一次将数组大小设置为100。
我还在之后添加了另一张印刷品:
Integer intArr[]= new Integer[10000];
使用
10,000
运行时-得到了预期的结果,数组实例化后,空闲内存中的40,0016 bytes
减少了。使用
100
运行时,在数组实例化之前和之后,我得到的空闲内存量完全相同-不是所需的效果。正如大多数答案所述(因为它是本机方法),它依赖于JVM,因此在任何平台上的行为都可能不同。
我正在使用
Windows 7
在Eclipse built-in JVM (v3.6)
上运行。但是我认为这里的关键词是-近似。