WeakReference
在计算机编程的时候,一个特别需要注意的事情就是关于内存使用的。如果程序不注意内存使用状况,很可能会造成内存泄漏,时间越长内存占用越多,造成性能下降。
C和C++语言需要程序员手动清空不需要使用的对象,所以编程较复杂。
JAVA语言的一个好处就是,虚拟机可以自动清理对象,也就是说
Camera camera = new Camera();
camera = null;
只要第二行中设定为null,那虚拟机就会在合适的时候清空这个camera对象所占空间。对于没有使用的简单引用,即便是不设定null,虚拟机也会在合适的时候清空这个对象,只要发现这个对象没有在使用了。
有些时候,虚拟机也不会回收空间,因为这个对象是在某些时候需要的(比如使用cache的时候,这一点我不太明白,但是可以想象的到)。
如果一个对象被WeakReference指向,并且没有其他引用指向的时候,系统会在合适的时候回收空间。
WeakReference<Camera> weakCamera = new WeakReference(Camera)(camera);
通过这个我们创建了一个Weak的Camera对象,我们不需要对这个对象进行任何回收相关的操作,系统就会在合适的时候回收空间了
为此,我们不再需要直接从Camera获得引用(因为这样会获得强引用,那还要W额啊看Reference干什么?),而是通过这个weakCamera
获得camera
对象
if(weakCamera.get()!=null)
{
camera = weakCamera.get();
}
这样获得的引用是弱引用,在使用的时候系统不会回收,在使用结束以后会在合适的时候回收。
所以说,WeakReference
适合使用在一些比较耗费资源的对象上,对移动设备来说是一个很好的东西。