今天做项目,碰到了使用MapMaker的场景,最近用了好多guava的东西,好多都是用作缓存的,真香啊!
MapMaker其实是ConcurrentMap的实例,不过他还合并了很多特性,主要的特性有:
-
key和value被自动包装成软引用或弱引用
- 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。
- 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
当你想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候你就是用弱引用。
-
可以创建监听,可以在Entry被移除或者删除之前,对Entry做一些处理
-
用来构造ConcurrentHashMap:得到线程安全的hashMap
@Override public <K