判定对象是否存活的算法----GC_ROOT算法

要应用GC_ROOT算法,判定某个对象是否会被回收,关键是要确定root。

说到GC roots(GC根),在JAVA语言中,可以当做GC roots的对象有以下几种:

         1、虚拟机栈中的引用的对象。

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

         3、方法区中的常量引用的对象。

         4、本地方法栈中JNI的引用的对象。

第一和第四种都是指的方法的本地变量表,第二种表达的意思比较清晰,第三种主要指的是声明为final的常量值。

方法区中存放的是类信息(class文件中的信息)。

例子:下述的Something和Apple都可以作为root对象。分别对应上述的第2种和第3种。

public AClass{

  public static Something;
  public static final Apple;

   ‘‘‘‘‘‘

}

  那么,方法的本地变量表,对应代码中的哪部分呢?

待续---------

参考资料:

http://www.cnblogs.com/zuoxiaolong/p/jvm3.html

判定对象是否存活的算法----GC_ROOT算法

时间: 2024-10-30 05:48:58

判定对象是否存活的算法----GC_ROOT算法的相关文章

Java虚拟机对象存活标记及垃圾收集算法解析

一.对象存活标记 1. 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器就减1:任何时刻计数器都为0的对象就是不可能再被使用的. 引用计数算法(Reference Counting)的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软的COM(Component Object Model)技术.使用ActionScript 3的FlashPlayer.Python语言以及在游戏脚本领域中被广泛应用

深入理解Java虚拟机笔记---判断对象是否存活

堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还"存活"着,哪些对象已经"死去"(即不可能再被任何途径使用的对象) 1.引用计数算法 很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1:当引用失效时,计数器减1:任何时刻计数器都为0的对象就是不可能再被使用的. 引用计数算法(Reference Counting)的实现简单,判断效率也很高,在大部分情况下它

JVM【第十回】:【判断对象已死之引用计数算法】

很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不可能再被使用.很多应届生和一些有多年工作经验的开发人员,他们对于这个问题给予的都是这个答案. 客观地说,引用计数算法的实现建安,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软COM(Component Object Model)技术.使用ActionScript3的FlashPlayer

JVM:垃圾收集器与对象的"存活"问题

垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存活"状态 引用计数法:每当有一个地方引用对象时,计数器加1:当引用值失效,减1:任何时刻计数器为0,则表示对象不可能再被使用.缺点就是很难解决对象之间相互循环引用的问题.(如a.instance=b;b.instance=a) 可达性分析算法:这个算法的思想是通过一系列成为“GC Roots”的对象

JVM-内存回收算法--复制算法

复制算法,它将堆上的内存分为两个大小相等的区域,一个是空闲区域,一个是活动区域.在程序运行中,实际使用的是活动区域,也就是有50%的空间被浪费掉. 复制算法的实现过程:1.找出活动空间中所有存活的对象.2.将这些存活的对象复制到空闲区域.3.将之前的活动空间清空,然后,就变为空闲空间了,而存活对象所在的区域,则变为活动空间了. 复制算法的优点,就是,内存回收完毕后,有一大片连续的可用空间.缺点,当然是,在程序运行期间,有50%的内存空间被放着,只有在发生内存回收的时候,GC才会借用空闲区域来实现

数据挖掘十大算法--Apriori算法

一.Apriori 算法概述 Apriori 算法是一种最有影响力的挖掘布尔关联规则的频繁项集的 算法,它是由Rakesh Agrawal 和RamakrishnanSkrikant 提出的.它使用一种称作逐层搜索的迭代方法,k- 项集用于探索(k+1)- 项集.首先,找出频繁 1- 项集的集合.该集合记作L1.L1 用于找频繁2- 项集的集合 L2,而L2 用于找L2,如此下去,直到不能找到 k- 项集.每找一个 Lk 需要一次数据库扫描.为提高频繁项集逐层产生的效率,一种称作Apriori

【算法】 算法和数据结构绪论

算法和算法分析 先说点无关紧要的.初中的时候,知道有CS这门专门的学科存在的时候最开始的概念中CS就是等同于算法.这有可能是因为当时的前桌是后来一代CS传奇WJMZBMR..因为当时看起来十分高端,再加上后来努力的方向完全和CS不搭边,所以对于算法二字一直心中抱着一种敬畏之情,觉得是整个CS中最干的干货部分.后来决定入这行之后,我的领导对我说算法这东西虽然很高大上,但是在日常工作中我们用的并不多(我们部门主要做运维和DevOps,确实对这方面的需求不大)所以也就一直耽搁着.但是随着深入,以及在网

算法概念--算法汇总大全

算法 1)算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. 2)<algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较.交换.查找.遍历操作.复制.修改.反转.排序.合并等等. 3)<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作. 4)<functional>中则定义了一些模板类,用以声明函数对象.

机器学习---算法---k-means算法

转自:https://blog.csdn.net/zhihua_oba/article/details/73832614 k-means算法详解主要内容 k-means算法简介k-means算法详解k-means算法优缺点分析k-means算法改进算法k-means++1.k-means算法简介 ??k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇.聚类与分类最大的区别在于,聚类过程为无监督过程,即待