虚拟机参数:SoftRefLRUPolicyMSPerMB

-XX:SoftRefLRUPolicyMSPerMB从名字看不出什么意思?【官文解读】

  • SoftRefLRUPolicyMSPerMB 该参数得官方解释:

What determines when softly referenced objects are flushed?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

The Java HotSpot Server VM uses the maximum possible heap size (as set with the -Xmx option) to calculate free space remaining.The Java Hotspot Client VM uses the current heap size to calculate the free space.This means that the general tendency is for the Server VM to grow the heap rather than flush soft references, and -Xmx therefore has a significant effect on when soft references are garbage collected.

On the other hand, the Client VM will have a greater tendency to flush soft references rather than grow the heap.The behavior described above is true for 1.3.1 through Java SE 6 versions of the Java HotSpot VMs. This behavior is not part of the VM specification, however, and is subject to change in future releases.

Likewise the -XX:SoftRefLRUPolicyMSPerMB flag is not guaranteed to be present in any given release.

比较好的一个解释:

当gc执行时,决定SoftReference回收有两个因素:
[list]
[]SoftReference的timestamp
[
]有多少空闲空间
[/list]
在server模式下,会用-Xmx参数得到空闲空间大小。
在client模式下,会用当前heap最大空闲空间大小。
简单来说,server模式下会优先扩大heap大小,client模式下会优先回收垃圾。

SoftReference类中,有一个timestamp:

public class SoftReference<T> extends Reference<T> {/* Timestamp clock, updated by the garbage collector*/static private long clock;/* Timestamp updated by each invocation of the get >method.  The VM may use* this field when selecting soft references to be >cleared, but it is not* required to do so.*/private long timestamp;......
}

在新建SoftReference对象和调用SoftReference.get时都会使>timestamp更新为clock的值。而clock代表的是上次gc的时间。

SoftRefLRUPolicyMSPerMB默认为1000,即1s。代表每1MB>空闲空间大小SoftReference保留1s。

是否回收的条件:
clock - timestamp <= freespace * >SoftRefLRUPolicyMSPerMB

举例来说,clock为1000,timestamp为300,空闲空间为1MB。

1000 - 300 <= 1000 * 1

所以不会被回收。【注:当上面条件满足则不会被回收】

一个值得注意的地方是,SoftReference会至少经历1次gc而不被回收。

参考http://jeremymanson.blogspot.com/2009/07/how-hotspot-decides-to->clear_07.html

解释: 我们知道软引用,实在空间不足的情况下才会被回收,当然这个只是一个比较简单的解释。实际上软引用的回收机制复杂得多,需要SoftRefLRUPolicyMSPerMB的意思,就先明白soft-reference在代码逻辑上需要满足的条件是什么,如下:

clock - timestamp <= freespace * SoftRefLRUPolicyMSPerMB

clock记录是上一次GC的时间戳,timestamp则是最近一次读取soft-reference引用对象(即最近调用get())的时间戳。他们的差【clock - timestamp】表示了soft-reference有多久没用了,越大表示越久没用。如果他们的差为负数,表示刚刚用过。而【freespace * SoftRefLRUPolicyMSPerMB】表示能够VM的忍耐度,VM能够忍耐软引用对象多久没有被回收,而VM的忍耐度从公式可以知道是由VM计算得出的空闲空间大小和用户指定的忍耐度SoftRefLRUPolicyMSPerMB来决定的。

也就是说,如果软引用上次被get()的时间离最近一次GC的时间不会太久远的话就可以不被当前GC回收。

题外话:

不得不吐槽一下SoftRefLRUPolicyMSPerMB这个参数的命名:虽然从名字中我们可以看到LRU算法,也可以看到它与SoftRef的GC有关,还有freespace由多少M空间等寓意,但是单纯看这个变量名确实很难直观的明白这个参数的用处,真是到处坑。

-XX:SoftRefLRUPolicyMSPerMB从名字看不出什么意思?【官文解读】相关推荐

  1. 肚子上挂张画就能隐身:AI完全看不出我在哪,更看不出我是人类了 | 开源

    栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI 有没有过一个瞬间,你恨不得自己变成一团空气? 物理上做不到,真是遗憾. 但现在,你可以在AI面前练成"隐身术",只要在 ...

  2. 每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行

    每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行 package p2;import java.awt.event.*; import ...

  3. 研究生学位论文质量快速下滑,写作水平非常低劣,学生任性急躁,工匠精神缺失,论文看不出热爱和用心...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:各省高校引才 文章来源:科学网信忠保博客 最近,是研究生学 ...

  4. 担心写出的汽车软文没人看?

    家好,今天投媒网小编又来跟大家分享软文的干货知识了.担心写出的汽车软文没人看?采用这4种方法,轻松写出爆款软文! 1.抓住热点实事 软文撰写者在撰写汽车行业软文时,可以利用热门的综艺节目,一定要抓准角 ...

  5. 关于电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分,色彩调整方法

    问题: 电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分.白色和灰色有色差. 解决方法: 打开"控制面板" ->"色彩管理" ->"高 ...

  6. 如何写出优秀的技术文档?

    大家好,我是小枣君. 鲜枣课堂自从2017年5月开始正式创立,迄今已有3年多的时间.这一期间,我们的内容一直都坚持以技术类科普文章为主,输出了大约400多篇原创.其中绝大部分,都是我写的. 我的想法比 ...

  7. 如何写出公众号爆文?分享你一份爆文写作秘籍

    新媒体时代,想要产出一篇公众号爆文真的是难于上青天!现在公众号内容同质化严重,如果你没有一些新颖的观点和真本事,是无法从成千上万的公众号中脱颖而出的! 如何写出公众号爆文?为什么你看了那么多写作干货和 ...

  8. 快速找出两个Word文档之间的差别

    我们经常会遇到这样的问题:两份Word文件之中,只有一些极为细小的区别,如果单纯通过人工的方法去进行校对,那么不仅效率很低,而且也容易出错,容易漏掉一些不太明显的区别.Word 2003已经内置了一个 ...

  9. css股票曲线图图解,如何看懂股票曲线图,一文搞懂这些曲线所代表的含义!

    原标题:如何看懂股票曲线图,一文搞懂这些曲线所代表的含义! 在股票技术分析中,我们经常要分析K线图,分时图等等,有些新手在入门的时候常常把两者弄混,所以统称它们为曲线图,实际它们就是K线图和分时图了, ...

最新文章

  1. Facebook最新对抗学习研究:无需「平行语料库」完成「无监督」机器翻译
  2. SQL之inner join/left join/right join
  3. oracle包写入程序失败_Oracle内核技术揭秘第一篇
  4. 制作程序化装饰花纹图案_用装饰器设计图案装饰
  5. 从XaaS到Java EE – 2012年哪一种该死的云最适合我?
  6. mysql密码高级_mysql高级操作
  7. python实现采样函数_python中resample函数实现重采样和降采样代码
  8. 深度优化LNMP之PHP
  9. vue请求本地json数据
  10. 019.nexus搭建docker镜像仓库/maven仓库
  11. MySql Workbench常用快捷键修改MySqlWorkBench快捷键
  12. linux系统组成以及运行模式
  13. 如何部署windows服务?
  14. 加速下载 玩转土豆网FLV视频四招
  15. BeanUtils之commons-beanutils
  16. 南京林业大学计算机考研资料,2021南京林业大学考研历年真题复习资料
  17. ueditor+秀米
  18. linux后门rootkit程序介绍
  19. win10 .Net Runtime Optimization Service占用大量CPU资源解决方法
  20. 2.0 Mesh Beacon帧格式

热门文章

  1. python算程序员吗_2019为什么有人说Python程序员是假的程序员?
  2. 什么是邮箱域名,企业邮箱域名有什么好处?
  3. C语言从入门到入土(三)
  4. SSL与数字证书,Htpps
  5. 第9节 本地文件安全权限-以NTFS文件系统为例
  6. 企业微信登录报错:应用程序无法正常启动(0xc0000142);Win10应用程序无法正常启动0xc0000142错误的解决方法
  7. 【自然语言处理】【多模态】OFA:通过简单的sequence-to-sequence学习框架统一架构、任务和模态
  8. 商标设计后一定要向商标局进行重新提交,商标持有公司变更后要及时变更商标
  9. 计算机第二课堂教学计划,小学第二课堂教学计划
  10. 汉堡包菜单_7种制作“汉堡包”菜单图标的非光栅方法