首页 > 解决方案 > Guava - intialCapacity 和 concurrencyLevel 的区别

问题描述

番石榴文档说

https://guava.dev/releases/16.0/api/docs/com/google/common/cache/CacheBuilder.html#initialCapacity(int)

设置内部哈希表的最小总大小。例如,如果初始容量为 60,并发级别为 8,则创建 8 个段,每个段都有一个大小为 8 的哈希表。在构建时提供足够大的估计可以避免以后进行昂贵的调整大小操作,但是将此值设置得不必要的高会浪费内存。

那么initialCapacity如果要创建 8 个 8 行的表,那么使用它有什么意义呢?这是一些文档错字吗?

标签: javaguava

解决方案


在底层,Guava 的缓存被实现为多个哈希表,每个哈希表都有一个专用锁,因此并发写入不会都在一个锁上竞争。

initialCapacity指整个缓存的容量,而不是每个单独的基础表。8 个大小为 8 的表可以一起处理多达 64 个元素,因此文档是正确的。


推荐阅读