什么是WeakHashMap--转
原文地址:http://laravel.iteye.com/blog/2303244 Java?WeakHashMap?到底Weak在哪里,它真的很弱吗?WeakHashMap?的适用场景是什么,使用时需要注意些什么?弱引用和强引用对Java GC有什么不同影响?本文将给出清晰而简洁的介绍。 总体介绍在Java集合框架系列文章的最后,笔者打算介绍一个特殊的成员:WeakHashMap,从名字可以看出它是某种?Map。它的特殊之处在于?WeakHashMap?里的 更直观的说,当使用?WeakHashMap?时,即使没有显示的添加或删除任何元素,也可能发生如下情况:
遇到这么奇葩的现象,你是不是觉得使用者一定会疯掉?其实不然,WeekHashMap?的这个特点特别适用于需要缓存的场景。在缓存场景下,由于内存是有限的,不能缓存所有对象;对象缓存命中可以提高系统效率,但缓存MISS也不会造成错误,因为可以通过计算重新得到。 要明白?WeekHashMap?的工作原理,还需要引入一个概念:弱引用(WeakReference)。我们都知道Java中内存是通过GC自动管理的,GC会在程序运行过程中自动判断哪些对象是可以被回收的,并在合适的时机进行内存释放。GC判断某个对象是否可被回收的依据是,是否有有效的引用指向该对象。如果没有有效引用指向该对象(基本意味着不存在访问该对象的方式),那么该对象就是可回收的。这里的“有效引用”并不包括弱引用。也就是说,虽然弱引用可以用来访问对象,但进行垃圾回收时弱引用并不会被考虑在内,仅有弱引用指向的对象仍然会被GC回收。 WeakHashMap?内部是通过弱引用来管理 关于强引用,弱引用等概念以后再具体讲解,这里只需要知道Java中引用也是分种类的,并且不同种类的引用对GC的影响不同就够了。 具体实现WeakHashMap的存储结构类似于HashMap,读者可自行,这里不再赘述。 关于强弱引用的管理方式,博主将会另开专题单独讲解。 Weak HashSet?如果你看过前几篇关于?Map?和?Set?的讲解,一定会问:既然有?WeekHashMap,是否有?WeekHashSet?呢?答案是没有:( 。不过Java?Collections工具类给出了解决方案, //?将WeakHashMap包装成一个SetSet
不出你所料, //?Collections.newSetFromMap()用于将任何Map包装成一个Setpublic?static? ![]() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- AtomicReference、AtomicStampedReference 和 AtomicMarkab
- Play 2.0 / Java – 有没有办法在请求数据绑定后完成验证?
- java – Spring mvc表单错误没有在jsp上进行过
- java – 如何使用ACTION_IMAGE_CAPTURE从相机捕获照片后如何
- Java中的Shift运算符
- Java的三种工厂模式
- 在Java中使用Jackson创建JSON对象
- java – zeromq广播到整个网络
- java – 为什么在Guava中弃用Files.deleteDirectoryContent
- JavaEE中struts2实现文件上传下载功能实例解析
- java – 如何确定Swing鼠标事件发生在哪个监视器
- 如何否定一个值与java [Integer.Min_Value]中的值
- Java并发编程:线程间通信wait、notify
- idea彩虹屁挑战赛开始啦,快来自定义你的彩虹屁
- 如何编写一个使用OpenERP ORM直接上传到Postgres
- javaweb学习总结—Apache的DBUtils框架学习
- [Java拾遗四]JavaWeb基础之Servlet_Request&
- SpringBoot和Swagger结合提高API开发效率
- java – Base64编码在Android中占用太长时间
- 系统属性file.encoding在JVM启动后,再次设置无法