码迷,mamicode.com
首页 > 其他好文 > 详细

虚拟机回收小结

时间:2018-06-05 13:30:17      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:luci   碎片   -o   虚拟   nbsp   拷贝   处理   引用计数器   哪些   

java区别去C、C++最大的特点就是垃圾回收

垃圾回收主要要点:

1、回收算法(回收哪些对象)

2、回收器(怎么回收)

查找垃圾对象

  1、引用计数

    每个对象都包含一个引用计数器,表示该对象被引用的次数,如果为0,则表示为游离对象,可以被回收;

    不能解决环形引用。

  2、根搜索

    根据一批根对象搜索引用的所有对象、以及整个引用链上的对象,未在引用链上的对象就是垃圾对象。

回收算法

    标记-回收:标记根对象(一批)能到达的对象,回收剩下的对象。(简单、磁盘碎片多)

    标记-复制:同标记-回收的标记一样,将堆划分为两块区域,当需要回收时,会将存活的对象拷贝到新的区域,然后回收所有旧的区域。(回收效率高、空间浪费)

    标记-整理:同标记-回收大致一样,只是在回收前会将存活的对象移动到内存的一端,然后回收剩下的垃圾数据。(节约空间、回收效率高)

回收器

  A、串行

    Serial(复制)、Serial-Old(标记-整理)

    默认client模式会使用,stop the world

  B、并发

    ParNew 是 Serial的多线程版本

    Parallel Scanvenge(复制算法)  和  Parallel Old

    Concurrent Mark Sweep:基于标记-清除算法、低停顿(3次标记(stop the world)、清除);CPU敏感、浮动垃圾无法处理、内存碎片需要FULL GC来帮助清理。

  C、G1 Garbage First 低停顿、高吞吐。会stop the world

    将内存换分为新生代、老年代后,在切分成不同的块(Region)

    新生代会暂停所有应用,然后将对象拷贝到存活区或者老年代,老年代也是通过拷贝的方式来完成清理,能有效的控制磁盘碎片。

    当磁盘空间不足时会降级到Serial回收方式。

    Humongous区,为大对象分配区域,一般为连续的内存块。

    新生代和老年代引用问题:CMS 通过 point out,通过一块内存记录所有老年代指向新生代的对象应用;G1已经分片切块,不需要记录所有的老年代引用,所以提出了point in 概念,只存取老年代到新生代某块的引用,可以降低扫描整个老年代的问题。

    G1 的mix GC 算法也是:标记-拷贝,在标记时同CMS一样也会Stop the world,清理阶段也会Stop the world。

    G1 新提出了三色标记算法:

      黑色:根对象或它的子对象已经被扫描

      灰色:本身被扫描、还没扫描完该对象的子对象

      白色:未被扫描的对象或垃圾对象

    

    

    

成都市高新区天府软件园C区C2-101号

虚拟机回收小结

标签:luci   碎片   -o   虚拟   nbsp   拷贝   处理   引用计数器   哪些   

原文地址:https://www.cnblogs.com/souyoulang/p/9139095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!