JVM内存管理

JVM memory management

在我的 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 的选择。