zoukankan      html  css  js  c++  java
  • 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回收
  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/NoYone/p/8971770.html
Copyright © 2011-2022 走看看