JVM_垃圾回收串行、并行、并发算法(总结)

一、串行

  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. 适合于响应要求高的系统,回收时系统不会停止运行

来自为知笔记(Wiz)

时间: 2024-11-05 04:26:31

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

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

串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分: 先说一下队列和任务: (1)队列分为串行和并行,任务的执行分为同步和异步,异步是多线程的代名词,异步在实际引用中会开启新的线程,执行耗时操作. (2)队列只是负责任务的调度,而不负责任务的执行,任务是在线程中执行. 以上两点对了解串行.并行.同步.异步非常重要! 再说一下队列和任务的特点: (1)串行队列:任务按照顺序被调度,前一个任务不执行完毕,队列不会

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结 在GCD函数中, 我们常常碰到同步,异步,串行队列,并发队列,全局队列,主队列等概念,而这些概念又常常组合在一起, 十分头疼, 这篇文章就来梳理一下这些烦人的概念. 不想看长篇大论的, 直接看文章末尾的表格即可! 在此之前, GCD中还涉及到两个十分重要的概念, 就是任务和队列 任务(Task): 你需要执行的操作 队列(Queue): 存放任务的容器 GCD中两个重要的函数, 一个同步执行, 一个异步执行 dispatch_asyn

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

(1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_SERIAL); for

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

转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gc

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

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责. 串行队列:队列中的任务只会顺序执行(类似跑步) dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial); 并

iOS中的串行,并行,分组,一次,障碍,延迟,反复执行(GCD)

#import "OneViewController.h" @interface OneViewController () @end @implementation OneViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didRece

JVM垃圾回收(四)- GC算法:实现(1)

GC算法:实现 上面我们介绍了GC算法中的核心概念,接下来我们看一下JVM里的具体实现.首先必须了解的一个重要的事实是:对于大部分的JVM来说,两种不同的GC算法是必须的,一个是清理Young Generation的算法,另一种是清理Old Generation的算法. 在JVM里有各种各样的这种内置算法,如果你没有特别指定GC算法,则会使用一个默认的.适应当前平台(platform-specific)的算法.接下来我们会解释每种算法的工作原理. 下面的列表提供了一个快速的预览,关于哪些算法可能

IOS GCD(线程的 串行、并发 基本使用)

// 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackgrou

FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程

1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式.第二.Business Process Modeling,即业务流程建模,是对业务流程进行表述的方式,它是过程分析与重组的 重要基础. 如果再不了解请自行百度了,本人在这里就不再详细介绍了. 2.FS BPM 系统开发介绍 FS BPM于2017年1月开始进行开发.其中经历多个难题.用高性能机制解决