Ill*_*huk 42 java memory hashmap
考虑以下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;
}
Run Code Online (Sandbox Code Playgroud)
看来,对象的内部数组(table)Entry永远不会收缩.因此,当我向地图添加10000个元素时,在该调用之后map.clear(),它将在其内部数组中保留10000个空值.所以,我的问题是,JVM如何处理这个数组,因此,HashMap内存是否有效?
Joa*_*uer 62
这个想法clear()只有当你想重新使用它时才被调用HashMap.重复使用对象的原因与之前使用的原因相同,因此您可能会有大致相同的条目数.为了避免无用的收缩和调整Map容量,clear()调用时容量保持不变.
如果您要做的只是放弃数据Map,那么您不需要(实际上不应该)调用clear()它,而只需清除对Map自身的所有引用,在这种情况下,它最终将被垃圾收集.
pol*_*nts 10
看一下源代码,它看起来似乎HashMap永远不会缩小.resize调用该方法可以在需要时将大小加倍,但没有任何ala ArrayList.trimToSize().
如果你以一种HashMap经常增长和缩小的方式使用a ,你可能只想创建一个新的HashMap而不是调用clear().
| 归档时间: |
|
| 查看次数: |
92495 次 |
| 最近记录: |