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二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】

    Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】

    这篇文章主要介绍了Java二叉搜索树遍历操作,结合实例形式详细分析了Java二叉搜索树前序、中序、后序、层次、广度优先遍历等相关原理与操作技巧,需要的朋友可以参考下
    2020-03-03
  • Java读取Excel文件内容的简单实例

    Java读取Excel文件内容的简单实例

    这篇文章主要介绍了Java读取Excel文件内容的简单实例,有需要的朋友可以参考一下
    2013-11-11
  • IDEA 插件 mapper和xml互相跳转操作

    IDEA 插件 mapper和xml互相跳转操作

    这篇文章主要介绍了IDEA 插件 mapper和xml互相跳转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java中join线程操作实例分析

    Java中join线程操作实例分析

    这篇文章主要介绍了Java中join线程操作,结合实例形式分析了java使用join方法操作线程的相关原理与实现技巧,需要的朋友可以参考下
    2019-09-09
  • 详解java 单例模式及方法总结

    详解java 单例模式及方法总结

    这篇文章主要介绍了详解java 单例模式及方法总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • springboot打成jar后获取classpath下文件失败的解决方案

    springboot打成jar后获取classpath下文件失败的解决方案

    这篇文章主要介绍了使用springboot打成jar后获取classpath下文件失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入理解java动态代理机制

    深入理解java动态代理机制

    本篇文章主要介绍了深入理解java动态代理机制,详细的介绍动态代理有哪些应用场景,什么是动态代理,怎样使用,它的局限性在什么地方?有兴趣的可以了解一下。
    2017-02-02
  • Java精品项目瑞吉外卖之员工信息管理篇

    Java精品项目瑞吉外卖之员工信息管理篇

    这篇文章主要为大家详细介绍了java精品项目-瑞吉外卖订餐系统,此项目过大,分为多章独立讲解,本篇内容为员工信息分页查询与启用或禁用员工状态,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • HttpClient连接池及重试机制解析

    HttpClient连接池及重试机制解析

    这篇文章主要介绍了HttpClient连接池及重试机制解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot实现修改请求状态404改为200

    springboot实现修改请求状态404改为200

    这篇文章主要介绍了springboot实现修改请求状态404改为200方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论