Java中的WeakHashMap概念原理以及简单案例

 更新时间:2023年09月07日 08:32:43   作者:阿黄Ahuang  
这篇文章主要介绍了Java中的WeakHashMap概念原理以及简单案例,WeakHashMap使用了软引用结构,它的对象在垃圾回收时会被删除,垃圾回收是优先级非常低的线程,不能被显示调用,当内存不足的时候会启用,需要的朋友可以参考下

WeakHashMap 概念和原理说明

WeakHashMap使用了软引用结构,它的对象在垃圾回收时会被删除

注:垃圾回收是优先级非常低的线程,不能被显示调用,当内存不足的时候会启用

下面是 WeakHashMap 的实现原理拆分:

public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V> {
    ... ...
    // 用于存储需要清理的引用对象
    private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
    ... ...
    // 内部Entry继承自WeakReference,从而有弱引用特性
    private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> {
        ... ...
    }
    ... ...
    // 用于移除内部不用的Entry来释放内存
    private void expungeStaleEntries() { ... ... }
    ... ...
}

WeakHashMap 原理说明

1.每次GC清理对象后,引用对象被放置到 ReferenceQueue 之中

2.每次访问 WeakHashMap 都会调用 expungeStaleEntries 遍历删除 ReferenceQueue 中引用对象

使用案例

1、缓存中使用

由于 WeakHashMap 是弱引用,因此适合在缓存中使用,当内存不足GC的时候,会清理不用的引用达到释放内存的目的

image

2、不要使用基础类型作为WeakHashMap的key

我大概理解的是,基础类型的一定范围不会被回收 原文:objectMap.put方法执行的时候i会被封装为Integer类型的,Integer保留了-128到127的缓存。

但是对于int来说范围大很多,因此那些Key <= 127的Entry将不会进行自动回收,但是那些大于127的将会被回收,因此最后的尺寸总是会稳定在128左右

image

到此这篇关于Java中的WeakHashMap概念原理以及简单案例的文章就介绍到这了,更多相关Java中的WeakHashMap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA 格式化JSON数据并保存到json文件中的实例

    JAVA 格式化JSON数据并保存到json文件中的实例

    这篇文章主要介绍了JAVA 格式化JSON数据并保存到json文件中的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    这篇文章主要介绍了Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别,希望对大家有所帮助,一起跟随小编过来看看吧
    2018-05-05
  • 使用 Java 将 byte[] 转换为 File 对象并上传到外部服务器的方法(最新推荐)

    使用 Java 将 byte[] 转换为 File 对象并上

    本文展示了如何通过 Java 和 Spring 来处理图像文件的获取、保存和上传,通过 RestTemplate 获取字节数组并将其转换为 File 对象,可以轻松实现从远程 URL 获取文件并将其上传到外部服务器,感兴趣的朋友一起看看吧
    2025-03-03
  • Java实现WORD和PDF互相转换以及数据填充示例

    Java实现WORD和PDF互相转换以及数据填充示例

    本文介绍了如何使用Java实现WORD和PDF的互转以及数据填充功能,通过导入Aspose库并使用其工具类,可以轻松实现WORD和PDF模板的填充和转换,需要的朋友可以参考下
    2025-02-02
  • java关于调用方法的汇总

    java关于调用方法的汇总

    本文小编给大家整理了在Java中关于静态调用和动态调用的方法汇总,值得大家学习和参考。
    2017-11-11
  • 使用try-with-resource的输入输出流自动关闭

    使用try-with-resource的输入输出流自动关闭

    这篇文章主要介绍了使用try-with-resource的输入输出流自动关闭方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中Exception和Error的区别详解

    Java中Exception和Error的区别详解

    在 Java 开发面试中,Exception 和 Error 的区别是一个经典问题,这个问题不仅考察我们对 Java 异常处理机制的理解,还考察我们在实际开发中如何处理异常的能力,所以本文主要给大家介绍一下Java中Exception和Error的区别,需要的朋友可以参考下
    2025-04-04
  • SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    这篇文章主要介绍了SpringBoot项目集成Flyway进行数据库版本控制,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Spring Cloud微服务架构Sentinel数据双向同步

    Spring Cloud微服务架构Sentinel数据双向同步

    这篇文章主要为大家介绍了Spring Cloud微服务架构Sentinel数据双向同步示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java集合ConcurrentHashMap详解

    Java集合ConcurrentHashMap详解

    ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以ConcurrentHashMap 在并发编程的场景中使用的频率比较高
    2023-01-01

最新评论