zoukankan      html  css  js  c++  java
  • JVM收集器概述

    1. Serial 收集器

      Serial 是一个新生代收集器 ;单线程垃圾回收器,采用复制算法 

      -XX:+UseSerialGC

    2. ParNew 收集器

      ParNew 是一个新生代收集器;ParNew收集器其实是Serial收集器的多线程版本,其余行为包括Serial收集器可用的所有控制参数、收集算法、stop the world、对象分配规则,回收策略等都与Serial收集器完全一样;

      控制参数有如下:

      -XX:+UseParNewGC

      -XX:SurvivorRatio //新生代中Edge区域Survivor区的容量比值,默认为8,代表 Edge:Survivor = 8:1

      -XX:PretenureSizeThreshold //直接晋升到老年代对象的大小,设置这个参数数大于这个参数的对象直接在老年代分配

      -XX:HandlePromotionFailure //是否允许新生代收集担保,进行一次minor GC后,另一块Survivor空间不足时,将直接会在老年代中保留

      -XX:ParallelGCThreads //设置并行GC进行回收时,并行线程数

    3. Parallel Scavenge 收集器

      Parallel Scavenge 是一个新生代收集器,也是使用复制算法的收集器,从名字上看 Parallel Scavenge收集器,与ParNew收集器一样,都是并行收集,并且都采用复制算法,但是Parallel Scavenge收集器与CMS等其它收集器不同,CMS等收集器关注的点是尽量缩短垃圾回收时用户线程停顿的时间,而Parallel Scavenge收集器目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是CPU用户运行用户代码的时间与CPU总耗时间的比值。

      停顿时间短就适合人机交互程序,而高吞吐量可以高效的利用CPU时间,尽可能快的完成用户任务,适合后台预算而不需要太多交互的的任务。

      Parallel Scanvenge 手机器两个参数可以精准的控制吞吐量:

      -XX:MaxGCPauseMillis //最大垃圾回收停顿时间 大于0的毫秒数,收集器尽可能的保证内存回收花费的值不超过该设定

      -XX:GCTimeRatio //设置大于0小于100的整数,垃圾回收时间占总时间的比率,如果把该值设为19 允许GC时间占总时间的5% 1/(1+19),默认值为 99 ,就是允许最大1%

      -XX:+UseAdaptiveSizePolicy //打开开关不用指定新生代老年代大小等参数,收集器会动态指定空间大小

    4. Serial Old 收集器

      Serial Old 是Serial收集器的老年代版本,他同样是一个单线程收集器,使用“标记-整理”算法;

    5. Parallel Old 收集器

      Parallel Old收集器 是Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理”算法,Parallel Old收集算法是在jdk 1.6之后的版本才提供的,在此之前Parallel Scavenge 收集器地位比较尴尬,因为如果新生代选择了 Parallel Scanvenge收集器,老年代除了Serial Old(PS MarkSweep)收集器别无选择;由于老年代在Serial Old收集器在服务器性能上拖累,使用Parallel Scanvenge收集器整体上也未必能达到吞吐量最优;知道Parallel Old收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组合,在注重CPU吞吐量的应用场合,都可以优先考虑Parallel Scanvenge 加Parallel Old 收集器;

    6. CMS 收集器

      CMS(Concurrent Mark Sweep) 收集器是一种以获得最短回收停顿时间为目标的收集器。目前很大一部分的java应用集中在互联网站或者B/S系统的服务端,这类应用尤其重视相应速度;

      从名字Mark Sweeps上可以看出CMS收集器是基于“标记-清理”算法实现的,他的运作过程先对与其他几种收集器来说相对复杂,整个过程分为四步:

      1)初始标记(CMS inital mark)  stop the world 标记GC Roots直接关联到的对象

      2)并发标记(CMS concurrent mark) GC Roots tracing

      3)重新标记(CMS remark) stop the world 修正2)步骤与用户线程冲突的部分

      4)并发清除(CMS cuncurent sweep)清除不可达对象

      CMS 收集器启动时的回收线程默认是(cpu数量+1)/4 并发垃圾手机线程不少于 25%的CPU资源

    7. G1 收集器

      G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一;G1的使命的替换掉CMS收集器

      G1特点:

      1)并行与并发

      2)分代收集

      3)空间整合

      4)可预测的停顿

      G1收集器工作的顺序与CMS收集器顺序非常相似,两者主要差别在于内存划分模型,以及回收算法

  • 相关阅读:
    应用监控CAT之cat-client源码阅读(一)
    java中this的N种使用方法
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
  • 原文地址:https://www.cnblogs.com/huixw/p/4970483.html
Copyright © 2011-2022 走看看