java对象存活判断

转载 2018年04月15日 19:37:25

java对象存活判断


1.判断对象是否存活的算法

    1.1引用计数算法

            为每一个对象设置一个对象引用计算器,每当有地方引用到该对象的时候,该对象的引用计算器就自动的加一,如果每当引用失效的时候,该对象的引用计算器就会相应的减一。任何时刻当该对象的引用计数器为0的时候就说明了该对象不再被引用。

     1.1.1引用计算算法的缺点

             当objA和objB相互引用的时候,他们的引用计数器都是1,他们相互引用着对方,但是实际上这两个对象已经不能被访问,于是引用计数器无法通知系统区回收他们。

  1. objA.instance = objB;  
  2. objB.instance = objA;  
objA.instance = objB; 
objB.instance = objA;

     1.2可达性分析算法

              这个算法的基本思想是通过一个根节点RootGC作为一个起始点,从这个节点往下搜索,搜索所走过的路径就是引用链(Reference Chain),当一个对象到RootGC都没有引用链的时候(图论说法就是当一个GCRoot节点到该对象不可达),则证明此对象是不可用的。

    1.2.1 java中可以用作GC Root的对象

           1.虚拟机栈中引用的对象
           2.方法区中静态属性引用的对象
           3.方法区中常量引用的对象
           4.本地方法栈JNI(即一般说的Native方法)引用的对象

    1.2.2 gc自我拯救  

           当通过系统分析发现,RootGC节点到该对象不可达的时候,是否对象就会被回收的呢,答案不是一定的,这时候他暂时时处于缓刑阶段,至少要经过两次的标记的过程,才真正宣告一个对象的死亡,第一次是当系统检测到该对象到RootGC节点不可达的时候,进行第一次的标记,然后系统就会检查该对象有没有覆盖finalize方法,如果有的话便会执行finalize方法,如果该对象在finalize方法中与任何一个对象进行关联的话便可以不会被回收。

深入Javascript Object(对象)视频教程

掌握Object的静态属性和静态方法, 原型属性和原型方法. 理解相关面向对象的一些使用方法等等. 为学习面向对象做一定的基础.
  • 2017年02月26日 13:00

判断Java对象是否存活的方法

0. 前言本文参考于《深入理解Java虚拟机:JVM高级特性与最佳实践》堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还“存活”着,哪些对象已经...
  • TimHeath
  • TimHeath
  • 2016-11-06 16:59:17
  • 1600

对象存活判定算法-判断对象是否活着

对象被JVM收集的前提是该对象已经被JVM标记为了“死去”的对象。判断对象是否活着的算法引用计数法引用计数法的基本概念是:给对象添加一个引用计数器,每当有一个地方引用了该对象,计数器就加1;当引用失效...
  • ZW_KK
  • ZW_KK
  • 2017-03-28 08:24:06
  • 325

java虚拟机中如何判断对象是否存活

程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的。 Java...
  • j2370530
  • j2370530
  • 2017-03-10 00:21:44
  • 245

JVM中判断对象是否存活的方法

Java中几乎所有的对象实例都存放在堆中,在垃圾收集器对堆内存进行回收前,第一件事情就是要确定哪些对象还“存活”,哪些对象已经“死去”(即不可能再通过任何途径被使用)。引用计数算法  首先需要声明,至...
  • xiangwanpeng
  • xiangwanpeng
  • 2016-10-24 15:51:16
  • 1113

GC判断对象是否存活

判断对象是否已经死亡回收: 1.引用计数算法: 给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。//-X...
  • MrJavaweb
  • MrJavaweb
  • 2017-07-20 10:11:26
  • 336

Java垃圾回收(一)对象存活状态判断---深入理解Java虚拟机

程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较...
  • JokerKon
  • JokerKon
  • 2016-07-25 23:00:53
  • 1846

垃圾回收器——如何判断对象是否存活

垃圾回收器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”[即已经不可能再被使用的对象]引用计数算法给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就+...
  • TyroneRenekton
  • TyroneRenekton
  • 2017-03-01 18:13:21
  • 1847

JVM如何判断对象"死"和"活"

堆中存放着几乎所有的
  • yyywyr
  • yyywyr
  • 2014-09-15 23:55:40
  • 2135

判断Java中对象存活的算法以及Java中存在的几种引用

判断Java中对象存活的算法:(1)引用计数算法:给对象中添加一个引用计数器,每当一个地方引用它的时候就将计数器加1,当引用失效的时候就将计数器减一;任何时刻计数器为0的对象都是不可能在被使用的。这中...
  • hutongling
  • hutongling
  • 2017-04-01 11:23:43
  • 592
收藏助手
不良信息举报
您举报文章:java对象存活判断
举报原因:
原因补充:

(最多只允许输入30个字)