zoukankan      html  css  js  c++  java
  • JVM垃圾收集器介绍

      垃圾回收算法是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堆(包括新生代、老年代)划分为多个大小固定独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。

  • 相关阅读:
    跨域资源共享 CORS 详解
    Vue.js 与 Laravel 分离
    Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
    移动端web及app设计尺寸
    另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
    vue2.0 keep-alive最佳实践
    教你用Cordova打包Vue项目
    oracle_数据处理
    oracle_集合函数
    oaracel 函数_行转列
  • 原文地址:https://www.cnblogs.com/parryyang/p/5748793.html
Copyright © 2011-2022 走看看