垃圾回收算法是GC的方法论,垃圾收集器就是内存回收的具体实现。

  一、Serial 收集器

    单线程收集器,在进行GC时,必须暂停所有的工作线程(Stop The World),直到GC收集结束。

    缺点:“Stop The World”给用户带来了不好的体验

    优点:简单而高效,Serial没有其他线程交互的开销,专心做GC可以获得最高的单线程收集效率。

    适用于Client模式下的虚拟机是个很好的选择。

  二、ParNew 收集器

    ParNew收集器就是Serial收集器的多线程版本,适用于Service模式下的新生代收集器。

     ParNew在单核CPU环境中绝对不会有比Serial收集器更好的效果。但是多核CPU,GC效果还是不错的。  

  三、Parallel Scavenge 收集器

    Parallel Scavenge 收集器也是一个新生代收集器,使用复制算法,同时也是一个并行的多线程收集器。

    Parallel Scavenge 收集器的目标则是达到一个可控制的吞吐量。

    注:吞吐量 =用户运行代码时间 / (运行代码时间 + 垃圾收集时间)

    吞吐量高则可以最高效率的利用CPU时间,尽快的完成程序的运算任务,主要适用于后台运算二不需要太多的交互任务。

  四、Serial Old 收集器

    Serial Old 收集器是Serial收集器的老年代版本,单线程收集器,使用“标记-整理”算法。

  五、Parallel Old 收集器

    Parallel Old 收集器是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

  六、CMS 收集器

    CMS(Concurrent Mark Sweep)收集器是一种以获取最短停顿时间为目标的收集器。目前很大一部分Java应用程序都集中是在互联网或B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短,给用户最好的体验。整个过程分为四步:

  • 初始标记(CMS initial mark):标记一下GC Root能直接关联到的对象,速度很快;
  • 并发标记(CMS concurrent mark):进行GC Root Tracing的过程
  • 重新标记(CMS remark):修正并发标记期间,因用户程序继续运行导致标记产生变动的那一部分对象的标记记录;
  • 并发清除(CMS concurrent sweep)  

  其中初始标记、重新标记还是需要“Stop The World”.CMS收集器的内存回收过程与用户线程并发执行。

  优点是并发收集、低停顿

  缺点:1)CMS收集器对CPU资源非常敏感;在并发阶段虽然不会导致用户线程停顿,但是会因为占用了一份线程而导致应用程序变慢,总吞吐量降低。

     2)CMS并发清除阶段用户线程还在运行,伴随线程运行产生的新的垃圾出现在标记过程以后,CMS无法在本次收集中处理掉它们,只能留到下次GC。这一部分垃圾就是“浮动垃圾”。

     3)CMS是一款“标记-清除”算法实现的收集器,收集过程会产生大量的空间碎片。空间碎片过多,将会给较大对象无法分配内存,从而触发一次 Full GC.

  七、G1 收集器

    G1(Garbage First)收集器相比于CMS改进有:

    (1)G1基于“标记-整理”算法实现收集器,即它不会产生大量的空间碎片,这对于长时间的应用系统非常重要。

    (2)可以非常准确的控制停顿,既能让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不超过N毫秒。G1将Java堆(包括新生代、老年代)划分为多个大小固定独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。

JVM垃圾收集器介绍的更多相关文章

  1. 7种JVM垃圾收集器特点,优劣势、及使用场景

    今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 一.常见的垃圾收集器有3类 1.新生代的收集器包括 Serial PraNew Pa ...

  2. 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial O ...

  3. 7种 JVM 垃圾收集器特点、优劣势及使用场景(多图)

    7种 JVM 垃圾收集器特点.优劣势及使用场景(多图)  mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达! 一.常见垃 ...

  4. JVM调优:HotSpot JVM垃圾收集器

    HotSpot JVM垃圾收集器 - Snooper - 博客园https://www.cnblogs.com/snooper/p/8718478.html

  5. JVM垃圾收集器-Parallel Scavenge收集器

    今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的 ...

  6. 【006】【JVM——垃圾收集器总结】

     Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...

  7. 第五章 JVM垃圾收集器(1)

    说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...

  8. 第六章 JVM垃圾收集器(2)

    上一章记录了几种常见的垃圾收集器,见<第五章 JVM垃圾收集器(1)> 1.G1 说明: 从上图来看,G1与CMS相比,仅在最后的"筛选回收"部分不同(CMS是并发清除 ...

  9. JVM垃圾收集器(1)

    此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法& ...

随机推荐

  1. leetcode-Combinations 复习复习排列组合

    Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2 ...

  2. 计算2的N次方&&计算e

    2的N次方 注意:这里在处理的时候并没有用循环来处理,而是用移位的做法.    n<<4  就是 n*2^4    ,所以在本例中只需要写 1<<time  (time是要求的 ...

  3. BigDecimal.ROUND_HALF_XXX的各种用法

    在银行.帐户.计费等领域,BigDecimal提供了精确的数值计算.其中8种舍入方式值得掌握. 1.ROUND_UP 舍入远离零的舍入模式. 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数 ...

  4. 调用newtonsoft.json反序列出错

    调用newtonsoft.json反序列出错: Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current J ...

  5. parentNode的兼容性问题

    IE9下获取对象层次中的父对象,9以上获取文档层次中的父对象 <table><tr><p><td id="haha">haha< ...

  6. Mysql数据库之Binlog日志使用总结

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...

  7. 实战SQL注入

    SQL注入是啥就不解释了.下面演示一个SQL注入的例子 SQL注入点可以自己尝试或用SQL注入漏洞扫描工具去寻找,这里用大名鼎鼎的sqlmap演示一个现成的案例. 1.漏洞试探 root@kali:~ ...

  8. PAT 1005. 继续(3n+1)猜想 (25) JAVA

    当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候,我们需要计算3.5.8.4.2.1,则当我们对n=5.8.4.2进行验证的时候,就可以直接 ...

  9. removeNode is not defined removeNode is not a function

    在javascript操作dom树的时候可能会经常遇到增加,删除节点的事情,比如一个输入框后一个增加按钮,一个删除按钮,点击增加就增加 个输入框,点击删除就删除对应的输入框.在一些js框架,如Prot ...

  10. Alwayson--SYS.dm_hadr_instance_node_map 返回0行

    下面是MSDN关于SYS.dm_hadr_instance_node_map 的解释,我就不在翻译了 For every instance of SQL Server that hosts an av ...