【问题标题】:Soft Reference in the role of GC in java软引用在java中GC的作用
【发布时间】:2018-05-11 08:38:57
【问题描述】:

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

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

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

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

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

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

注意:我们使用 G1GC

谢谢,
哈利

【问题讨论】:

    标签: java jenkins garbage-collection g1gc soft-references


    【解决方案1】:

    1)From Oracle:

    从 1.3.1 开始,可轻松触及的对象将保持活动状态 在最后一次引用它们之后的一段时间。这 默认值是堆中每兆字节的生命周期一秒。 该值可以使用 -XX:SoftRefLRUPolicyMSPerMB 标志进行调整, 它接受表示毫秒的整数值。例如, 要将值从 1 秒更改为 2.5 秒,请使用此标志:

    -XX:SoftRefLRUPolicyMSPerMB=2500

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

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

    【讨论】:

    • 你的意思是软引用对象被垃圾回收,即使它被一些 gc 根引用?
    • @Harry 如果仍然被引用,则不会进行垃圾收集。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 2010-10-26
    • 2010-10-02
    • 2012-05-22
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多