美文网首页对象Android知识Android开发
android/java 对象和引用的分析

android/java 对象和引用的分析

作者: 666swb | 来源:发表于2016-12-29 17:53 被阅读66次

预先:对象和引用的关系

Car myCar = new Car();
myCar.run();
myCar是引用,new Car()是对象

Car myCar;
myCar.run();
//这里的myCar引用没有对象,就会报错NullPointException

注意,当我们尝试在一个未指向任何对象的引用上去操作对象时,就会遇到经典的空指针异常(NullPointerException)。可以理解成我们手持遥控器,房间里却没有电视机可与之对象(没有可以用来操控的对象)。

一:java4种对象引用的分析

引用 gc回收 使用 用处
强引用 不会回收 直接new对象赋值 普遍使用
软引用 内存足不回收, 不足回收 SoftReference类 对象缓存
弱引用 不管都会回收它的内存 WeakReference类 Debug、内存监视工具等
虚引用 任何时候回收形同虚设 不能单独使用 追踪对象被垃圾回收的状态

由于mk的表格语法不熟,更详细见下图:


new.png

二:android 对软引用的使用

(一)为什么使用软引用
SoftReference的特点是它的一个实例保存对一个Java对象的软引用, 该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对 这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。另外,一旦垃圾线程回收该Java对象之 后,get()方法将返回null。软引用的对象容易操控,不会强制驻守在内存,是缓存的极佳方式。

(二)使用软引用
例:用Map集合缓存软引用的Bitmap对象

Map<String, SoftReference<Bitmap>> imageCache = new new HashMap<String, SoftReference<Bitmap>>();
//强引用的Bitmap对象
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
//软引用的Bitmap对象
SoftReference<Bitmap> bitmapcache = new SoftReference<Bitmap>(bitmap);
//添加该对象到Map中使其缓存
imageCache.put("1",softRbitmap);
..
.
//从缓存中取软引用的Bitmap对象
SoftReference<Bitmap> bitmapCache = imageCache.get("1");
//取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空
Bitmap bm = bitmapCache .get();

利用软引用缓存图片到内存中,是安卓图片缓存的常用方法,它相对灵活,不会强占内存,容易回收。

参考:
http://blog.csdn.net/qq_35101189/article/details/53264558
http://www.tuicool.com/articles/Z3UVv2y

相关文章

  • android/java 对象和引用的分析

    预先:对象和引用的关系 Car myCar = new Car();myCar.run();myCar是引用,ne...

  • java基础知识

    java对象的强引用,软引用,弱引用和虚引用

  • JAVA GC机制

    1、需要GC的内存区域:JAVA堆和方法区 2、GC的对象:引用计数和可达性分析 (1)引用计数:每个对象有一个引...

  • java的四种引用

    Java对引用的定义 无论是通用引用计数算法判断对象的引用数据,还是通过可达性分析算法判断对象的引用链是否可达,判...

  • Java对象生命周期和类生命周期

    导读 移动开发知识体系总章(Java基础、Android、Flutter) Java四大引用类型 对象的生命周期 ...

  • Java的4种引用

    java中引用的重要性 无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,...

  • JVM源码分析之FinalReference完全解读

    注:文章首发于InfoQ:JVM源码分析之FinalReference 概述 JAVA对象引用体系除了强引用之外,...

  • 对象的引用

    一、概述 Java对象的引用:强引用,软引用,弱引用和虚引用。众所周知,Java中是JVM负责内存的分配和回收,这...

  • Java四种引用方式

    Java引用方式包括: 强引用、软引用、虚引用、弱引用 java的对象位于heap中,heap中的对象有强可及对象...

  • 一切皆对象

    一切皆对象 在 Java 中,一切皆为对象。这里需要区分引用和对象。 对象和引用 对于 str 和 str1 引用...

网友评论

    本文标题:android/java 对象和引用的分析

    本文链接:https://www.haomeiwen.com/subject/zhvuvttx.html