(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. 本地的个人web网站上线的全过程,供大家参考(PHP,简易的LAMP环境搭建)

    一 : 你需要准备的东西 1.本地能访问的网站,最好是改过host文件和apache的httpd-vhosts.conf,配置过本地域名的那种(减少传到线上出现的问题,文件路径不对呀啥的) 2.一个云 ...

  2. Python, import, module

    When the interpreter reads a python script file, it does two things: (1) set some special variable. ...

  3. git配置:本地仓库提交到远程仓库

    前提:1.已安装git 一:创建公钥,一台机子匹配一个公钥 桌面右键选择 Git Bash Here 打开命令行输入:ssh-keygen -t rsa -C "xxx@xxx.com&qu ...

  4. C lang: Compound literal

    Xx_Introduction C99 stantard. Upate array and struct a compound literal. Literal is date type value. ...

  5. C lang:Array_Multidimensional arrays

    #include<stdio.h> #include<windows.h> #define YEARS 5 #define MONTHS 12 void color(short ...

  6. OPENGL 坐标轴转换

    坐标轴 平移 旋转 缩放 重置坐标轴 矩阵操作 示例 1.坐标轴  OpenGL 使用的右手坐标系,从正面看原点,逆时针旋转被认为是正旋转. x轴:从左到右 y轴:从底部向上 z轴:从屏幕背向朝向前方 ...

  7. 数组类的创建——DynamicArray.h

    完成DynamicArray类的具体实现 DynamicArray设计要点——类模板 动态确定内部数组空间的大小 实现函数返回数组长度 拷贝构造和赋值操作 DynamicArray类的声明 templ ...

  8. ios 免费抓包工具Stream

    ios 免费抓包工具Streamhttps://www.52pojie.cn/thread-1002406-1-1.html

  9. C语言程序设计100例之(16):巧解算式

    例16  巧解算式 问题描述 在1.2.3.4.5.6.7.8.9.10个数中间加上加号或减号,使得到的表达式的值为自然数N,如果中间没有符号,则认为前后为一个数,如1 2 3认为是一百二十三(123 ...

  10. zabbix通过agent监控linux主机

    前言: 前几篇博客分别介绍了通过snmp来进行监控linux主机与windows主机,本篇介绍通过agent客户端来进行系统监控. 环境: server:192.168.249.142 client: ...