嘿,我正在使用以下代码测试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/