我发现在HashMap
中有一个内部类Holder
,其描述如下:
/**
* holds values which can't be initialized until after VM is booted.
*/
这个类是用来干什么的?我们何时需要使用它?请解释一下。
我发现在HashMap
中有一个内部类Holder
,其描述如下:
/**
* holds values which can't be initialized until after VM is booted.
*/
这个类是用来干什么的?我们何时需要使用它?请解释一下。
相关文档:
当遇到大量键散列冲突时,备用哈希函数可以提高这些映射实现的性能。
对于Java SE 7u6,备用哈希函数的实现如下:
备用哈希函数仅适用于容量大于指定阈值大小的映射。默认情况下,阈值为
-1
。此值禁用了备用哈希函数。要启用备用哈希函数,请将jdk.map.althashing.threshold
系统属性设置为不同的值。建议值为512
。将此系统属性设置为512
会导致所有容量大于512个条目的映射使用备用哈希函数。您可以将此系统属性设置为0
,这会导致所有映射都使用备用哈希函数。...
和
7u6 中添加的替代
String
哈希函数已从 JDK 8 中删除,同时也删除了jdk.map.althashing.threshold
系统属性。相反,包含大量冲突键的哈希桶通过将其条目存储在平衡树中而不是链接列表中来提高性能。
jdk.map.althashing.threshold
系统属性。sun.misc.VM.isBooted()
调用的保护。