java - HashMap.clear() 减少内存?

标签 java memory hashmap

System.gc();
System.out.println((Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/1024/1024);// print 1M

Map map=new HashMap();
for(int i=0;i<100000;i++){
    map.put("key"+i,"i");
}
System.gc();
System.out.println((Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/1024/1024); //print 10M

map.clear();
System.gc();
System.out.println((Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));//print less than 1M

似乎调用clear方法时内存减少了。但是,从其他答案来看,clear 方法似乎永远不会缩小 HashMap。那么为什么内存会减少呢?

最佳答案

如果您指的是 this question's answers ,他们告诉您 HashMap 中的条目数组 (table) 永远不会缩小。相反,它的条目都设置为 null

但是清除 map 会使您创建的 100,000 个字符串("key0""key1"、...)及其关联的 Map.Entry 符合垃圾回收条件的对象,尽管 table 没有变小。

关于java - HashMap.clear() 减少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73363072/

相关文章:

java - 应用程序窗口获得焦点并调整大小

java - 我应该搜索 HashMap 中所有具有 values = null 的键并删除它们。我怎样才能做到这一点?

Java - System.out.println() 可从应用程序中查看吗?

Java EE 与 Java SE : version mismatch?

java - 用android的字符串计算

c++ - 分配派生类时使用现有的基类对象

java - 在 "Out Of Memory"之后在哪里可以找到堆转储

java - Docker 容器 - JVM 内存峰值 - Arena block 内存空间

java - 为什么我的 HashMap 识别出不应该是键的散列键?

java - 比双重嵌套的 ArrayList 更有效?