今天做了个垃圾回收小测试,发现垃圾回收居然这么强大。
以前以为垃圾回收器不能回收相互引用着的两个对象,但事实上,它不仅能够回收两个相互引用着的对象,就连一群两两相互引用着的对象,它也能搞定,下面是我的测试代码。
Node类
其中,others、next和prev成员是用来存放其他Node对象的引用的,
环形引用的一群对象用next和prev存放引用,两两相互引用的一群对象用others存放引用。
Node类有一个析构函数,当Node的对象被“处理”的时候,会向Console输出一条消息。
下面的代码建立了4种对象群:自引用的对象、环状单向引用着的一群对象、环状双向引用着的一群对象、两两相互引用着的一群对象,并测试当所有显式的引用都消失后强制进行垃圾回收,回收器对它们的反应。
程序的输出结果显示,以上4种类型的对象群,垃圾回收器都能搞定。
我猜测,只要没有变量直接或者间接地引用到某个对象,那么在垃圾回收器工作时都会把这个对象给回收掉。
不知道这个猜测对不对。