gpt4 book ai didi

Java - 运行时.freeMemory()

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:33 24 4
gpt4 key购买 nike

我试图查看 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

由于对象是在堆上创建的,所以第二次打印的“可用内存”值应该小于第一次输出,对吗?

但它打印出相同的值。任何人都可以解释为什么它打印相同的值吗?

最佳答案

我知道这不是您想要的答案 - 但根据 JavaDoc - freeMemory 返回:

an approximation to the total amount of memory currently available for future allocated objects, measured in bytes.

只是为了测试它 - 我拿了你的代码并运行了两次。一次将数组大小设置为 10,000 - 一次设置为 100。我还在之后添加了另一个打印:

Integer intArr[]= new Integer[10000];

当以 10,000 运行时 - 我得到了预期的结果,在数组实例化之后可用内存减少了 40,0016 字节

当以 100 运行时,我在数组实例化前后获得了完全相同数量的可用内存 - 不是所需的效果。

正如大多数答案已经指出的那样——因为它是一种 native 方法——依赖于 JVM,因此可以在任何平台上以不同的方式运行。我在 Windows 7 上运行 Eclipse 内置 JVM (v3.6)

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

关于Java - 运行时.freeMemory(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5555868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com