讨论下强引用
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, 这样的话会产生内存泄露吗?
相关推荐
android安卓图片的三级缓存DEMO 三层缓存示例下载 强引用 软引用
实现了图片的三级缓存. 欢迎留言讨论
【Flutter 面试题】 dart是弱引用还是强引用?
Dart 是 强引用 语言。强引用 的概念是指只要有一个引用指向对象,该对象就不会被垃圾回收。这意味着对象在内存中始终存在,直到所有引用被删除。
Android 内存溢出和内存泄漏的问题
Android 内存溢出和内存泄漏的问题 在面试中,经常有面试官会问“你知道什么是内存溢出?什么是内存泄漏?怎么避免?”通过这篇文章,你可以回答出来了。 内存溢出 (OOM)是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如只申请了一个integer,但给它存了long才能存下的数,那就会出现内存溢出。 内存泄露 (memory leak)是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 内存泄漏最终会导致内存溢出。 如何避免内存溢出? 强引用:强引用是使用最普遍的引用。如果一个
强,软,弱,虚引用非常通俗易懂的代码理解
网上关于四种引用长篇概论很多,不过大多是理论,看是看懂了可能就是一头雾水,下面我用很简单的代码帮助你加强理解和记忆。 前述:除了强引用外,其他引用不是我们所常见的 new出来的对象,而是需要借用3个类SoftReference软引用,WeakReference弱引用,PhantomReference虚引用 1.强引用 概述:即发生OOM(Out Of Memory)内存空间满了也不会去回收,比如我们平常 new出来的对象。 Object object = new Object(); System.out.println("回收前:"+object); System.gc(
全面解析Java中的GC与幽灵引用
一般的应用程序不会涉及到 Reference 编程, 但是了解这些知识会对理解 GC 的工作原理以及性能调优有一定帮助,在实现一些基础性设施比如缓存时也可能会用到,希望本文能有所帮助


Java SE
