首页 畅享游戏,快乐生活!
手机版
扫描查看手机站

没有工具怎么让自己达到GC 没有工具怎么弄自己

时间:2023-11-16 13:02:57 编辑:

各位老铁们好,相信很多人对没有工具怎么让自己达到GC都不是特别的了解,因此呢,今天就来为大家分享下关于没有工具怎么让自己达到GC以及没有工具怎么弄自己的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

什么时候触发YoungGC----针对年轻代

当Eden区满了的时候,会触发YoungGC

什么时候触发FullGC----针对整个堆在发生YoungGC的时候,虚拟机会检测之前每次晋升到老年代的平均大小是否大于年老代的剩余空间,如果大于,则直接进行FullGC;如果小于,但设置了HandlePromotionFailure,那么也会执行FullGC。

-XX:HandlePromotionFailure:是否设置空间分配担保nJDK7及以后这个参数就失效了.n只要老年代的连续空间大于新生代对象的总大小或者历次晋升到老年代的对象的平均大小就进行MinorGC,否则FullGC永久代空间不足,会触发FullGCSystem.gc()也会触发FullGC堆中分配很大的对象

所谓大对象,是指需要大量连续内存空间的java对象,例如很长的数组,此种对象会直接进入老年代,而老年代虽然有很大的剩余空间,但是无法找到足够大的连续空间来分配给当前对象,此种情况就会触发JVM进行FullGC。

-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

为了解决大对象这个问题,CMS垃圾收集器提供了一个可配置的参数,即-XX:+UseCMSCompactAtFullCollection开关参数,用于在“享受”完FullGC服务之后额外免费赠送一个碎片整理的过程。

-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

内存整理的过程无法并发的,空间碎片问题没有了,停顿时间不得不变长了,JVM设计者们还提供了另外一个参数-XX:CMSFullGCsBeforeCompaction,这个参数用于设置在执行多少次不压缩的FullGC后,跟着来一次带压缩的。

CMSGCconcurrentmodefailure问题

concurrentmodefailure是在执行CMSGC的过程中同时业务线程将对象放入老年代,而此时老年代空间不足,这时CMS还没有机会回收老年带产生的,或者在做MinorGC的时候,新生代救助空间放不下,需要放入老年代,而老年代也放不下而产生的。

CMSGC----针对年老代

配置了-XX:CMSInitiatingOccupancyFraction=75和-XX:+UseCMSInitiatingOccupancyOnly,设定CMS在对内存占用率达到75%的时候开始GCnn配置了-XX:+CMSClassUnloadingEnabled,CMSInitiatingPermOccupancyFraction=80%,即:PermGen的使用达到一定的比率,默认为92%nn配置了-XX:+ExplicitGCInvokesConcurrent,且未配置-XX:+DisableExplicitGC的情况下,显示调用了System.gc()

CMS在并发模式工作的时候是只收集老年代的。但一旦并发模式失败(发生concurrentmodefailure)就有选择性的会进行全堆收集,也就是退回到FullGC。

欢迎关注公众号:程序员开发者社区

没有工具怎么让自己达到GC的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于没有工具怎么弄自己、没有工具怎么让自己达到GC的信息别忘了在本站进行查找哦。

热门文章

推荐专题

更多>>

游戏推荐

更多>>