JVM产生CMS GC的 5 种环境,你知道的必定不全!
从源码上看,这里首要分成两类: (a) Old Gen 空间行使占比环境与阈值较量,假如大于阈值则举办 CMS GC 也就是"occupancy() > initiatingoccupancy()",occupancy 毫无疑问是 Old Gen 当前空间的行使占比,而 initiatingoccupancy 是几多呢?
可以看到当 CMSInitiatingOccupancyFraction 参数设置值大于 0,就是 “io / 100.0”; 当 CMSInitiatingOccupancyFraction 参数设置值小于 0 时(留意,默认是 -1),是 “((100 - MinHeapFreeRatio) + (double)(tr * MinHeapFreeRatio) / 100.0) / 100.0”,这到底是几多呢?是 92%,这里就不贴出详细的计较进程了,或者你已经在某些书可能博客中相识过,CMSInitiatingOccupancyFraction 没有设置,就是 92,可是着实 CMSInitiatingOccupancyFraction 没有设置是 -1,以是阈值取后者 92%,并不是 CMSInitiatingOccupancyFraction 的值是 92。 (b) 接下来没有设置 UseCMSInitiatingOccupancyOnly 的环境 这里也分成有两小类环境: 当 Old Gen 刚由于工具分派空间而举办扩容,且乐成分派空间,这时会思量举办一次 CMS GC; 按照 CMS Gen 空闲链判定,这里有点伟大,今朝也没整清晰,亏得凭证默认设置其拭魅这里返回的是 false,以是默认是不消思量这种触发前提了。 4.按照增量 GC 是否也许会失败(气馁计策) 什么意思呢?两代的 GC 系统中,首要指的是 Young GC 是否会失败。假如 Young GC 已经失败可能也许会失败,JVM 就以为必要举办一次 CMS GC。
我们看两个判定前提,“incrementalcollectionfailed()” 和 “!getgen(0)->collectionattemptissafe()” incrementalcollectionfailed() 这里指的是 Young GC 已经失败,至于为什么会失败一样平常是由于 Old Gen 没有足够的空间来容纳提拔的工具。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |