WeakHashMap<K,V> 中的弱引用】的更多相关文章

相信很多人对WeakHashMap并没有完全理解. WeakHashMap 持有的弱引用的 Key. 1. 弱引用的概念: 弱引用是用来描述非必需对象的,被弱引用关联的对象只能生存到下一次垃圾收集发生之前,当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象. 2. WeakHashMap中的弱引用 Key是如何被清除的? WeakHashMap中的清除Key的核心方法: private void expungeStaleEntries() { Entry<K,V> e;…
本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:) 1. What——什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明: 弱引用对象的存在不会阻止它所指向的对象变被垃圾回收器回收.弱引用最常见的用途是实现规范映射(canonicalizin…
C#中的弱引用(WeakReference)   我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的.我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现.弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存.对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用.弱引用使用起来很简单,看下面的代码:Object obj…
弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat kitty = new Cat(); 变量kitty就是一个强引用,它指向了堆中的一个Cat对象实例.我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收.换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的. 从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该…
Strong references StringBuffer buffer = new StringBuffer(); 普通的对象创建都是这种类型,只要buffer还存在,对象就不会被GC回收.同时也会造成一定的问题,比如:向HashMap添加这些对象的句柄时,保存一个图片的缓存的时候,他们都不会自动清除 Weak references ReferenceQueue<String> wrq = new ReferenceQueue<String>();WeakReference&l…
弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat cat = new Cat(); 变量cat就是一个强引用,它指向了堆中的一个Cat对象实例.我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收.换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的. 从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该对象仍然…
本文前部分来自:http://www.cnblogs.com/mokey/archive/2011/11/24/2261605.html 分割线后为作者补充部分. 一:什么是弱引用 了解弱引用之前,先了解一下什么是强引用 例如 : Object obj=new Object();     就是一个强引用,内存分配一份空间给用以存储Object数据,这块内存有一个首地址,也就是obj所保存的数据,内存分配的空间中不仅仅保存着Object对象信息,还保存着自己(Object本身)被引用的次数. 当一…
Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决这个问题的一种廉价方案,它不会阻止所引用的对象被GC,在需要的时候能够释放出内存.也因为这样,在每次访问弱引用中的对象时,必须检查对象是否为空(已被GC),算是一点点代价吧. 使用弱引用的几个小心得:   1,使用生命周期匹配的强引用避免弱引用.比如缓存需要一个Context引用,缓存是长生命周期的…
我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的.我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现.弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存.对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用.弱引用使用起来很简单,看下面的代码:Object obj = new Object();WeakRefere…
Set<String> set = map.keySet(); if(set != null && !set.isEmpty()) { for(String key : set) { if(map.get(key) == null) { map.put(key, ""); } } }…