关于java中对象的循环引用问题
例子:
public void buidDog()
{
Dog newDog = new Dog();
Tail newTail = new Tail();
newDog.tail = newTail;
newTail.dog = newDog;
}
在这里,newTail中拿着对newDog的引用,newDog中拿着对newTail的引用。如果newDog要被回收,前提是newTail被先回收,这样才能释放对newDog的引用。但是反回过来,newTail要被回收的前提是newDog要被先回收。当buildDog函数退出后,看起来垃圾回收管理似乎就始终无法回收这两个实际已经不再需要的对象。
垃圾回收机制究竟能否解决循环引用这一困境,带着这个疑问找了一些资料,找到了一个比较满意的解释。在《Java Platform Performance: Strategies and Tactics》这本书的附录A中有一处说明,
这段话可以简单的理解就是强引用并不能保证对象不被回收。垃圾回收机制除了检查对象是否被引用外,还要看对象是否被至少一个GC roots(栈或静态存储区)对象直接或者间接引用。GC roots对象包括以下一些内容:
1 每个线程当前的函数调用栈,从栈顶到栈底的每个函数里的局部变量。
2 静态的变量
3 被jni(JAVA本地调用)中引用到的变量。
所以,上面例子中两个循环引用的对象,虽然都存在一个强引用,但是不被任何GC root对象直接或者间接引用到,垃圾回收机制能够发现这个问题。
另外,为了验证这一点,特意翻看了一下android源码中GC管理这一块的代码。在MarkSweep.c这文件中,有一个void dvmHeapMarkRootSet()函数,这个函数对于GC root对象,有一些详细的说明,有兴趣的可以细看一下。
所以,java对于循环引用有一套自己的解决方案。但是话又说回来,一般实际编码中出现的循环引用不会是上面那个例子那样明显,一般都是多个对象复杂的引用导致的循环,这个时候,如果一个对象的生命周期很长,就会导致多个对象都释放不了,所以还是要特别留意对象之间的引用关系。
相关推荐
垃圾回收的仿真 近几十年来,由于人类的滥砍、滥伐,无情的破坏我们的大自然,地球上能用的资产和能源逐渐地减少,环保团体发现如果我们不再注重保护环境,终有一天我们会失去地球这个美好的家园。所以近年来,环保...
今天来谈谈C#的GC,也就是垃圾回收机制,非常的受教,总结如下 首先:谈谈托管,什么叫托管,我的理解就是托付C#运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般用new,内存是...
垃圾回收技术示例垃圾回收技术示例垃圾回收技术示例
详细的java垃圾回收机制的讲解以及java jvm对垃圾处理的应对策略。
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再...
四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数
垃圾回收分类查询平台微信小程序端
Azul Systems CTO & co-Founder, Gil Tene 在SpringOne2GX 2012大会上发表的演讲资料,全面深入地阐述Java垃圾回收的四种机制。并介绍了当今世界上性能与吞吐量最高的JVM产品Zing JVM。 如果希望深入了解Java的垃圾...
一, 垃圾回收机制 在系统运行过程中会产生一些无用的对象,这些对象一直占用内存,不清理这些无用的对象可能会导致内存耗尽,所有垃圾回收机制的是内存. 垃圾收集的原理和概念 对于对象实例收集.主要有两种基本算法,...
垃圾回收分类系统、垃圾回收高保真原型设计、垃圾分类后台管理系统、垃圾回收分类平台、垃圾回收分类、智慧管理系统、订单管理、财务管理、系统管理、库存管理、设备管理、Axure高保真web端后台管理系统 Axure原型...
java+垃圾回收
The Garbage Collection Cookbook 垃圾回收算法手册
java查看哪个进程频繁GC垃圾回收
详细描述讲解了java的垃圾回收机制
垃圾回收白皮书.pdf
用C++实现的自动垃圾回收器,是单线程版的
值得一看的基础东西,java的垃圾回收机制,之前百度面试被问到
JVM内存管理和垃圾回收 JVM内存管理和垃圾回收 JVM内存管理和垃圾回收
垃圾回收算法的经典著作之一,常见的垃圾回收算法 【中文版】 垃圾回收算法的经典著作之一,常见的垃圾回收算法 【中文版】