zoukankan      html  css  js  c++  java
  • WeakHashMap

    引用分类

    强引用:StrongReference:引用指向对象,gc运行时不回收

    软引用:softReference gc运行时可能回收(jvm内存不够时)

    弱引用:wekaReference gc运行时立即回收

    虚引用:PhantomReference类似于无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列referenceQueue联合使用

    目的:避免对象长期驻留在内存中,解决垃圾 回收机制回收时机问题

    weakHashMap:

    键为弱引用,回收键后立即删除key-value对象

    看一段代码

    Map<String, String> map = new WeakHashMap<>();

    //常量池对象不会回收
    map.put("a1", "1");
    map.put("a2", "2");
    map.put(new String("c1"), "1");
    map.put(new String("c2"), "2");

    System.out.println("-------------gc回收前");
    map.keySet().forEach(key -> System.out.println("map.get(" + key + ") = " + map.get(key)));
    System.out.println("map长度:" + map.size());
    // 通知回收
    System.gc();
    // //强制调用已经失去引用的对象的finalize方法
    System.runFinalization();

    System.out.println("----------gc回收后");
    System.out.println("map长度:" + map.size());
    map.keySet().forEach(key -> System.out.println("map.get(" + key + ") = " + map.get(key)));

    运行结果:

    可见常量池对象不会a1,a2不会被回收,而c1,c2会被回收

    weakhashmap使用的场景是map中存的数据占用内存太大,希望gc回收这块内存,不知道各位都是用哪个类实现缓存的,知道的同学可以指导下

    学习感受:感觉项目中一般用的缓存软引用应该比较合适

    摘自尚学堂300集视频教程

  • 相关阅读:
    中国一些web service收藏
    DataSet 和 List<T> 相互 转换
    JS图表
    IIS DirectoryEntry
    JS弹框
    Remoting
    Del SVN Configuare File BAT
    Viewport3D对象转换成图片
    在WPF中进行碰撞检测
    Button自定义样式
  • 原文地址:https://www.cnblogs.com/kiwi-deng/p/11323207.html
Copyright © 2011-2022 走看看