强引用,软引用,弱引用,虚引用

  1. 云栖社区>
  2. 博客>
  3. 正文

强引用,软引用,弱引用,虚引用

小弟的谷哥 2015-04-21 14:44:38 浏览488
展开阅读全文


强引用,软引用,弱引用,虚引用



强引用:
我们一般使用的就是强引用。垃圾回收器绝不会回收它。
当内存空间不足时Java虚拟机宁愿抛出OutOfMemoryError错误使程序异常终止,也不会回收具有强引用的对象来解决内存不足的问题


软引用:
如果一个对象具有软引用,那么当内存空间足够的时候GC就不会回收它,如果内存空间不足了,就会回收这些对象的内存空间。


弱引用:

如果一个对象具有弱引用,那么当GC线程扫描的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

其实准备地说应该是"如果一个对象只具有弱引用.........",即仅有弱引用而不存在对其的强引用才会将其回收.

但由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。




为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用.
但是也请注意在Android较老版本中,常用软引用或弱引用 (SoftReference or WeakReference)实现内存缓存技术。
但从 Android 2.3 (API Level 9)开始,GC会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。


虚引用:
顾名思义,“虚引用”就是形同虚设,与其他三种引用都不同它并不会决定对象的生命周期。
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。

网友评论

登录后评论
0/500
评论
小弟的谷哥
+ 关注