1

最近我遇到了这篇文章,它对 Jenkins 进行了 GC 调整,其中谈到了这个参数:-XX:SoftRefLRUPolicyMSPerMB

https://jenkins.io/blog/2016/11/21/gc-tuning/

我知道它可以防止 OOM 错误,因为它会在达到阈值时清除软引用对象。

1) 这个阈值是什么意思(默认 = 1000ms in -XX:SoftRefLRUPolicyMSPerMB)是什么意思?这个值代表什么?

2)我的詹金斯似乎有 80% 的软参考(使用 HProf 观察)

3) 如上述文章中所建议的,如果我将这个 -XX:SoftRefLRUPolicyMSPerMB 标志减少到 10ms 会有什么后果?

注意:我们使用 G1GC

谢谢,
哈利

4

1 回答 1

4

1)来自甲骨文

从 1.3.1 开始,软可访问对象将在最后一次被引用后保持活动一段时间。默认值是堆中每兆字节的生命周期一秒。可以使用 -XX:SoftRefLRUPolicyMSPerMB 标志调整此值,该标志接受表示毫秒的整数值。例如,要将值从 1 秒更改为 2.5 秒,请使用以下标志:

-XX:SoftRefLRUPolicyMSPerMB=2500

3)我的意思是,它在您链接到的文章中具体说明。您可能会通过牺牲一些性能来释放堆空间。我们还能告诉你什么?

-XX:SoftRefLRUPolicyMSPerMB如果 Jenkins 消耗了过多的老一代内存,它可能有助于通过从默认值 (1000)减少到更小的值 (比如 10-200) 来使软引用更容易刷新 。问题是 SoftReferences 通常用于加载相对昂贵的对象,例如延迟加载的构建记录和管道 FlowNode 数据

于 2018-05-11T08:48:18.343 回答