我需要找出何时真正接近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/

10-09 05:07