JVM:垃圾接纳器

[复制链接]
发表于 2026-2-24 03:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、先容

为什么分代GC算法要把堆分成年轻代和老年代:


  • 体系中的大部分对象,都是创建出来之后很快就不在使用可以被接纳。
  • 老年代中会存放长期存活的对象,比如Spring的大部分bean对象,在步调启动之后就不会被接纳。
  • 在捏造机的默认设置中,新生代的巨细要远小于老年代的巨细。
分代GC算法将堆分成年轻代和老年代的重要缘故原由:


  • 可以通过调解年轻代和老年代的比例来顺应差别范例的应用步调,进步内存的使用率和性能。
  • 新生代和老年代使用差别的垃圾接纳算法,新生代一样平常选择复制算法,老年代可以选择标记-扫除和标记-整理算法,由步调员来选择机动度较高。
  • 分代的筹划中答应只接纳新生代(minor gc),假如能满足对象分配的要求就不须要调解对整个堆举行接纳(full gc),STW时间就会淘汰。
垃圾接纳器的组合关系:
垃圾接纳器是垃圾接纳算法的具体实现。由于垃圾接纳器分为年轻代和老年代,除了G1之外其他垃圾接纳器必须成对组合进使用用。

二、年轻代-Serial垃圾接纳器


三、老年代-SerialOld垃圾接纳器


四、年轻代-ParNew垃圾接纳器


五、老年代-CMS(Concurrent Mark Sweep)垃圾接纳器




六、年轻代-Parllel Scavenge垃圾接纳器



七、Parallel Old垃圾接纳器


八、G1垃圾接纳器



G1垃圾接纳器的两种方式:


  • 年轻代接纳(Young GC)。
    接纳Eden区和Survivor区中的不消的对象。会导致STW,G1中可以通过参数-XX:MaxGCPauseMills=n(默认200)设置每次垃圾接纳时的最大停息时间毫秒数,G1垃圾接纳器会尽大概地包管停息时间。
  • 混淆接纳(Mixed GC):年轻代+老年代。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表