一、串行
  1. JDK1.5前的默认算法
  2. 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长
  3. 语法
    1. -XX:+UseSerialGC
    2. 新生代、老年代使用串行回收
    3. 新生代复制算法
    4. 老年代标记-压缩
  4. 示例图
  5. 测试代码
 //-Xmx20m -Xms20m -Xmn2m -XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
        byte[] b = null;
        for (int i = 0; i < 7; i++)
        {
            b = new byte[3 * 1024 * 1024];
        }
串行的关键字是DefNew(年轻代)、Tenured(年老代)、Perm(永久代)
0.162: [GC0.162: [DefNew: 1562K->191K(1856K), 0.0030044 secs]
0.165: [Tenured: 15917K->3820K(18432K), 0.0059132 secs] 16922K->3820K(20288K), 
[Perm : 2890K->2890K(21248K)], 0.0090042 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 


二、并行
  1. 多个线程执行垃圾回收
  2. 适合于吞吐量的系统,回收时系统会停止运行
  3. 语法
    1. -XX:+UseParNewGC(新生代使用并行收集器,老年代使用串行回收收集器)
      关键字(ParNew)
    2. -XX:+UseParallelGC(新生代使用并行回收收集器,老年代使用串行收集器)
    3. -XX:+UseParallelOldGC(新生代,老年代都使用并行回收收集器
      关键字(PSYoungGen)
    4. -XX:+UseConcMarkSweepGC(新生代使用并行收集器,老年代使用CMS)
    5. -XX:ParallelGCThreads 限制并行线程数量
    6. -XX:MaxGCPauseMills  GC最大停顿毫秒数
    7. -XX:GCTimeRatio 垃圾回收占用的CPU时间比例,默认99代表最大运行1%时间做GC
    8. 新生代复制算法
    9. 老年代标记-压缩
  4. 示例图
  5. UseParNewGC 代码同串行,年轻代并行,年老代串行 
    -Xmx20m -Xms20m -Xmn2m -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
         0.193: [GC0.193: [ParNew: 1601K->192K(1856K), 0.0093101 secs]0.202: [Tenured: 15948K->3834K(18432K), 0.0060758 secs] 16961K->3834K(20288K), [Perm : 3144K->3144K(21248K)], 0.0154452 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
  6. UseParallelGC 功能同UseParNewGC
  7. UseParallelOldGC 代码同串行,年轻代、年老代都并行
0.141: [GC [PSYoungGen: 1024K->488K(1536K)] 1024K->624K(19968K), 0.0166419 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
0.212: [GC [PSYoungGen: 1012K->504K(1536K)] 16509K->16157K(19968K), 0.0019856 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.215: [GC [PSYoungGen: 504K->504K(1536K)] 16157K->16181K(19968K), 0.0029741 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.218: [Full GC [PSYoungGen: 504K->0K(1536K)] [ParOldGen: 15677K->3810K(18432K)] 16181K->3810K(19968K) [PSPermGen: 2891K->2890K(21504K)], 0.0133807 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

三、并发
  1. 系统和垃圾回收一起执行,系统不会暂停
  2. 适合于响应要求高的系统,回收时系统不会停止运行
  3. 语法
    1. -XX:+UseConcMarkSweepGC(设置年老代为并发收集,年轻代并行,适合于响应要求高的系统
0.206: [GC0.206: [ParNew: 1603K->192K(1856K), 0.0038214 secs]0.210: [CMS: 15945K->3836K(18432K), 0.0084133 secs] 16963K->3836K(20288K), [CMS Perm : 3120K->3119K(21248K)], 0.0123102 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 

Pid is:8008
标记-清除算法
2.217: [GC [1 CMS-initial-mark: 9980K(18432K)] 10450K(20288K), 0.0005452 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.225: [CMS-concurrent-mark-start]
2.239: [CMS-concurrent-mark: 0.014/0.014 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2.239: [CMS-concurrent-preclean-start]
2.240: [CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.240: [GC[YG occupancy: 469 K (1856 K)]2.240: [Rescan (parallel) , 0.0002922 secs]2.241: [weak refs processing, 0.0000111 secs]2.241: [scrub string table, 0.0001527 secs] [1 CMS-remark: 9980K(18432K)] 10450K(20288K), 0.0005009 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.241: [CMS-concurrent-sweep-start]
2.241: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.241: [CMS-concurrent-reset-start]
2.241: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
 
 
 

JVM_垃圾回收串行、并行、并发算法(总结)的更多相关文章

  1. 串行&并行&并发,同步&异步

    1. 串行&并行&并发 1.1 串行 这个非常好理解,字面意思,像串成一个串一样,顺序执行 上一个没执行完的话,后面的就必须无条件等待 一般情况就是一个线程里:任务一个接一个执行,类似 ...

  2. GC算法之串行并行并发

    串行收集器: 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器也可以用在小数据量(100M左右)情况下的多 ...

  3. 雷子聊并发编程(001):基础知识之串行&并行&并发

    前言 编写正确的程序很难,而编写正确的并发程序则难上加难.与串行程序相比,在并发程序中存在更多容易出错的地方.那么,为什么还要编写并发程序?原因很简单,能充分发挥与利用多处理器系统的强大计算能力. 在 ...

  4. GCD同步异步 串行并行大解析

    /** 核心概念 任务:block里需要执行的操作 队列:把任务添加进入队列中,按照先进先出的原则来执行任务  串行队列:一个一个的执行 并行队列:可以让多个任务并发(同时)执行(自动开启多个线程同时 ...

  5. iOS多线程——同步异步串行并行

    串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分: 先说一下队列和任务: (1)队列分为串行和并行,任务的执行 ...

  6. GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...

  7. 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    (1)GCD实现的同步异步.串行并行. --同步sync应用场景:用户登录,利用堵塞 --串行异步应用场景:下载等耗时间的任务 /** * 由于是异步.所以开通了子线程.可是由于是串行队列,所以仅仅须 ...

  8. JVM垃圾回收行为的并行与并发

    程序的并行和并发 程序的并发(Concurrent) 在操作系统中,是指一个时间段中有几个程序都处于己启动运行到运行完毕之间,且这几个程序都是在同一个处理器_上运行. 并发不是真正意义上的“同时进行” ...

  9. IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dis ...

随机推荐

  1. 推荐一个iOS关于颜色的库-Wonderful

    Wonderful 这个库主要是与UIColor息息相连的,其中一共包含四个子文件,UIColor+Wonderful,UIColor+Separate,SXColorGradientView,SXM ...

  2. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  3. UITextField的代理方法:textField:shouldChangeCharactersInRange:replacementString

    原文链接:http://www.cnblogs.com/zhanggui/p/6101813.html 这个我在开发的过程中用到的次数最多,因此这里就简单对其进行分析.先看看Command+点击 弹出 ...

  4. Genymotion 解决虚拟镜像下载速度特别慢的问题

    Genymotion号称Android模拟器中运行最快的,但是服务器在国外,Android镜像下载起来那个速度就不想说了. Add new device后下载速度太慢了,容易失败   解决方法如下: ...

  5. 关于UIView布局的总结

    总结一下布局UIView 1.Laying out Subviews(布局子视图) 系统提供了相关的三个api - (void) layoutSubviews 在IOS5.1和之前的版本,此方法的缺省 ...

  6. 优化mysql服务器

    一.使用show variables 和show status 命令查看MySQL的服务器静态参数值和动态运行状态信息. 二.可以使用 mysqld --verbose --help|more 查看某 ...

  7. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  8. BCP笔记整理(二)

    BCP的基础用法可以参考上一篇:http://www.cnblogs.com/Gin-23333/p/5489889.html 这篇是补充一些有可能会用到,但是出场几率并不算大的几个参数 1.首先是 ...

  9. Ubuntu安装Maven3

    先增加Maven3的源,在/etc/apt/sources.list中添加以下信息 deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu pre ...

  10. 怎样用ZBrush对模型进行渲染(二)

    继上节课Fisker老师对ZBrush中对渲染和灯光起到重要作用的Light和LightCap进行了具体讲解之后,本节课继续研究Render(渲染)和Light及LightCap相结合会产生什么样的效 ...