最近,我碰到了这篇文章,该文章通过GC调整了讨论此参数的Jenkins:-XX:SoftRefLRUPolicyMSPerMB
https://jenkins.io/blog/2016/11/21/gc-tuning/
我知道它可以防止OOM错误,因为它会在达到阈值时清除软参考对象。
1)这个阈值是什么(在-XX:SoftRefLRUPolicyMSPerMB中默认= 1000ms)是什么意思?此值表示什么?
2)我的詹金斯似乎拥有80%的软引用(使用HProf观察到)
3)如以上文章中所建议,如果我将-XX:SoftRefLRUPolicyMSPerMB标志减少到10ms,将会有什么后果?
注意:我们使用G1GC
谢谢,
哈里
最佳答案
1)From Oracle:
从1.3.1开始,柔软可触及的对象将在
在上次引用它们之后的一段时间。的
缺省值是堆中每个空闲兆字节的生命周期的一秒钟。
可以使用-XX:SoftRefLRUPolicyMSPerMB标志来调整此值,
接受代表毫秒的整数值。例如,
要将值从一秒更改为2.5秒,请使用以下标志:
-XX:SoftRefLRUPolicyMSPerMB = 2500
3)我的意思是,它在您链接的文章中特别指出。您可能会通过牺牲一些性能来释放堆空间。我们还能告诉您什么?
如果詹金斯(Jenkins)消耗了过多的旧一代内存,则可能有助于
通过减少软引用使刷新更容易
-XX:SoftRefLRUPolicyMSPerMB
从其默认值(1000)到较小的值(例如10-200)。问题是SoftReferences经常被使用
对于加载相对昂贵的对象,例如延迟加载
建立记录和管道FlowNode数据