Java垃圾收集器(在Open JDK中实现)是否遵循-XX:MaxHeapFreeRatio=n G1参数?
它在Java 8中尊重它吗?
我发现JEP 346: Promptly Return Unused Committed Memory from G1 是在Java12中交付的,但我不清楚它之前的状态是什么。
发布于 2020-03-12 04:31:38
最值得注意的是,一些GC支持它,一些不支持。G1也支持此选项。
要收缩堆(并释放内存),需要一个完整的GC。如果应用程序不手动触发完整的GC,则可能需要一段时间才能由JVM触发。
所以答案是(对于Java 8):是的……但不是。
(我仍然好奇,在更现代的JVM中,是否有更权威的来源,以及当前的状态是什么)
发布于 2020-03-12 18:35:11
我不知道比源代码更权威的答案,是的,你的答案是正确的-只有在完整的GC之后(至少在JEP之前),内存才会释放。
对于java-8:
这个论点确实很重要,看here for example。
这段代码理解起来并不复杂,而here是实际发生的收缩。
有关更广泛的答案(关于java-11,但仍然适用于java-8),请阅读this。
底线是-该标志确实很重要,但具体如何取决于实现。你的问题没有简单的答案。
https://stackoverflow.com/questions/60643928
复制相似问题