弱引用理解及使用场景

Car car = new Car(22000,"silver");
WeakReference weakCar = new WeakReference(car);
第一行就是new了一个实例,属于强引用,这个还是很好理解的。下面那一行说是弱引用,可实际上又是怎么用的呢?其实他就是让你的强引用变成了弱引用。接下来,如果你再想引用这个car的话。我举个例子。B b = new B(car);这个B类是接受一个car实例的,有弱引用加持的话,如果你后面这样写car ==null,这个 new Car(220000,“silver”)是可以被回收的。不会造成内存泄漏。
如果你不把这个强引用转化为弱引用,那么当car==null的时候,由于b 对car有了引用。
你这个 new Car(220000,“silver”)是不会被回收的,这样就很危险,容易OOM。 要等到b的生命周期结束才可能被GC掉。
   // 例子1: 使用大图时:
    private Map> imageCache = new HashMap>();
        public Bitmap get(String path) {
            SoftReference softBitmap = imageCache.get(path);
            if (softBitmap == null) {
                return null;
            }
            return softBitmap.get();    // 取出软引用的Bitmap,如果内存不足被回收,获取为NUll  Bitmap是内存消耗大户,是导致OMM最常见的原因之一
        }

        public static Bitmap

你可能感兴趣的:(android,系统源码学习)