讨论下强引用
讨论下强引用把
1。
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
强引用必须设置他为空,gc才能去清除这段内存。
我感觉这个结论不是绝对的 要看引用对象的生命周期。
2. Object A = new Object ();这个是个强引用,但是如果A的生命周期结束, 例如在函数里这么写, A就会放到栈里, new 的对象放入堆里, A从栈指向堆, 从这个函数结束后, A就会自动出栈, 生命周期结束,由此在堆上的B就会被gc 回收!
如果在函数里想用gc 去回收堆上空间,必须要显示的说明 A=null 这样gc 才能去回收!
3. 如果在一个函数里这么写
Object A = new Object();
A= new B();
在这个函数中堆分配的空间 object 会被回收吗? 应该会把 他没有在Gc root 的回收链上!
4. 还有一个问题是 我们在写代码的时候一般不会让强引用主动设置为null, 这样的话会产生内存泄露吗?