WeakReference的理解与使用

转自:https://blog.csdn.net/zmx729618/article/details/54093532
在Java里, 当一个对象o被创建时, 它被放在Heap里. 当GC运行的时候, 如果发现没有任何引用指向o, o就会被回收以腾出内存空间. 或者换句话说, 一个对象被回收, 必须满足两个条件: 1)没有任何引用指向它 2)GC被运行。
我们往往通过把所有指向某个对象的referece置空,来保证这个对象在下次GC运行的时候被回收 (可以用java -verbose:gc来观察gc的行为)。
对于简单对象, 当调用它的方法执行完毕后, 指向它的引用会被从stack中popup, 所以他就能在下一次GC执行时被回收了。
但是,当使用cache的时候, 由于cache的对象正是程序运行需要的, 那么只要程序正在运行, cache中的引用就不会被GC给回收
Strong reference:

Object c = new Car(); //只要c还指向car object, car object就不会被回收

weak reference:

WeakReference<Car> weakCar = new WeakReference<Car>(car);

当一个对象仅仅被weak reference指向, 而没有任何其他strong reference指向的时候, 如果GC运行, 那么这个对象就会被回收
当要获得weak reference引用的object时, 首先需要判断它是否已经被回收:

weakCar.get();

猜你喜欢

转载自blog.csdn.net/zhawenting/article/details/81632572