最近我看到这篇文章,它对 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
谢谢,
哈利
最佳答案
1) From Oracle :
Starting with 1.3.1, softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap. This value can be adjusted using the -XX:SoftRefLRUPolicyMSPerMB flag, which accepts integer values representing milliseconds. For example, to change the value from one second to 2.5 seconds, use this flag:
-XX:SoftRefLRUPolicyMSPerMB=2500
3)我的意思是,它在您链接的文章中具体说明了。您可能会通过牺牲一些性能来释放堆空间。我们还能告诉你什么?
If Jenkins consumes excessive old generation memory, it may help to make soft references easier to flush by reducing
-XX:SoftRefLRUPolicyMSPerMB
from its default (1000) to something smaller (say 10-200). The catch is that SoftReferences are often used for objects that are relatively expensive to load, such lazy-loaded build records and pipeline FlowNode data
关于java - Soft Reference中GC在java中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288346/