Soft Reference 在 GC 中的作用 java
Soft Reference in the role of GC in java
最近我看到这篇文章,它对 Jenkins 进行了 GC 调优,其中谈到了这个参数:-XX:SoftRefLRUPolicyMSPerMB
https://jenkins.io/blog/2016/11/21/gc-tuning/
我知道它可以防止 OOM 错误,因为它会在达到阈值时清除 Soft 引用对象。
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) 我的意思是,它在您链接到的文章中有明确说明。您可能会通过牺牲一些性能来释放堆space。我们还能告诉您什么?
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
最近我看到这篇文章,它对 Jenkins 进行了 GC 调优,其中谈到了这个参数:-XX:SoftRefLRUPolicyMSPerMB
https://jenkins.io/blog/2016/11/21/gc-tuning/
我知道它可以防止 OOM 错误,因为它会在达到阈值时清除 Soft 引用对象。
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) 我的意思是,它在您链接到的文章中有明确说明。您可能会通过牺牲一些性能来释放堆space。我们还能告诉您什么?
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