JAVA对象引用
发布日期:2021-05-16 10:23:38
浏览次数:11
分类:技术文章
本文共 1215 字,大约阅读时间需要 4 分钟。
根据《》介绍了JAVA对象的存储结构,但要如何判断一对象是否存活
引用计数算法:
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 优点:实现简单,效率高(在每个引用丢失的时候判断下计数器,为0就直接回收) 缺点:当对象A成员引用对象B,B对象引用A(循环引用),然后把AB都置空,可他们的计数器仍为1,造成内存泄漏。可达性分析算法
GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,下图对象object5, object6, object7虽然有互相判断,但它们到GC Roots是不可达的,所以它们将会判定为是可回收对象。那么那些点可以作为GC Roots呢?
全局的引用(常量和静态属性)和执行上下文(栈桢中的本地变量表) 1.虚拟机栈(栈桢中的本地变量表)中的引用的对象 2.方法区中的类静态属性引用的对象 3.方法区中的常量引用的对象 4.本地方法栈中JNI(Native方法)的引用的对象
JAVA对象4大引用
根据可达性分析算法,可以很轻松的判断对象是不是已死。但万物没有绝对性,对象也一样,有些对象死活可根据场景判断。
如下左图是对象引用等级的划分,下右图是在内存中的状态关系(软引用和弱引用内存结构是差不多的,因此只画出一种)从图中得知,JVM 在GC 的时候会判断引用情况
1.如 Object是被强引用着,则不回收
2. 如果通SoftReference对象引用着自己,则判断内存是不是 不足了,不足则清,
3.如果是 WeakReference 对象引用着,则直接回收,
4.如果是 PhantomReference,则直接被清(与ReferenceQueue后面会讲)
对象状态监视ReferenceQueue
Reference是JAVA中对引用表现类。对象拥有4种状态
- Active(当对象被创始时)
- Pending(如果对象有注册ReferenceQueue,当它确认为引用不可达的时候,引用为被改这状态,等待Reference-handler 线程入Queue)
- Enqueued(对象已被加入到ReferenceQueue)
- Inactive(当实例被移出ReferenceQueue中时,这个状态永远都不会再被改变 )
从上面的状态很容易得出ReferenceQueue,是对象的监听对象,只有加入此对象的才可以在回收时被通知。
Object.finalize也是通个ReferenceQueue,JAVA自动实现的,当你重写finalize,则会把此CLASS创建的对象,都扔进一个默认ReferenceQueue中,Finalizer类中有写
转载地址:https://blog.csdn.net/y3over/article/details/49096221 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月14日 02时51分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
设计模式——状态模式
2019-04-27
设计模式——工厂模式
2019-04-27
Unity中实现有限状态机FSM
2019-04-27
Unity中实现反弹
2019-04-27
U3D游戏开发框架(九)——事件序列
2019-04-27
Unity中解决“SetDestination“ can only be called on an active agent that has been placed on a NavMesh
2019-04-27
Unity中的刚体
2019-04-27
Unity中的坐标转换
2019-04-27
Unity中为什么不能对transform.position.x直接赋值?
2019-04-27
Unity中物体移动方法详解
2019-04-27
使用对象池优化性能
2019-04-27
Unity中的UI方案(基础版)
2019-04-27
Lua(一)——Lua介绍
2019-04-27
Lua(二)——环境安装
2019-04-27
Unity中父子物体的坑
2019-04-27
基础知识——进位制
2019-04-27
Lua(十二)——表
2019-04-27
Lua(十三)——模块与包
2019-04-27
Lua(四)——变量
2019-04-27
Lua(十四)——元表
2019-04-27