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