嘿,我正在使用以下代码测试Runtime.freeMemory():

 Runtime runtime = Runtime.getRuntime();
 long freeMemory = runtime.freeMemory();

 // This is some arbitary factor that should work <= 1
 double factor = 0.8;

 int size = (int) (factor * freeMemory);
 byte[] testArray = new byte[size];

我正在创建一个接近freeMemory值的字节数组。由于某种原因,尤其是当我将程序的内存限制为8MB左右时,代码会在任何大于0.55的因素时抛出OutOfMemory异常。这确实没有任何意义,当然freeMemory意味着freeMemory,我希望它有点小,但是不会比实际的空闲内存多一倍。

有什么建议吗?
谢谢

(请注意,在我的测试中,我使用-Xmx8M等将程序的可用内存限制为8MB或16MB。)

最佳答案

实际上,您的空闲内存分为两代:http://java.sun.com/docs/hotspot/gc1.4.2/一个是“年轻”一代,一个是“终身”一代。
如果使用-verbose:gc -XX:+ PrintGCDetails VM设置运行,则可以看到每一代需要花费多少。我发现我可以完全填补我的终身职位,但不能超过此。

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

10-10 04:51