`

WeakHashMap

    博客分类:
  • Java
阅读更多
WeakHashMap是否自动释放看的是key是否有外部引用,如果一个key没有外部引用而其value有外部引用,照样会被gc掉。
    public static void main(String[] args) throws Exception {

        List<Map<Integer, byte[][]>> list = new ArrayList<Map<Integer, byte[][]>>();
        List<Integer> list1 = new ArrayList<Integer>();
        for (int i = 0; i < 20; i++) {
            Map<Integer, byte[][]> weakMap = new WeakHashMap<Integer, byte[][]>();
            Integer key = new Integer(i);
            weakMap.put(key, new byte[1000][1000]);
            list.add(weakMap);
            if (i % 2 == 0) list1.add(key);
        }

        System.gc();

        for (Map<Integer, byte[][]> map : list) {
            System.err.println(map);
        }
    }

运行结果:
{0=[[B@7369ca65}
{}
{2=[[B@2666e815}
{}
{4=[[B@2e0ece65}
{}
{6=[[B@4e106082}
{}
{8=[[B@15301ed8}
{}
分享到:
评论

相关推荐

    WeakHashMap的使用方法详解

    WeakHashMap的使用方法详解 WeakHashMap是Java中的一种哈希映射表,它的键是弱引用的,意味着当 WeakHashMap 的键对象只有 WeakHashMap 自己持有时,垃圾回收器可以将其回收。WeakHashMap 的使用方法主要体现在...

    java集合-WeakHashMap的使用

    WeakHashMap是Java中的一种特殊的哈希表实现,它使用弱引用(Weak Reference)来保存键对象。当键对象没有被其他强引用引用时,在垃圾回收时会自动从WeakHashMap中移除对应的键值对。

    Java编程WeakHashMap实例解析

    Java编程WeakHashMap实例解析 WeakHashMap是Java编程中的一种特殊的HashMap实现,它使用弱引用来保存键和值,这样可以使得垃圾回收器自动清理键和值。在WeakHashMap中,键和值都是弱引用的,这样可以避免内存泄露...

    Java弱引用与WeakHashMap

    书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。  《Java 理论与实践: 用弱引用堵住内存泄漏》一文也...

    线程死锁CPU过高,请求原因分析

    在Java编程中,WeakHashMap是一种特殊的哈希表,它的键(Key)是弱引用,当键被垃圾回收器清除后,即使有值(Value)存在,该条目也会自动从哈希表中移除。 线程死锁的原因通常包括以下几点: 1. **资源互斥**:每...

    弱类型语言允许将一块内存看做多种类型

    - **expungeStaleEntries 方法**:为了确保 WeakHashMap 的键被正确清理,每当访问 WeakHashMap 的时候,都会调用 expungeStaleEntries 方法来清除已经无效的键值对。 #### 七、WeakHashMap 的局限性 - **访问触发...

    比较Vector、ArrayList和hashtable hashmap

    这意味着如果键不再被任何对象引用,那么即使在 WeakHashMap 中,这个键也会被垃圾收集器回收。这种方式可以防止内存泄漏,但也可能导致数据丢失。 总结: - Vector 和 ArrayList 都实现了 List 接口,其中 Vector ...

    集合类及其分支

    WeakHashMap是一种特殊的哈希表,它使用弱引用作为键,当键不再被引用时,即使没有显式地从集合中移除,也会自动清理。 **Map接口** Map接口存储键值对,不直接继承自Collection接口。常见的Map实现有Hashtable、...

    java集合总结.pdf

    WeakHashMap是Map接口的基于弱键的实现,以弱键实现的基于哈希表的Map。在WeakHashMap中,当某个键不再正常使用时,将自动移除其条目。 Java集合类提供了多种实现,用于解决不同的数据存储和操作问题。开发者可以...

    set,list,map区别与联系.docx

    - **WeakHashMap**和**IdentityHashMap**:特殊类型的Map,WeakHashMap的键使用弱引用,键在不再被引用时会被自动清理;IdentityHashMap使用对象的引用地址而非equals()方法来判断键的相等性。 4. **关联操作** -...

    picketlink-jbas-common-2.6.0.CR4.zip

    【描述】"Java-WeakIdentityHashMap.zip, weakhashmap identityhashmapa独立库的组合,用于weakidentityhashmap实现内/外字段" 描述的是一个特定的Java数据结构实现,即WeakIdentityHashMap。这是一个结合了...

    2019阿里内推面经1

    而在`WeakHashMap`中,键是弱引用,当垃圾回收器回收了键所引用的对象,`WeakHashMap`会自动移除相应的键值对,从而允许垃圾回收。 最后,`IdentityHashMap`是一个特殊版本的哈希表,它使用对象的内存地址(`==`...

    Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.

    WeakHashMap是一种特殊的Map实现,它使用弱引用作为键,当键不再被引用时,即使在Map中,也会被垃圾回收器清除,从而释放内存资源。 总结来说,选择哪种容器取决于具体的需求:如果需要有序的元素集合,可以使用...

    Java集合框架完整说明便于了解集合

    3. Map接口:Map用于存储键值对,HashMap、HashTable、TreeMap和WeakHashMap等是其实现。HashMap提供非同步的快速查找,HashMap的长度通常是2的幂次方,以优化哈希分布。HashTable是线程安全的,但效率较低。TreeMap...

    java集合的介绍很全

    这意味着当没有强引用指向这些键时,垃圾回收器可以回收它们,即使它们仍然存在于`WeakHashMap`中。这使得`WeakHashMap`非常适合用于缓存场景,其中键可能不再被程序的其他部分使用。 总之,Java集合框架提供了一...

    清华妹子的Java仓库(进阶学习路线)

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的...Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读

    多年的开发经验,与大家共享

    `WeakHashMap`使用弱引用作为键,当键不再被其他对象引用时,即使没有调用`remove`,键值对也会自动从`WeakHashMap`中消失,这是一种内存管理策略。 了解并熟练运用这些基础数据结构和集合框架,对于提升开发效率和...

    java基础之集合面试题共4页.pdf.zip

    HashMap提供了快速的查找,TreeMap保持键的排序,LinkedHashMap保持插入顺序或访问顺序,WeakHashMap则允许弱引用键。 6. **泛型**:Java集合框架广泛使用泛型来保证类型安全,避免强制类型转换并提供更好的代码...

Global site tag (gtag.js) - Google Analytics