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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    本文主要介绍了Mybatis-plus(MP)中CRUD操作保姆级笔记,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 如何根据带账号密码的WSDL地址生成JAVA代码

    如何根据带账号密码的WSDL地址生成JAVA代码

    这篇文章主要介绍了如何根据带账号密码的WSDL地址生成JAVA代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 浅析Java设计模式编程中的单例模式和简单工厂模式

    浅析Java设计模式编程中的单例模式和简单工厂模式

    这篇文章主要介绍了浅析Java设计模式编程中的单例模式和简单工厂模式,使用设计模式编写代码有利于团队协作时程序的维护,需要的朋友可以参考下
    2016-01-01
  • Java对象的内存布局全流程

    Java对象的内存布局全流程

    这篇文章主要介绍了Java对象的内存布局全流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java嵌套for循环优化方案分享

    Java嵌套for循环优化方案分享

    介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通过这些方法,可以显著提升程序的执行效率,文章还以动态规划优化示例——最长递增子序列
    2025-03-03
  • Post请求参数是数组或者List时的请求处理方式

    Post请求参数是数组或者List时的请求处理方式

    这篇文章主要介绍了Post请求参数是数组或者List时的请求处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java实现DFA算法对敏感词、广告词过滤功能示例

    Java实现DFA算法对敏感词、广告词过滤功能示例

    本篇文章主要介绍了Java实现DFA算法对敏感词、广告词过滤功能示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Spring MVC 扩展和 SSM 框架整合步骤详解

    Spring MVC 扩展和 SSM 框架整合步骤详解

    在前端页面后后台交互的过程中,需要一种格式清晰、高效且两端都可以轻松使用的数据格式做交互的媒介,JSON正可以满足这一需求,下面学习使用Spring MVC 框架处理JSON数据,感兴趣的朋友一起看看吧
    2024-08-08
  • 浅谈一下Java中的几种JVM级别的锁

    浅谈一下Java中的几种JVM级别的锁

    这篇文章主要介绍了浅谈一下Java中的几种JVM级别的锁,当存在安全漏洞时,也必须有相应的防护措施。顺应这种趋势,虚拟"锁"被发明出来,以解决线程的安全问题。在这篇文章中,我们将研究多年来出现的 Java 中几种典型的 JVM 级锁,需要的朋友可以参考下
    2023-08-08
  • Spring排序机制之接口与注解的使用方法

    Spring排序机制之接口与注解的使用方法

    本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例,并指导如何选择合适的排序机制来控制Bean的加载顺序和优先级,感兴趣的朋友一起看看吧
    2025-02-02

最新评论