jvm 《三A》刷新软引用对象的原因是什么?

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

-XX:SoftRefLRUPolicyMSPerMB = 2500


Java HotSpot Server VM使用最大可能的堆大小(使用-Xmx选项设置 )来计算剩余的可用空间。

Java Hotspot Client VM使用当前堆大小来计算可用空间。

这意味着服务器VM的一般趋势是增加堆而不是刷新软引用, -Xmx因此对软引用何时进行垃圾回收具有显着影响。

另一方面,客户端VM将更倾向于刷新软引用而不是增加堆。

上述行为适用于1.3.1到Java SE6版本的Java HotSpot VM。但是,此行为不是VM规范的一部分,并且在将来的版本中可能会发生更改。同样,-XX:SoftRefLRUPolicyMSPerMB不保证在任何给定版本中都存在该 标志。

在1.3.1版之前,Java HotSpot VM在发现它们时清除了软引用。

当我定期打开-verbose:gc时,我得到了很多完整的GC,我已经调整了堆,它没有任何区别,发生了什么?

如果您正在使用RMI,那么您可能会遇到分布式GC。此外,一些应用程序正在添加显式GC认为它将使其应用程序更快。幸运的是,您可以使用1.3及更高版本中的命令行选项禁用此功能。试着 -XX:+DisableExplicitGC 随着  -verbose:gc,看看是否有所帮助。

---------------------

作者:a_Ygygs_Dxdsr_XdMss

来源:CSDN

原文:https://blog.csdn.net/weixin_42749765/article/details/87450776

版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(jvm 《三A》刷新软引用对象的原因是什么?)