当前位置: 首页 > 面试题库 >

Java HashMap.clear()和remove()内存有效吗?

彭畅
2023-03-14
问题内容

考虑以下HashMap.clear()代码:

 /**
 * Removes all of the mappings from this map.
 * The map will be empty after this call returns.
 */
public void clear() {
    modCount++;
    Entry[] tab = table;
    for (int i = 0; i < tab.length; i++)
        tab[i] = null;
    size = 0;
}

似乎对象的内部数组(tableEntry从未缩小。因此,当我向地图添加10000个元素,并且在调用之后map.clear(),它将在其内部数组中保留10000个null。因此,我的问题是,JVM如何处理没有任何内容的数组,因此HashMap内存有效吗?


问题答案:

这个想法是clear()仅在您想重新使用时才调用HashMap。重复使用对象的原因仅应与以前使用过的原因相同,因此,您的条目数将大致相同。为避免无用的收缩和Map容量调整,在clear()调用时应保持不变。

如果您要做的只是丢弃中的数据Map,则无需(实际上也不应)调用clear()它,而只需清除对Map自身的所有引用,在这种情况下,最终将对其进行垃圾收集。



 类似资料:
  • 问题内容: 我有两个用Go编写的类似程序的示例。该代码的主要目的是使用结构中的值对结构进行排序。 指针示例 有值的例子 我想知道2分钟: 哪个示例将提高内存效率?(我想这是一种指针方式) 如何使用地图中具有不同数量结构的测试数据来衡量这些示例的性能?您能帮我建立基准吗? 我认为地图中每个结构的大小平均在1-2kB之间。 问题答案: “高效内存”是一个相当宽泛的术语,在诸如Go之类的垃圾收集语言中,

  • 问题内容: 我存储了1.11亿个键值对(一个键可以有多个值-最多2/3),它们的键是50位整数,值是32位(最大)整数。现在,我的要求是: 快速插入(键,值)对[允许重复] 基于键快速检索一个或多个值。 这里基于MultiMap给出了一个很好的解决方案。但是,我想在主内存中存储更多键/值对,而不会降低性能。我从网络文章中研究到B +树,R+树,B树,紧凑多图等可以是一个很好的解决方案。有谁能够帮我

  • 问题内容: 我有一个〜10M记录的MySQL表,可以使用SqlAlchemy进行交互。我发现对这个表的大子集的查询将消耗过多的内存,即使我以为我使用的是内置生成器,它可以智能地获取数据集的一口大小的块: 为了避免这种情况,我发现我必须构建自己的迭代器,该迭代器会分块地进行处理: 这是正常的还是关于SA内置发电机我缺少什么? 这个问题的答案似乎表明内存消耗是不希望的。 问题答案: 大多数DBAPI实

  • 本文向大家介绍内存泄漏和内存溢出有什么区别相关面试题,主要包含被问及内存泄漏和内存溢出有什么区别时的应答技巧和注意事项,需要的朋友参考一下 内存泄漏是分配的内存无法释放,导致一直占用内存空间,最终可能引发内存溢出 内存溢出是申请或使用内存超出可以分配的内存时(例如往一个整形空间存放长整形的数据) 参考文章

  • 问题内容: 我的磁盘中有40MB的文件,我需要使用字节数组将其“映射”到内存中。 最初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻它会占用约160MB的堆空间。 有人知道不使用三倍于RAM的文件大小的更好方法吗? 更新: 感谢您的回答。我注意到我可以减少内存消耗,告诉ByteArrayOutputStream初始大小比原始文件的大小稍大

  • 本文向大家介绍在 Queue 中 poll()和 remove()有什么区别?相关面试题,主要包含被问及在 Queue 中 poll()和 remove()有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 相同点:都是返回第一个元素,并在队列中删除返回的对象。 不同点:如果没有元素 remove()会直接抛出NoSuchElementException 异常,而 poll()会返回 null