Java引用类型与WeakHashMap
Java中的引用类型
-
强引用:直接引用,只要强引用存在就不回收
-
软引用:描述一些非必须得对象,内存不足时可能会回收
-
弱引用:下一次GC扫描到就会回收
-
虚引用:用于在对象回收后执行清理操作,与引用队列配合使用
-
虚引用在创建时可以指定引用队列
-
在被回收之后可以通过队列判断回收状态并执行相关操作
-
WeakHashMap
概述:一个弱引用的HashMap,适用于需要缓存的场景,但是由于缓存有限,不能缓存所有的对象,需要可以清理的缓存。
WeakHashMap 内部是通过弱引用来管理entry
的,弱引用的特性对应到 WeakHashMap 上意味着什么呢?将一对key, value
放入到 WeakHashMap 里并不能避免该key
值被GC回收,除非在 WeakHashMap 之外还有对该key
的强引用。
实现原理
-
弱引用,在WeakHashMap的Entry上继承了WeakReference,如果这个对象没有被强引用,那么就是弱引用对象。
private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V>