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

    一、确定垃圾对象的方法
    1、计数法。缺点:无法解决循环引用的问题。
    2、可达性分析算法。java采用的是这种算法。根节点:线程栈的中变量,静态变量和本地方法栈(native修饰的方法)的中变量。

    二、垃圾回收算法
    1、Mark-sweep(标记清除),只是吧垃圾处理,会产生碎片,效率高。


    2、Coping(复制算法),吧内存分成2份,清理后,吧可用的对象复制到另一半内存中,内存利用率低。


    3、Mark-compact(标记整理),把垃圾清理以后,吧内存重新整理,效率低,没有碎片。



    三、常用的垃圾收集器 共10种
    分代模型:java8及之前的版本,有6种,其中1、2、3用于年轻代,4、5、6用于老年代
    1、ParNew    Parallel Scavenge的优化版本
    2、Serial 单线程,新生代采用复制算法
    3、Parallel Scavenge 多线程的Serial,新生代采用复制算法,jdk1.8默认收集器
    4、CMS
    5、Serial Old 单线程,老年代采用标记整理算法。
    6、Parallel Old 多线程的Serial Old,老年代采用标记整理算法,jdk1.8默认收集器

     

     

     



    分区模型:java9及以后共4种
    1、G1
    2、ZGC
    3、Epsilon
    4、G1的增强版



    三、java虚拟机分为三部分


    1、类装载系统
    2、执行引擎
    3、运行时数据区(内存模型)
    a、堆(垃圾回收优化的地方)


    堆内存分为:
    Eden(伊甸园区)(8/10的空间) ,可达性分析算法,找出非垃圾,剩下的就是垃圾,这儿产生的垃圾回收叫YGC;
    未被回收的对象,被复制到Servivor区。用复制算法。
    Survivor(幸存区)(共2个,每个占1/10的空间,共占2/10的空间),大对象和年龄超过15的存活对象,被复制到老年代。
    Old(老年区)占2/3的空间,老年代的垃圾收集算法,标记整理或标记清除(不同的垃圾收集器,算法不同)。
    b、线程栈
    c、本地方法栈
    d、方法区(元空间)
    e、程序计数器
    其中堆和方法区是线程共享数据,其余三种是线程私有的。

  • 相关阅读:
    Apache 安装 静态编译 动态编译
    Vlan 间路由的方法
    一个无限加载瀑布流jquery实现
    用ajax查询天气
    一个简单移动页面ionic打包成app
    时隔一年再读到the star
    轮播图原生js实现和jquery实现和js面向对象方式实现
    js实现一个简单计算器
    纯css3图片旋转展示
    自定义按钮~自适应布局~常见bug
  • 原文地址:https://www.cnblogs.com/rana4504/p/14595090.html
Copyright © 2011-2022 走看看