SoftReference 软引用使用实例
来源:互联网 发布:2015年河北旅游业数据 编辑:程序博客网 时间:2024/05/29 12:07
1.今天来教大家使用下java缓存神奇SoftReference类,具体概念见别的博客,我们直接上代码:
//要缓存的对象public class Obj { /**缓存标识*/ private String id ; /**这里只是举个例子,以便后面实验能看到内存回收的效果*/ private byte[] a = new byte[1024 * 1024*500]; public Obj(String id) { this.id = id; } public String getId() { return this.id; }}//下面见下 缓存 单利类public enum ObjCache { cache ; private Hashtable<String, SoftReference<Obj>> objRefs = null; /*** * 这个存 的是 : 被标记回收的 SoftReference 对象。 */ private ReferenceQueue<Obj> refQue = null; private ObjCache() { this.objRefs = new Hashtable<String, SoftReference<Obj>>(); this.refQue = new ReferenceQueue<Obj>(); } // 取得缓存器实例 public static ObjCache getInstance() { return cache; } public Obj getObj(String id) { Obj em = null; // 有缓存 直接 取出 , 但是也可能为 null if (objRefs.containsKey(id)) { em = objRefs.get(id).get(); } if (em == null) { em = new Obj(id); // 重新构造, // 加入缓存 cacheObj(em); } return em; } // 添加到缓存 private void cacheObj(Obj em) { SoftReference<Obj> ref = new SoftReference<Obj>(em, this.refQue); this.objRefs.put(em.getId(), ref); System.out.println("缓存成功。"); } // 测试 内存现在到底缓存多少个 obj 对象 public void print(){ System.out.println("现在内存中缓存 Obj对象 的情况"); for(String s : objRefs.keySet()){ if(objRefs.get(s).get() == null){//这里如果内存不够,会自动回收存入的obj对象,所以取出来可能为 null System.out.println("===: null 这个是被虚拟机自动回收了"); }else{ System.out.println("===: "+objRefs.get(s).get()); } } } // 测试 public static void main(String[] args) throws Exception { // 下面的a变量只为消耗一部分内存空间,占用了4M // 因为对于软可及对象,只有在系统内存不足时才会被回收,所以必须占用掉大部分内存 ObjCache cache = ObjCache.getInstance(); for(int i=0;i<100;i++){ Thread.sleep(1000); System.out.println(cache.getObj("zhangsan"+i)); ObjCache.cache.print(); } }}//测试结果 : 没有崩溃!说明我们的软引用起作用了。缓存成功。test.soft.Obj@4eb09321现在内存中缓存 Obj对象 的情况===: test.soft.Obj@4eb09321缓存成功。test.soft.Obj@2a8b83e3现在内存中缓存 Obj对象 的情况===: test.soft.Obj@2a8b83e3===: test.soft.Obj@4eb09321缓存成功。test.soft.Obj@4f19c297现在内存中缓存 Obj对象 的情况===: null 这个是被虚拟机自动回收了===: null 这个是被虚拟机自动回收了===: test.soft.Obj@4f19c297缓存成功。test.soft.Obj@71f801f7现在内存中缓存 Obj对象 的情况===: null 这个是被虚拟机自动回收了===: null 这个是被虚拟机自动回收了===: test.soft.Obj@71f801f7===: test.soft.Obj@4f19c297缓存成功。
今天就到这里,谢谢大家!
老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400
0 0
- SoftReference 软引用使用实例
- 使用SoftReference软引用
- 软引用SoftReference的使用
- 黑马程序员——Java软引用(SoftReference)实例
- java 软引用 - SoftReference
- 软引用(SoftReference)
- 软引用SoftReference
- SoftReference软引用
- 软引用SoftReference
- java中对象的软引用,SoftReference的使用
- Listview 软引用SoftReference异步加载图片
- java中的软引用类,SoftReference。
- 【Android】软引用(SoftReference)与LruCache
- Android 软引用(SoftReference)与LruCache
- Android 软引用(SoftReference)与LruCache
- Android学习笔记之SoftReference软引用...
- Android 软引用(SoftReference)与LruCache
- Android软引用(SoftReference)与LruCache
- Ant&Maven【1.1】MyEclipse2016下Maven搭建及导入
- c语言笔试坑题随记
- 【已解决】nimfa 环境的详细搭建过程 + 各种依赖库的安装、下载、调试
- 小程序开发
- OGRE摄像机方向总结
- SoftReference 软引用使用实例
- 洛谷 P1219 八皇后
- java日期格式
- linux IP、子网掩码、网关设置及相关问题
- 关于微信小程序的一些看法
- 非常通用的工具类整理
- html的概念及扩展名
- windows ,pip install h5py 报错
- 微信小程序跳坑(二)-----navigateTo跳转链接失灵