• 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集视频教程

  • 相关阅读:
    16进制数至字符串转换
    综合评价模型C++实现
    综合评价模型
    Eigen使用矩阵作为函数参数
    Eigen子矩阵操作
    Eigen矩阵基本运算
    c++矩阵运算库Eigen简介
    三次样条插值算法C++实现
    一个 图片 滚动 飞入的css特效
    在TTF字体中提取想要的文字
  • 原文地址:https://www.cnblogs.com/kiwi-deng/p/11323207.html
Copyright © 2020-2023  润新知