`
daojin
  • 浏览: 690015 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

WeakHahMap,HashMap和(垃圾回收)Gc

阅读更多
1.HashMap的问题:
   public class testHashMap{
        public static HashMap map;
         public static void main(String[] args){
                 addItem();
                 //下面如何得到放入HashMap的值 tempValue?
                  //问题代码:map.get(tempKey)?
         }
         public static void addItem(){
               //下面这句必须是new,如果仅仅是常量,则在map中仍然可以引用它。
               String tempKey=new String("test1");
               //下面这句可以不new
               String tempValue=new String("123");
               map.put(tempKey,tempValue);
          }
   }

    更严重的问题是,很多人以为垃圾回收器会去回收HashMap中无用的键?其实不会!!!
2.Java Core Code中提到的解决方案:
        WeakHashMap
    它回去回收无用的键和值。
3.WeakHashMap的问题:
     如果一个键真的是有用呢?而且仅仅是它对应的值在引用它!!
    伪代码:    
    
    class A{
    String id;
   public A(String id){
      id=id;
       }
    }
    class Test{
    public static void addItem(){
      String id=new String("abc");
      A a=new A(id);
       //关键地方:
       map.put(a.id,a);
     }
    }      
    

     垃圾回收器仍然不去回收这个无用的键和值。
//结论:
     1.HashMap 的键最好使用Const String,或者int等值型变量,不要用引用型变量。如果必须使用,则需要保证不用的时候将其键值对remove掉。(map.remove)
     2.WeakHashMap 可使用对象作为key,但是,如果符合如下条件将不回收:
        垃圾回收器认为除了键之外有地方在引用它,就像上面a.id在a中有引用。
//真正的感想: .以上只是个人的极端假想,在编程中,很少使用对像做为Key,除了“Const String“。
         本人因为太无聊,所以来研究了这些无聊的问题,这些问题怎么可能会在变成中出现??????
         因为我的Key从来都是Const String!!!!
         如果大侠们的"Key"习惯跟我不一样,敬请浏览一下上面代码,还望多多指教!
               

       欢迎交流。


分享到:
评论

相关推荐

    java入门、java内存区域和OOM、垃圾回收器和垃圾回收策略

    本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...

    HashMap和HashTable的区别和不同

    ### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,...- 在大多数现代Java应用程序中,由于`HashMap`提供了更好的性能和灵活性,它成为了首选的数据结构。

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...

    HashMap与HashTable和HashSet的区别

    这意味着如果一个键没有其他引用指向它,则该键可以被垃圾回收器回收。 #### 四、HashSet `HashSet`是一个不包含重复元素的`Set`,它是由`HashMap`实现的。`HashSet`实际上就是`HashMap`的一个特殊应用,其将所有...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...

    使用Java强引用和垃圾回收实现一个简单的缓存系统.txt

    ### 使用Java强引用和垃圾回收实现一个简单的缓存系统 #### 概述 本文将详细介绍一个基于Java语言的简单缓存系统实现方案。该系统利用Java中的强引用以及垃圾回收机制来管理缓存数据,确保内存的有效利用。通过...

    hashmap面试题_hashmap_

    当内存不足时,可能会触发垃圾回收,甚至出现OOM错误。 七、面试实战 面试中,可能会被问及HashMap的性能优化、内存占用分析、以及在特定场景下的选择,如并发环境、内存敏感的应用等。 总结,HashMap是Java编程中...

    降低Java垃圾回收开销的5条建议.docx

    总之,通过预测集合容量、直接处理数据流、合理设置垃圾回收器参数、使用对象池以及减少临时对象的创建,可以显著降低Java程序中垃圾回收的开销,进而提高整体性能和响应速度。这些技巧不仅适用于Java 9及更高版本,...

    HashMap介绍和使用

    ### HashMap介绍和使用详解 #### 一、HashMap的数据结构 HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。...

    JVM结构+垃圾回收器+锁总结.xmind

    JVM结构+垃圾回收器+锁总结

    HASHMAP缓存.txt

    在实际应用中,HashMap缓存可能会面临两个关键问题:缓存更新和垃圾回收。由于HashMap不会自动清除过期或不再使用的条目,开发者需要考虑何时以及如何更新或清除缓存中的数据。此外,虽然HashMap提供了高效的内存...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...

    Hashtable和HashMap区别

    在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都属于`Map`接口的实现类,用于存储键值对数据。尽管两者在功能上相似,但在实际应用中却存在显著差异。 #### 1. 历史与实现基础 `...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...

    Hashtable和HashMap的区别:

    在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...

    HashMap与HashTable区别

    在Java编程语言中,`HashMap`和`HashTable`是两种非常重要的数据结构,它们都实现了`Map`接口,并提供了键值对的存储方式。这两种数据结构虽然相似,但在实现细节和使用场景上存在显著差异。下面将详细介绍`HashMap`...

    hashmap实现原理

    哈希映射(HashMap)是Java编程语言中广泛使用的数据结构之一,主要提供键值对的存储和查找功能。HashMap的实现基于哈希表的概念,它通过计算对象的哈希码来快速定位数据,从而实现了O(1)的平均时间复杂度。在深入...

    比较Vector、ArrayList和hashtable hashmap

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

    HashMap和链表的查找效率比较

    在Java编程语言中,`HashMap`和`List`(通常指的是`ArrayList`或`LinkedList`)是两种常用的数据结构,它们各自在不同的场景下有着不同的性能优势。本工程通过`VS2013`(Visual Studio 2013,虽然它主要用于C++开发...

    HashMap之resize()方法源码解读.docx

    在创建新数组时,HashMap会根据旧数组的容量和扩容阈值来确定新数组的容量和扩容阈值。 三、将旧数组元素转移到新数组上 在创建新数组后,需要将旧数组元素转移到新数组上。这一步骤是resize()方法的核心所在。在...

Global site tag (gtag.js) - Google Analytics