我需要找出何时真正接近OutOfMemoryError
,以便将结果刷新到文件并调用runtime.gc();
。我的代码是这样的:
Runtime runtime = Runtime.getRuntime();
...
if ((1.0 * runtime.totalMemory() / runtime.maxMemory()) > 0.9) {
... flush results to file ...
runtime.gc();
}
有一个更好的方法吗?有人可以帮我吗?
编辑
我知道我是在玩火,所以我想出一种更坚实,更简单的方法来确定何时吃饱了。我目前正在使用Jena模型,因此我进行了一个简单的检查:如果该模型具有超过550k语句,则将刷新,因此不会产生任何风险。
最佳答案
首先:如果要确定您是否接近OutOfMemoryError
,那么您要做的就是将当前内存与JVM
使用的最大内存进行比较,以及您已经做过的事情。
第二个:您想将结果刷新到文件中,想知道为什么只想靠近OutOfMemoryError
就可以这样做,您可以简单地使用带有缓冲区的FileWriter
之类的东西,因此,如果缓冲区被填充,它将刷新结果自动。
第三个:永远不要显式调用GC
,这是一种不好的做法,而是优化JVM
内存参数:
-Xmx -> this param to set the max memory that the JVM can allocate
-Xms -> the init memory that JVM will allocate on the start up
-XX:MaxPermSize= -> this for the max Permanent Generation memory
还
-XX:MaxNewSize= -> this need to be 40% from your Xmx value
-XX:NewSize= -> this need to be 40% from your Xmx value
这些将加快GC的速度。
和
-XX:+UseConcMarkSweepGC
启用对旧空间使用CMS
。关于java - 当我接近OutOfMemoryError时如何确定Java?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22170635/