本文主要是介绍Java判断对象是否存活,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、引用计数算法
在对象中添加引用计数器,每当有地方引用此对象时,计数器+1;当引用失效是-1;当计数器为0是对象就不可能再被引用。
优点:引用计数算法实现简单,判断效率高。注:在java虚拟机里面没有选用引用计数算法来管理内存的,主要是因为它无法解决对象之间的相互循环引用问题。
例如:Object obj = null;
public void t(){
Test t1 = new Test();
Test t2 = new Test();
t1 .obj = t2;
t2 .obj = t1;
}
2、可达性分析算法
基本思路为通过称为“GC Roots”的对象作为起始点,从这些起始点向下搜索,搜索所走过的路径(引用链),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。如图:
Java中,可作为GC Roots的对象包括:
①虚拟机栈中引用对象。
②方法区中静态属性引用的对象
③方法区中常量引用的对象
④本地方法栈中JNI引用的对象。
3、对象引用
①强引用:如:Object obj = new Object();只要强引用还在,垃圾收集器永远不会回收掉被引用的对象。
②软引用:是用来描述一些还有用但并非必须的对象。软引用关联的对象在系统将要发生内存溢出之前,将会把这些对象列进回收范围进行二次回收。如果回收后还没有足够的内存,才会抛出内存溢出异常。
③弱引用:用来描述非必需的对象,它的强度比软引用弱些,被弱引用关联的对象只能存活到下次垃圾收集之前。
④虚引用:也被称为幽灵引用或幻影引用,它是最弱的引用关系。一个对象是否有虚引用存在,完全不会对其生成时间构成影响,也无法通过虚拟引用来获取一个对象实例。
这篇关于Java判断对象是否存活的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!