• JVM学习3--GC参数及收集器


    (本文所提到的算法请见:http://www.cnblogs.com/NoYone/p/8971239.html

    一、串行收集器

      -XX:+UseSerialGC 

      从第二张图的时间可以看出来,复制算法的效率要比标记压缩算法高的多。

    二、并行收集器

      -XX: +UseParNewGC (新生代并行,老年代串行)

      -XX: +UseParallelGC (新生代并行,老年代串行)

      -XX: +UsePrallelOldGC (新生代老年代都是串行)

      注意:多线程不一定更快,这就跟写程序一样,要注意使用场景。

      图示:

      

      注意图中红字,PSYoungGen和ParOldGen表示新生代老年代都用的并行收集器,所以此时的GC参数是 -XX: UseParallelOldGC。

    三、CMS收集器(默认不使用,一般作为老年代串行收集器的后备)

      图示:

    四、G1收集器

      1. G1收集器(Garbage-First)是在JDK1.7中正式使用的全新垃圾回收器,从长期目标看,它是为了取代CMS收集器。从分代上看,G1依然属于分代垃圾回收器,它会区分年轻代和老年代,依然有eden区和survivor区,但从堆的结构上看,它并不要求整个eden区、年轻代和老年代都连续。它使用了分区算法。作为CMS的长期替代方案,G1的特点如下:

    • 并行性:G1在回收期间,可以由多个GC线程同时工作,有效利用多核计算能力。
    • 并发性:G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此一般来说,不会在整个回收期间完全阻塞应用程序。
    • 分代GC:G1依然是一个分代收集器,但是和之前回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,它们或者工作在年轻代,或者工作在老年代。因此,这里是一个很大的不同。
    • 空间整理:G1在回收过程中,会进行适当的对象移动,不像CMS,只是简单地标记清理对象,在若干次GC后,CMS必须进行一次碎片整理。而G1不同,它每次回收都会有效地复制对象,减少空间碎片。
    • 可预见性:由于分区的原因,G1可以只选取部分区域进行内存回收,这样缩小了回收的范围,因此对于全局停顿也能得到较好的控制。

      2. G1的内存划分和主要收集过程

      G1收集器将堆进行分区,划分为一个个的区域,每次收集的时候,只收集其中几个区域,以此来控制垃圾回收产生的一次停顿时间。

      G1的收集过程可能有4个阶段:

    • 新生代GC
    • 并发标记周期
    • 混合收集
    • 如果需要,可能进行Full GC

    五、GC参数整理

    • -XX: +UseSerialGC:新生代和老年代使用串行收集器  此时新生代收集显示DefNew
    • -XX: +SurvivorRatio: 设置survivor区和eden区大小比率
    • -XX: +NewRatio: 新生代和老年代的比率
    • -XX: +UseParNewGC: 新生代使用并行收集器  此时新生代收集显示ParNew
    • -XX: +UseParallelGC: 新生代使用并行收集器  此时新生代收集显示PSYoungGen
    • -XX: +UsePrallelOldGC: 老年代使用并行收集器  此时新生代收集显示PSYoungGen
    • -XX: +ParallelGCThreads: 设置用于垃圾回收的线程数
    • -XX: +UseConcMarkSweepGC: 新生代使用并行收集器,老年代使用CMS+串行收集器   此时新生代收集显示ParNew
    • -XX: +ParallelCMSThreads: 设定CMS的线程数量
    • -XX: CMSInitiatingOccupancyFraction: 设置CMS收集器在老年代空间被使用多少后触发
    • -XX: +UseCMSCompactAtFullCollection: 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
    • -XX: CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
    • -XX: +CMSClassUnloadingEnabled:允许对类元数据进行回收
    • -XX: CMSInitiatingPermOccupancyFraction:当永久占用率达到这一百分比时,启动CMS回收
    • -XX: +UseCMSInitiatingOccupancyOnly: 表示只在达到阈值的时候,才进行CMS回收
  • 相关阅读:
    [原创]FineUI秘密花园(二十九) — 用户控件概述
    FineUI v3.2.4发布了!
    [原创]FineUI秘密花园(二十六) — 选项卡控件概述
    [原创]FineUI秘密花园(三十) — ViewState与XState (本系列文章最后一篇,兑现承诺,现提供完整PDF版下载!)
    FineUI 将不再内置 ExtJS (严格遵守 ExtJS 的开源规则)
    fineui.com 可以正常访问了
    [原创]22行JavaScript代码实现QQ群成员提取器,绿色、环保、无病毒!
    [原创]如何在FineUI中集成jQuery UI的AutoComplete组件
    《计算机程序的解释和构造》(SICP)学习2-对系统结构的两种不同的“世界观”
    报表开发最后一计使用iTextSharp来开发报表
  • 原文地址:https://www.cnblogs.com/NoYone/p/8971770.html
Copyright © 2020-2023  润新知