名称 过程 优缺点

Serial

进行垃圾收集时,必须暂停其他所有的工作进程,直到它收集结束。
是一个单线程收集器。

Stop the world。

新生代收集器。

手工设置新生代的大小:-Xmn

Eden与Survivor区的比例:-XX:SurvivorRatio

晋升老年代对象年龄:-XX:PretenureSizeThreshold

简单而高效(运行在Client默认新生代收集器)

对于Client模式下的虚拟机来说是一个很好的选择。

ParNew

就是Serial收集器的多线程版本。

新生代收集器。

使用-XX:UseConcMarkSweepGC选项来设置默认新生代收集器。

使用-XX:+UseParNewGC来强制使用它。

运行在Server模式下的虚拟机中首选的新生代收集器。

在多cpu环境下有较好的效果

Parallel

Scavenge

使用复制算法和并行多线程的收集器。

目标是:达到一个可控制的吞吐量。

新生代收集器。

经常被称为“吞吐量优先”收集器。

控制最大垃圾收集停顿时间:-XX:MaxGCPauseMillis

控制设置吞吐量大小:-XX:GCTimeRatio

自动调整新生代的大小:-XX:+UseAdaptiveSizePolicy

没有:良好响应速度,适合需要与用户交互的程序;

高吞吐量:高效利用CPU,适合在后台运算而不需要太多交互的任务。

自适应调节策略是Parallel Scavenge 与ParNew的一个重要区别。

Parallel

Old

是Parallel Scavenge的老年代版本,使用多线程和“标记-整理”算法。 在注意吞吐量以及CPU资源敏感的场合,都可以优先考虑Paralle Scavenge 加 Parallel Old收集器。
CMS

Concurrent Mark Sweep。

是一种以获取最短回收停顿时间为目标的收集器。

适合B/S的服务器端。
基于“标记-清除”算法。

整体过程分为4个步骤:初始标记、并发标记、重新标记和并发清除。

并发收集,低停顿。

3个明显的缺点:对CPU资源非常敏感;无法处理浮动垃圾;收集结束时会有大量空间碎片产生。

G1

当今收集器技术发展的最前沿成果之一。

是一款面向服务端应用的垃圾收集器。

如果不计算维护Rememberd Set的操作,G1运行大致分为:初始标记、并发标记、最终标记、筛选回收。

并行与并发;分代收集;空间整合;可预测的停顿(相对于CMS的另一大优势)

Java中基于HotSpot虚拟机的垃圾收集器的更多相关文章

  1. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  2. 《深入理解Java虚拟机》垃圾收集器

    说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态 ...

  3. Java虚拟机学习 - 垃圾收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  4. Java虚拟机学习 - 垃圾收集器 (4)

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  5. java虚拟机(六)--垃圾收集器和内存分配策略

    目前没有完美的收集器,不同的厂商.版本的虚拟机提供的垃圾收集器会有很大的差别,用户根据自己应用特点和要求组合出各个年代所使用 的收集器.基于jdk1.7Update14之后的虚拟机. HotSpot的 ...

  6. 深入理解Java虚拟机笔记——垃圾收集器与内存分配策略

    目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Sto ...

  7. 深入理解Java虚拟机:垃圾收集器与内存分配策略

    目录 3.2 对象已死吗 判断一个对象是否可被回收 引用类型 finalize() 回收方法区 3.3. 垃圾收集算法 1.Mark-Sweep(标记-清除)算法 2.Copying(复制)算法 3. ...

  8. 《深入理解Java虚拟机》——垃圾收集器与内存分配策略

    GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作: ...

  9. 深入理解java虚拟机之垃圾收集器

    Java一个重要的优势就是通过垃圾管理器GC (Garbage Collection)自动管理和回收内存,程序员无需通过调用方法来释放内存.也因此很好多的程序员可能会认为Java程序不会出现内存泄漏的 ...

随机推荐

  1. 【bzoj1609】[Usaco2008 Feb]Eating Together麻烦的聚餐 dp

    题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2批 ...

  2. Give NetScaler a “Tune-Up”

    Give NetScaler a “Tune-Up” https://www.citrix.com/blogs/2014/10/21/give-netscaler-a-tune-up/ To Opti ...

  3. java动态代理(JDK和CGLIB)笔记

    动态代理:为一堆interface或类的实现提供统一的执行通道,从含义上就像局域网电脑通过代理上网一样,走统一的通道,代理控制通道,自然可以在通道里加上自定义实现,例如像AOP切面,日志等. JDK的 ...

  4. axios携带cookie配置详解(axios+koa) 原

    话不多说,一个字,干! 前端配置如下: axios.defaults.withCredentials = true; //配置为tru openid: 'oJ0mVw4QrfS603gFa_uAFDA ...

  5. FileProvider记录下

    Mark下FileProvider,阿里巴巴Android开发手册有如下要求:[强制]应用间共享文件时,不要通过放宽文件系统权限的方式去实现,而应使用FileProvider. 知识点记录:1. An ...

  6. vector.clear()的内存泄露问题

    在使用vector的过程中,经常会遇到以下场景 vector<int> vec; ) { vec.push_back(); vec.push_back(); vec.push_back() ...

  7. Nginx安装(官网翻译)

    转载自:https://www.nginx.com/resources/wiki/start/topics/tutorials/install/ 二进制版本预包装的Linux和BSD大多数Linux发 ...

  8. Mybatis中传入List条件

    传入一个map的参数,map里有一个tenantIds的List,在xml里先判断这个List的size是否大于o,然后通过foreach 构造一个in后面括号里的元素,具体的xml如下: <i ...

  9. Chromedriver 的安装与配置

    首先是下载网址:https://sites.google.com/a/chromium.org/chromedriver/downloads(需要FQ,用Browser浏览器即可翻进,版本要和Chro ...

  10. ZooKeeper文档(二)

    ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...