Java 引用

 

1. Java 有几种引用?(单选)答案:B java将引用分为了强引用、软引用、弱引用、虚引用四种,引用强度一次减弱。

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
 
每种编程语言都有自己操作内存中元素的方式,在C和C++中是通过指针,而在java中是通过引用,在Java中一切都是对象,但我们操作的实际是对象的一个引用,java将引用分为了四种类型,强引用、软引用、弱引用、虚引用


有这样一类对象:当内存空间还足够,则可保留在内存中;如果内存空间在gc之后还是非常紧张,则可抛弃这些对象。很多系统的缓存功能适合这样的场景,所以jdk1.2以后
java将引用分为了强引用、软引用、弱引用、虚引用四种,引用强度一次减弱。
  • 强引用:类似Object a=new Object()这类,永远不会被回收
    StringBuffer buffer = new StringBuffer();
  • 软引用:SoftReference,当系统快要发生内存溢出异常时,将会把这些对象列入回收范围进行二次回收,如果这次回收还是没有足够内存,则抛出内存溢出异常。用来描述一些非必须,但仍有用的对象。内存足够时,软引用对象不会被回收,只有在内存不足时,系统会回收软引用对象,通常用于实现缓存。
     Drawable drawable = new BitmapDrawable(bitmap);
    SoftReference<Drawable> soft = new SoftReference<Drawable>(drawable);
    if(soft!=null){
    view.setImageResource(soft.get())
    }当需要加载大图时,可以使用软引用,通过get()方法,获取图片对象,如果当前内存不足,则软引用会被回收,避免内存溢出发生。
  • 弱引用:比软引用更弱,活不过下一次gc。无论当前内存是否足够,下一次gc都会被回收掉
    String str = new String("abc");
    WeakReference<String> abcWeakRef = new WeakReference<String>(str);
  • 虚引用:又叫幻引用,最弱,一个对象时候有虚引用的存在,不会对它的生存时间构成影响,唯一目的就是能在这对象被回收以后收到一个系统通知。
posted @ 2020-10-20 22:32  tzmok  阅读(64)  评论(0编辑  收藏  举报