在我的 MPI 程序中发生 JVM 内存分配崩溃后,我试图了解内存管理是如何工作的。为了做到这一点,我添加了如下所示的行。
public static void main(String[] args) throws MPIException {
System.out.println("memory upon initialisation: " + (Runtime.getRuntime().totalMemory() >> 20) + "MB");
//run some with some loops and a lot of variables...
System.out.println("memory when finished: " + (Runtime.getRuntime().totalMemory() >> 20) + "MB");
}
我运行了这段代码,可以看到堆大小如何增加,但是当我将 System.gc();
行添加到我的代码中时,堆大小不再扩大。
我的问题是:为什么 JVM 似乎更喜欢扩展堆而不是进行一些垃圾收集?我希望 JVM 在进一步分配内存之前首先尝试垃圾收集。
提前致谢
最佳答案
JVM 假定您可以分配 -Xmx
所允许的尽可能多的堆。更多的堆余量意味着更高的 GC 吞吐量和更少的 GC 暂停频率。您可以决定愿意投入多少 RAM 来帮助您的 JVM 良好运行。至少这是默认的推理;您可以通过大量可配置选项来影响 JVM 的选择。
关于java - JVM内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184520/