Iterable
在JRE7中。如果在eden + s1 + s2空格中没有任何空间的时候怎么办?年轻人会扔掉你的记忆吗? 我还没有看到这种情况发生,但如果有人经历过它,我会感到好奇。
答案 0 :(得分:1)
这可能取决于实现,但通常不是因为它不是设定值,只是一个上限。如果在伊甸园和/或幸存者空间中没有更多的空间,则将对象直接复制到旧的gen,当没有空间时,JVM首先尝试执行收集。即使你设置XX:MaxTenuringThreshold=0
,它也只是意味着对象会立即升级。
考虑到此参数设置上限,实际值由by the JVM
决定终身临界值的最大值。默认值为15.
正如documentation所述:
当Java虚拟机因内存不足而无法分配对象时抛出,垃圾收集器不再提供更多内存。
当s1和s2之间的交换次数超过该值并且旧版本中没有空闲内存(并且GC无法释放任何内存)时,问题就会开始。
考虑到将该值设置得太低可能会成为一个问题,如果您的对象是短暂的,但过快地升级到旧的gen。另一方面,如果你的大多数物体都是长寿的,那么让它们在s1和s2之间交换也不是一个好主意。