标签:
今天闲来没事在日志中瞟见了个OutOfMemoryError错误,不由得想到前一段时间看到一篇面经里问到Java中是否有内存泄露,这个很久以前是留意过的,大体记得内存溢出和内存泄露是不同的,至于各自都有哪些情况,那个...额....忘了...。好吧,记忆力一向不好,忘就忘了,那就再总结一遍吧。翻了下收藏的博客,回顾了下便是想起了了~.~。看起来一切很美好,但是其中的一个例子突然使我困惑了:
public class TestDemo { static Test[] tests = new Test[3]; public static void main(String[] args) { Test t = new Test("test1"); tests[0] = t; //将t置为null,看起来似乎我们已经释放创建的对象,当下次gc时其将被回收 t = null; //那么我们打印下test[0]看看 System.out.println(tests[0]); } }
这是个示例内存泄露的例子,该例子十分典型,几乎所有内存泄露的示例都与此类似,作为javaer往往觉得理所应当。然而作为一个学习C++入行(学的很烂),并一直把引用当指针看的javaer不免觉得有些疑惑:t是对象的引用,这里可以看做指向对象的指针,那么test[0]=t,按理说应该是把t指针赋值给test[0],算是地址传递吧,那个t指向null之后,test[0]应该也指向null了啊。
看起来似乎有点道理,然而当了解了java的引用之后,发现吧指针等同于引用是有一些问题的。
标签:
原文地址:http://my.oschina.net/goodtemper/blog/522874