天天看点

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在发现它们时清除了软引用。