【发布时间】:2011-07-30 04:15:35
【问题描述】:
我试图查看 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
由于对象是在堆上创建的,所以第二次打印的 'Free memory' 值应该小于第一次输出,对吧?
但它打印相同的值。谁能解释为什么它打印相同的值?
【问题讨论】:
-
您必须尝试比 10000 个整数对象大很多的东西才能看到差异。
-
@CoolBeans - 依赖于平台和 JVM。在我的机器(Linux + Sun JVM 1.6_22)上运行上述代码显示可用内存下降。
-
@Brian Roach - 这是有道理的。谢谢!
-
您使用的是什么操作系统,以及 Java 的哪个版本?您的代码在我的机器上按预期运行。
-
@Brain - 操作系统:Windows XP,JDK -1.6.0_05。感谢您的回复!
标签: java