Java的HashMap可以默默地溢出吗?

时间:2014-10-30 16:24:50

标签: java memory-management hashmap overflow

在Java中,java.util.HashMap<Key, Value>是否可以静默溢出,因此在没有收到异常或其他通知的情况下删除内容?如果是的话,我该如何让它变得明显?

我的意思是它可以超过物理硬件内存,而不是HashMap对象的保留内存。

3 个答案:

答案 0 :(得分:3)

来自docs

  

当哈希表中的条目数超过产品时   加载因子和当前容量,哈希表重新哈希   (即重建内部数据结构)以便哈希表   大约有两倍的桶数

HashMap永远不会“溢出”,它只会调整大小。这将一再发生,直到你的内存不足,这将导致very loud error

答案 1 :(得分:2)

不,HashMap s不会自动驱逐元素。如果存储桶太满,则会扩展存储桶并自动重新处理所有元素。

答案 2 :(得分:2)

其他答案是正确的,但有一个奇怪的边缘情况。请参阅Theoretical limit for number of keys (objects) that can be stored in a HashMap?以及有关Map中的条目多于Integer.MAX_VALUE时会发生什么情况的讨论。

因此理论上它是可行的 - 如果你以某种方式设法打破了这个限制(几乎不可能) JVM幸存下来处理那么多对象(这几乎是不可能的)你的程序幸存下来(这几乎是不可能的)然后不仅对象开始似乎从你的Map消失了,但你将在{{3}获得早餐的一半} 如果你今天早上做了六件不可能完成的事情,为什么不在Milliways,宇宙尽头的餐厅吃早餐呢?