我试图查看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 7Eclipse built-in JVM (v3.6)上运行。

但是我认为这里的关键词是-近似

07-24 12:50