博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象引用与回收判断
阅读量:6978 次
发布时间:2019-06-27

本文共 1437 字,大约阅读时间需要 4 分钟。

hot3.png

1、引用计数算法:

         给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。Java语言并没有选用引用计数器算法来管理内存,其中最主要的原因就是它很难解决对象之间相互循环引用的问题。

2、可达性分析算法

Java通过一系列的名为“GC Root”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说就是从GC Roots到这个对象不可达)时,则证明此对象是不可引用的,所以它们将会被判定为可回收对象。在Java语言中可作为GC Roots的对象包括下面几种:

虚拟机栈(栈帧中的本地变量表)中的引用的对象;
1)、 方法区中的类静态属性引用的对象;
2)、运行时常量池中的对象引用;
3)、方法区中的常量引用的对象;
4)、本地方法栈中JNI(即一般所说的native方法)引用的对象。

对象引用:JDK1.2之后,Java将引用分为四种,这四种引用强度依次逐渐减弱

强引用(Strong Reference):显示引用(例如:Object o = new Obje();),只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象;
软引用(Soft Reference):有用但非必须的引用,当内存不足时, 此类引用的对象会被回收,jdk1.2之后提供了SoftReference类来实现;
弱引用(Weak Reference):非必须的引用,进行垃圾回收时,此类对象会被回收,jdk1.2之后提供了WeakReference类来实现;
虚引用(Plantom Reference):虚引用不对对象生存时间构成影响,无法通过此类引用获取对象实例,使用目的是对象被回收时收到一个系统通知,jdk1.2之后提供了PlantomReference类来实现。

3、生存还是死亡

要宣告一个对象死亡,至少要经历两次标记过程:

1)、如果可达性分析后没有与GC Roots相连接的引用链,会被第一次标记并进行一次筛选(筛选的条件是此对象有否有必要执行finalize()方法,当对象覆盖了finalize()方法并且该对象的finalize()方法被虚拟机调用过, 才有必要执行该对象的finalize()方法,任何对象的finalize()方法只会被被虚拟机调用一次。如果有必要执行该对象的finalize()方法,该对象将会被放置在F-Queue队列中,稍后由低优先级的Finalize线程去执行该对象的finalize()方法 ,finalize()方法是对象最后自我拯救的机会);
2)、之后GC将对F-Queue队列中的对象进行第二次小规模的标记,确定最终是否回收该对象。

4、回收方法区

方法区的垃圾回收性价比不高,主要回收废弃的常量和无用的类,回收常量与回收堆中的对象类似,回收无用的类需要类满足三个条件,而是否对类进行回收,虚拟机提供了-Xnoclassgc参数进行控制。

1)、该类所有的实例都已经被回收;
2)、加载该类的ClassLoader已经被回收,
3)、该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。

转载于:https://my.oschina.net/dslcode/blog/2999098

你可能感兴趣的文章
理解并取证:动态路由协议RIP的工作原理
查看>>
演示:思科路由器到路由器的IOS镜像管理
查看>>
Lync 小技巧-33-BlueStacks安卓模拟器 For Lync 2013
查看>>
谈谈VIP漂移那点破事
查看>>
ACM HDU 1020Encoding
查看>>
【吼吼睡cocos2d学习笔记】第二章 - 开始学习
查看>>
[AWDwR4] No JQuery call matches [:html, "#cart"]
查看>>
[LeetCode] Maximal Rectangle
查看>>
java 开发环境变量设置
查看>>
为什么要去做数据标准这件事
查看>>
Unicode 1.1.0 (June, 1993)
查看>>
字符串(strlen)
查看>>
利用统计进行中文分词与词性分析
查看>>
db2 import/export tool
查看>>
按列存储的二维数组模版
查看>>
C Data types
查看>>
JS获取本机MAC地址信息
查看>>
戏说 ofbiz 权限组 角色 控制
查看>>
uva11462Age Sort
查看>>
Json 和 Jsonlib 的使用
查看>>