2017-09-21 48 views
0

我已经使用YourKit分析器,我想分析为什么这个哈希表和它的互斥体保留高达196 KB; The图片在这里附上。 是的这是一个问题,因为我有大约2000个对象保留196 kb的数据;这是一个潜在的问题。 这是一个线程安全环境;因此使用散列表代替其他任何东西。哈希表中保留的大小,它的互斥体

+0

为什么你只是不去深入看看哪些元素得到这个大小? – egorlitvinenko

+0

@egorlitvinenko在互斥体内有一个表,它包含占用80%完整散列表占用空间的表。如果我ConcurrentHashMap或任何其他数据结构的保留大小减少? – bhavs

+0

所提到的大小也是137,因为散列表中只有15个元素存在,为什么呢? – bhavs

回答

0

如果我ConcurrentHashMap或任何其他数据结构会保留大小减少?

减少容量的最佳方法是显式设置初始容量(它是构造函数的参数)。

通常,最好使用ConcurrentHashMap,因为它使用剥离技术和更高性能,然后使用Hashtable。

在这种情况下,互斥量就是你的Hashtable实例。这就是为什么你看到这个占用的大小,因为你看到一个对象两次。

散列表(与许多其他散列表等一样)具有动态大小。 Hashtable.size - 与保留内部哈希表的实际大小不同,它不同于Hashtable.count,它是元素的数量。

唯一的地方,更大的部分占用的是散列表本身,所以去Hashtable.table里面,你会看到,它是什么。