【发布时间】:2015-05-24 22:11:00
【问题描述】:
在我的 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 在进一步分配内存之前先尝试垃圾收集。
提前致谢
【问题讨论】:
-
GC 必须平衡各种目标,请参阅我在 *.com/a/28614001/1362755 的回答
标签: java memory garbage-collection jvm