java - Soft Reference中GC在java中的作用

标签 java jenkins garbage-collection g1gc soft-references

最近我看到这篇文章,它对 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/

相关文章:

java - 使用类名运行 maven 测试 - Maven 如何找到该类?

java - 将 @index 添加到字段后,对象化过滤器不起作用

json - Powershell 脚本缺少类型名称

java - Checkstyle报告生成图表报告

java - 处理程序更改 UI 导致 CalledFromWrongThreadException

java - Setter 注入(inject)不适用于 Spring 的工厂方法注入(inject)

java - 在不破坏向后兼容性的情况下将返回类型从 Integer 更改为 int

ubuntu - 安装最新版本的 Jenkins 的问题

garbage-collection - 为什么 GC 不会自动处理我类(class)的成员?

java - 线程终止时jvm是否释放线程的堆栈