-XX:G1保留百分比和空间耗尽
我试图理解它到底是做什么的。我在官方文档中找到的描述并不全面:-XX:G1ReservePercent
设置保留内存的百分比以保持可用,以降低到空间溢出的风险。默认值为 10%。增加或减少百分比时,请确保将总 Java 堆调整相同的量。
对空间耗尽日志条目的描述是这样的:
当您在日志中看到到空间溢出/耗尽的消息时,G1 GC 没有足够的内存用于幸存者或提升的对象,或两者。
[...]
要缓解此问题,请尝试以下调整:
增加选项的值(以及相应的总堆)以增加“到空间”的保留内存量。
-XX:G1ReservePercent
[...]
从这句话来看,这意味着在执行混合疏散时,我们没有足够的自由区域将幸存者转移到那里。to-space exhausted
但是,这与以下官方在Full GC情况下的调整建议相矛盾(强调我的):
强制 G1 更早开始标记。G1 根据较早的应用程序行为自动确定起始堆占用百分比 (IHOP) 阈值。如果应用程序行为发生更改,则这些预测可能是错误的。有两种选择:通过修改
-XX:G1ReservePercent
来增加自适应IHOP计算中使用的缓冲区,从而降低何时开始空间回收的目标占用率;
那么缓冲区是什么,设置做什么(从第一眼看,AdaptiveIHOP与它无关...)?-XX:G1ReservePercent
它是否始终保留一些堆空间,因此当混合疏散发生时,我们总是有空闲的区域将幸存者移动到?
或者该空间用于G1内部管理任务?如果是这样,不清楚太空包含哪些数据,所以它耗尽了?