(1)DefNew(串行)收集器

Serial(串行)垃圾收集器是最基本、发展历史最悠久的收集器;JDK1.3.1前是HotSpot新生代收集的唯一选择;

特点:

(1) 针对新生代采用复制算法,单线程收集器,进行垃圾收集时,必须暂停所有工作线程,直到工作完成。即会:Stop the World

(2)应用场景:

依然是HotSpot在Client模式下默认的新生代收集器;

也有优于其他收集器的地方:
            简单高效(与其他收集器的单线程相比);
            对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率;
            在用户的桌面应用场景中,可用内存一般不大(几十M至一两百M),可以在较短时间内完成垃圾收集(几十MS至一百多MS),只要不频繁发生,这是可以接受的
       3、设置参数
               "-XX:+UseSerialGC":添加该参数来显式的使用串行垃圾收集器;
      4、Stop TheWorld说明
          JVM在后台自动发起和自动完成的,在用户不可见的情况下,把用户正常的工作线程全部停掉,即GC停顿;
          会带给用户不良的体验;
          从JDK1.3到现在,从Serial收集器-》Parallel收集器-》CMS-》G1,用户线程停顿时间不断缩短,但仍然无法完全消除;

(2)ParNew(并行)收集器

一句话:使用多线程进行垃圾回收,在线程收集时,会Stop-The-World暂停其他所有工作线程直到它收集结束。

ParNew/Serial Old组合收集器运行示意图如下:

1,ParNew收集器其实就是Serial收集器新生代的并行多线程版本。最常见的应用场景是配合老年代的CMS GC工作,其余的行为和Serial收集器完全一样,

ParNew垃圾收集器在垃圾收集过程中同样也要暂停所有其他工作线程。他是很多java虚拟机运行在Server模式下新生代的默认垃圾收集器。

2,常用对应的JVM参数:-XX:+UseParNewGC  启用ParNew收集器,只影响新生代的收集,不影响老年代,

开启参数后,会使用:ParNew(Young区用)+Serial Old的收集组合,新生代使用复制算法,老年代使用标记-整理算法。

配置参数:   -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParNewGC (ParNew+Tenured)

(3)CMS并发标记清除垃圾收集器

Concurrent Mark Sweep 并发标记清除,并发收集低停顿,并发指的是与用户线程一起执行。

  1. 开启该收集器的JVM参数: -XX:+UseConcMarkSweepGC  开启该参数后会自动将 -XX:+UseParNewGC 打开
  2. 注意开启该参数后:使用ParNew(Young区用)+CMS(Old区用)+Serial Old的收集器组合,Serial Old将作为CMS出错的备用收集器。

小总结:

(4)G1垃圾收集器

巩固文章:详解JVM Garbage First(G1)

G1垃圾收集器架构和如何做到可预期的停顿

参考博客:Serial收集器和ParNew收集器

ParallelScavenge并行垃圾收集器

CMS并发标记清除GC

从头到尾,详细分析垃圾回收

github的Demo代码地址

垃圾收集器GC的更多相关文章

  1. 垃圾收集器GC的种类

    堆内存的结构:

  2. 《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读

    堆内存使用分析,GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建.一些类信息,常量,静态变量等存储在方法区.堆和方法区都是线程共享的. GC机制是由JVM提供,用来清理需要清除的对象, ...

  3. HotSpot垃圾收集器GC的种类

      堆内存的结构:

  4. 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一

    Grabage Collection      GC GC要完毕的三件事情: 哪些内存须要回收? 什么时候回收? 怎样回收? 内存运行时区域的各个部分中: 程序计数器.虚拟机栈.本地方法栈这3个区域随 ...

  5. JVM初探- 内存分配、GC原理与垃圾收集器

    JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念 ...

  6. 深入理解JVM 垃圾收集器(上)

    HotSpot虚拟机中的垃圾收集器 GC评价标准 GC调优 响应时间 吞吐量 1.新生代收集器 Serial收集器 ParNew收集器 Parallel Scavenge收集器 2.老年代收集器 Se ...

  7. 【JVM从小白学成大佬】5.垃圾收集器及内存分配策略

    前面介绍了垃圾回收算法,接下来我们介绍垃圾收集器和内存分配的策略.有没有一种牛逼的收集器像银弹一样适配所有场景?很明显,不可能有,不然我也没必要单独搞一篇文章来介绍垃圾收集器了.熟悉不同收集器的优缺点 ...

  8. jvm系列(三):java GC算法 垃圾收集器

    GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计 ...

  9. GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

随机推荐

  1. vue中计算属性的get与set方法

    计算属性get set方法 在vue的计算属性中,所定义的都是属性,可以直接调用 正常情况下,计算属性中的每一个属性对应的都是一个对象,对象中包括了set方法与get方法 computed:{ ful ...

  2. C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)

    一.C#实现本地文件下载 1.文件下载的路径  文件名称 以及文件下载之后要放的位置  这三个变量是必须要的 2.定义以下四个对象: FileWebRequest ftpWebRequest = nu ...

  3. fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Fiddler的HTTPS抓包功能." 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启, ...

  4. MySQL 学习笔记 (一)

    1.InnoDB and Online DDL ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE; ...

  5. MySQL数据库~~~~~创建用户和授权、备份和还原

    一 MySQL创建用户和授权 1.1 对新用户增删改 1.创建用户: # 指定ip:192.118.1.1的chao用户登录 create user 'chao'@'192.118.1.1' iden ...

  6. 【转载】Java程序模拟公安局人员管理系统

    编程题:公安人员的管理系统1) 学生类:a) 属性:i. 身份号—默认没有,需要手动进行输入ii. 姓名iii. 性别iv. 年龄v. 密码vi. 居住地址vii. 注册日期viii. 人员的信誉程度 ...

  7. tensorflow基本用法个人笔记

    综述   TensorFlow程序分为构建阶段和执行阶段.通过构建一个图.执行这个图来得到结果. 构建图   创建源op,源op不需要任何输入,例如常量constant,源op的输出被传递给其他op做 ...

  8. java基础 - 形参和实参,值传递和引用传递

    形参和实参 形参:就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的. 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元. 因此,形 ...

  9. springmvc+mybatis需要的jar包与详解

    https://www.cnblogs.com/luohengstudy/p/7772109.html

  10. python-参数化-(2)(数据库判断是否存在并返回满足条件的数据)

    1.根据python-参数化-(1),生成的数据号码 在数据库查询后判断是否存在若不存在返回手机号码,若存在返回该手机号码对应数据的信息,未封装成类或函数上代码 import pymysqlconn= ...