zoukankan      html  css  js  c++  java
  • JVM系列6-GC算法

    一、如何判定垃圾?

    1.1.Reference Count引用计数法:引用计数count=0的对象

    1.2.Root Seaching根可达法:从root开始不可达的对象

      常见的可做GC roots的实例有:(只要从某个地方出发能发现存活对象,它们就是GC Root)。源码中枚举一共有10种。

    1. JVM Stack: 虚拟机栈(栈桢中的本地变量表)中引用的变量
    2. static references in method area :方法区中的类静态属性引用的对象
    3. run-time constant pool: 运行时常量池(方法区中常量引用的对象)
    4. native method stack:  本地方法栈中JNI引用对象

    二、常用GC算法

    2.1 3种GC算法

    序号 名称 实现 优点 缺点
    1 Mark-Swap标记清除 2遍扫描:1.标记可回收,2.清除。 算法简单,存活对象多时效率高。 效率低,容易产生碎片。
    2 Copying 复制算法 内存对半分,只扫描一次:把有引用的对象复制到一半,另一半清空

    只扫描一次,效率高;

    存活对象少时效率高

    无碎片

    空间浪费

    移动复制对象,需要调整对象引用;

    3 Mark-Compact标记整理(压缩) 2遍扫描:1.找到不可回收,2.挪到一边去 无碎片

    扫描2次,效率低,

    需要移动对象

    2.2 分代模型

    新生代(eden+S0+S1):大量死去,少量存活,使用Copying。

    老年代(old):存活率高,回收较少,使用MS、MC。

    注:

    • 1.JVM使用哪种GC算法,得看GC使用哪种垃圾回收器。
    • 2.除ZGC SD不分代, G1是逻辑分代,物理不分,其他是逻辑+物理都分代。

    三、GC概念

     如上图,默认:

    1.新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )

    2.Edem : s0(from) : s1(to) = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 )

  • 相关阅读:
    xmlHttp.js.rar 没啥说的。。各浏览器都支持的纯ajax!
    实用正则表达式(实用篇) [转]
    Jquery的好书[pdf,新书]
    xml 中的冒号 读取问题的解决
    给一个DataTable 添加一列,来保存计算出来的结果。。
    悟透JavaScript(转) 超级精华
    当前标识符读写权限
    ie浏览器开机自动启动且全屏
    SQL Server ErrorLog 错误日志(如果数据库所占空间变大)
    利用Git hub创建博客
  • 原文地址:https://www.cnblogs.com/dennyzhangdd/p/13311353.html
Copyright © 2011-2022 走看看