zoukankan      html  css  js  c++  java
  • JVM垃圾回收机制

    1、GC发生在JVM哪部分?

      GC是发生在堆内

    2、GC是什么?有几种GC?

      GC是分代收集算法,在堆内不同的区域有不同的策略

      有两种GC:Minor GC、Full GC

    • 次数上频繁收集Young区 Minor GC
    • 次数上较少收集Old区 Full GC
    • 基本不动perm区(永久区)

      

    3、它们的算法是什么?

      GC4大算法:

    • 引用计数法:只要有对象被引用,GC就不进行回收,这种方式已被淘汰(JVM的实现一般不采用这种方式,缺点:1)每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗;2)较难处理循环引用【A引用B,B引用A】)
    • 复制算法(copying):年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(copying):1)从根集合(GC Root)开始,通过Tracing从From中找到存活对象,拷贝到To中;2)From、To交换身份,下次内存分配从To开始;

    • 标记算法(Mark-Sweep):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
      • 标记(mark):从根集合开始扫描,对存活的对象进行标记。
      • 清除(Sweep):扫描整个内存空间,回收未被标记的对象,使用free-list记录可以区域

      • 优点:不需要额外的空间,在同一块内存空间操作
      • 缺点:两次扫描,耗时严重;会产生内存碎片

    • 标记压缩(Mark-Compact):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
      • 标记(Mark):与标记清除一样。
      • 压缩(Compact):再次扫描并往一端滑动存活对象(在整理压缩阶段,不在对标记的对象做回收,而是通过所有存活对象都向一端移动,然后直接清除边界以外的内存)
      • 优点:没有内存碎片
      • 缺点:需要移动对象的成本

    老年代Full GC有两种算法结合使用:标记-清除-压缩(Mark-Sweep-Compact)

    原理:

    1. Mark-Sweep和Mark-Compact结合
    2. 和Mark-Sweep一致,当进行多次GC后才Compact

    Full GC两种算法结合使用,先标记进行清除,清除多次并产生很多内存碎片之后,再做压缩

    优点:减少移动对象成本

  • 相关阅读:
    2008年具有高校自主选拔录取资格的考生名单 江苏版
    OpenGL ES 2.0 for iPhone Tutorial
    Mathematica三维点插值算法(高维插值,多维插值)
    Mathematica颜色系,你喜欢哪一个?
    Khronos EGL and Apple EAGL
    ssh 免密码登陆配置
    2008年高考招生:北京大学自主选拔录取资格考生名单
    PlotLegends 应用
    Mathematica 如何更改文档的样式
    您为何而工作?
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/12639937.html
Copyright © 2011-2022 走看看