我使用了YourKit分析器,我试图分析为什么这个散列表和它的互斥锁保留高达196 KB;此处附有图片。 是的,这是一个问题,因为我有大约2000个对象保留196 kb的数据;这是一个潜在的问题。 这是一个线程安全的环境;因此使用哈希表而不是其他任何东西。
答案 0 :(得分:0)
如果我使用ConcurrentHashMap或任何其他数据结构,保留的大小会减少吗?
减少容量的最佳方法是明确设置初始容量(它是构造函数的参数)。
通常,最好使用ConcurrentHashMap,因为它使用剥离技术,然后比Hashtable更具性能。
在这种情况下,互斥是你的Hashtable实例。这就是为什么你看到这个占用的大小,因为你看到一个对象两次。
Hashtable(与许多其他hashmap等一样)具有动态大小。 Hashtable.size - 是保留内部哈希表的实际大小,与Hashtable.count不同,后者是元素的数量。
唯一占据更大尺寸部分的地方是Hashtable本身,所以进入Hashtable.table并看看它是什么。