Java中的四种引用介绍和使用场景
2017-07-13 15:03
459 查看
最近换工作,准备把我之前工作中的一些东西做一下总结吧,写的不是很完善的地方,还请见谅!
Java中有四种引种,我们最常见的就是强引用,就是使用new关键字创建一个对象的方式。关于这四种引用,我介绍一下他们的功能和使用场景。
使用场景:我们平常大部分使用的场景都是使用了强引用,比如new创建对象,反射获得一个对象等。
软引用还可以和一个引用队列进行关联,如果这个软引用的对象被垃圾回收,那么VM就会将这个软引用加入到关联的队列中去。
使用场景: 这种可用于那种有可能会在创建后使用的对象,不过为了内存消耗会选择使用软引用,比如缓存。
它比软引用的生命周期更短,和软引用相似,它同样可以和引用队列关联,如果被垃圾回收了,就会加入到这个关联队列中。
使用场景: 弱引用用于生命周期更短的,对内存更敏感的场景中,比如占用内存很大的Map,java api中就提供了WeakHashMap使用,就会是的大Map被及时清理掉。
虚引用必须和引用队列联合使用,引用队列的作用和软弱引用一样。
使用场景: 我觉得他的使用场景应该在判断一个对象是否被垃圾回收了。
Java中有四种引种,我们最常见的就是强引用,就是使用new关键字创建一个对象的方式。关于这四种引用,我介绍一下他们的功能和使用场景。
1、强引用(Strong Reference)
功能:一个对象如果具有强引用,那么垃圾回收器绝不会回收它,即使当内存不足时,VM宁愿抛出内存不足的异常,也不会去回收这些对象。使用场景:我们平常大部分使用的场景都是使用了强引用,比如new创建对象,反射获得一个对象等。
Object obj = new Object();
2、软引用 (Soft Reference)
功能: 如果一个对象只具有软引用,则内存空间足够时,垃圾回收器就不会去回收它;如果内存空间不足时,就会回收这些对象的内存。软引用还可以和一个引用队列进行关联,如果这个软引用的对象被垃圾回收,那么VM就会将这个软引用加入到关联的队列中去。
使用场景: 这种可用于那种有可能会在创建后使用的对象,不过为了内存消耗会选择使用软引用,比如缓存。
String cache = "{a=1,b=2,c=3,d=4}"; SoftReference<String> stringSoftReference = new SoftReference<String>(cache); System.out.println(cache);
3、弱引用(Weak Reference)
功能: 弱引用和软引用的区别在于,只具有弱引用的对象拥有更短暂的生命周期,在垃圾回收器线程扫描它管辖的内存区域的过程中,一旦发现对象只具有弱引用,不管当前内存空间是否足够,都会回收他的内存。它比软引用的生命周期更短,和软引用相似,它同样可以和引用队列关联,如果被垃圾回收了,就会加入到这个关联队列中。
使用场景: 弱引用用于生命周期更短的,对内存更敏感的场景中,比如占用内存很大的Map,java api中就提供了WeakHashMap使用,就会是的大Map被及时清理掉。
WeakHashMap<String,Bean> weakHashMap = new WeakHashMap<>(); weakHashMap.put("a",new Bean(1)); weakHashMap.put("b",new Bean(2)); weakHashMap.put("c",new Bean(3)); System.out.println(weakHashMap);
4、虚引用(Phantom Reference)
功能: “虚引用”形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期,如果一个对象仅持有虚引用的话,那么它就和没有任何的引用一样,在任何时候都可能被垃圾回收器回收。虚引用必须和引用队列联合使用,引用队列的作用和软弱引用一样。
使用场景: 我觉得他的使用场景应该在判断一个对象是否被垃圾回收了。
String name = "a"; ReferenceQueue<String> prq = new ReferenceQueue<>(); PhantomReference<String> nameRf = new PhantomReference<>(name, prq); System.out.println(prq.poll());
相关文章推荐
- Java中的四种引用介绍和使用场景
- Java 四种引用介绍及使用场景
- java - 四种强弱软虚引用使用到的场景
- 使用Handler容易产生的内存泄露以及介绍下Java的4种引用
- Java中四种引用类型介绍
- Java中的引用类型分类以及使用场景
- Java的四种引用,强弱软虚,用到的场景
- java的四种引用,强弱软虚,用到的场景
- 介绍new Thread的弊端及Java四种线程池的使用
- java的四种引用,强弱软虚,用到的场景 (r)
- Java的四种引用,强弱软虚,用到的场景
- Java的四种引用,强弱软虚,用到的场景
- 使用Handler容易产生的内存泄露以及介绍下Java的4种引用
- java的四种引用,强弱软虚,用到的场景
- Java中四种引用强 软 弱 虚 的详细介绍及理解
- 引用 JAVA EL表达式详细介绍使用手册
- 介绍new Thread的弊端及Java四种线程池的使用
- 引用 JAVA EL表达式详细介绍使用手册
- java基础(四) Java的四种引用,强弱软虚,用到的场景
- 消息队列使用的四种场景介绍