Soft Reference中GC在java中的作用

Har*_*rry 2 java garbage-collection soft-references g1gc jenkins

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

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

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

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

2)我的jenkins似乎有80%的软引用(使用HProf观察)

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

注意:我们使用 G1GC

谢谢,
哈利

Mic*_*ael 6

1)来自甲骨文

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

-XX:SoftRefLRUPolicyMSPerMB=2500

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

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