zoukankan      html  css  js  c++  java
  • 深入理解JVM-对象已死吗

      在堆中存放着Java世界中几乎所有的对象的实例,垃圾收集器在对堆进行垃圾回收前,第一件事情就是要确定这些对象中还有那些是"存活"着,那些已经死去(即不能再被任何途径使用的对象)。

      引用计数算法(Reference Counting)

        定义:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

        优点:实现简单,判断效率高

        应用案例:微软公司的COM(Component Objcect Model)技术、使用ActionScript 3的FlashPlayer、Python语言和在游戏脚本领域被广泛应用的Squirrel中都使用了引用计数算法进行内存管理

        但是,至少主流的Java虚拟机里面没有选用引用计数法来管理内存,最主要原因是它很难解决对象之间相互引用的问题。

    public class ReferenceCounting {
    public Object instance = null;
    private static final int _1MB = 1024 * 1024;
    /**
    * 占用内存,以便在GC中观察
    */
    private byte[] bigSize = new byte[2 * _1MB];

    /**
    * -XX:+PrintGCDetails 输出GC的详细日志
    * @param args
    */
    public static void main(String[] args) {
    ReferenceCounting objA = new ReferenceCounting();
    ReferenceCounting objB = new ReferenceCounting();
    objA.instance = objB;
    objB.instance = objA;
    objA = null;
    objB = null;
    // 设置GC
    System.gc();
    }
    }

        可达性分析算法(Reachability Analysis)

          定义:通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为"引用链",当一个对象到GC Roots没有任何引用链相连时,则证明此对象不可用。

        

          优点:解决引用计数法无法解决的对象相互调用问题

          缺点:寻找GC Roots   ->枚举根节点

          应用案例:Java、C#、Lisp

          在Java语言中,可作为GC Roots的对象包括下面几种:

            虚拟机栈(栈帧中的本地变量表)中引用的对象

            方法区中类静态属性引用的对象

            方法区中常量引用的对象

            本地方法栈(即Native方法)引用的对象

         枚举根节点

          项目中的GC Roots动辄上百兆,要逐个检查里面的引用,势必消耗很多时间

          在分析阶段 ->要保证“一致性” 即在整个分析期间,整个执行系统看起来就像被冻住在某个时间点上(Stop The World),不可以出现分析过程中对象引用关系还在不断变化的情况,该点不满足的话分析结果准确性就无法得到保证。

          OopMap:待续

          安全点:待续

          安全区域:待续

  • 相关阅读:
    js中for循环点击事件(闭包)
    浏览器缩放,会导致布局打乱,解决方法?/一缩小网页布局就打乱了怎么办?
    新手如何理解JS面向对象开发?
    PHP超全局变量$_SERVER
    个人网站(sysoft.net.cn)被k,公司名都搜索不出来了,怎么办?
    松软带你学开发-SQLSELECTDISTINCT语句
    Tomcat内存监控及调优
    JAVA概述 也许你会豁然开朗
    Java programming problems
    Summary of Java basics review data
  • 原文地址:https://www.cnblogs.com/huan30/p/11809370.html
Copyright © 2011-2022 走看看