java - Guava - intialCapacity 和 concurrencyLevel 的区别
问题描述
番石榴文档说
设置内部哈希表的最小总大小。例如,如果初始容量为 60,并发级别为 8,则创建 8 个段,每个段都有一个大小为 8 的哈希表。在构建时提供足够大的估计可以避免以后进行昂贵的调整大小操作,但是将此值设置得不必要的高会浪费内存。
那么initialCapacity
如果要创建 8 个 8 行的表,那么使用它有什么意义呢?这是一些文档错字吗?
解决方案
在底层,Guava 的缓存被实现为多个哈希表,每个哈希表都有一个专用锁,因此并发写入不会都在一个锁上竞争。
initialCapacity
指整个缓存的容量,而不是每个单独的基础表。8 个大小为 8 的表可以一起处理多达 64 个元素,因此文档是正确的。
推荐阅读
- javascript - React:如何继承 PropTypes?
- angular - 如何使用 *ngIf 显示基于 *ngFor 循环的一行文本?
- google-apps-script - 为什么执行 Apps 脚本时出现错误 409?
- postgresql - Docker swarm 在容器中执行命令
- excel - 满足条件的 Excel VBA 停止代码
- kabanero - 如果我在 Kabanero Foundation 安装期间提供了错误的子域名,如何解决?
- sql - 解决 Oracle order by query 的性能开销
- c++ - C++17,制作一个使用依赖于模板参数的 std::variant 的可变参数模板?
- c# - 项目的默认XML命名空间必须是在Visual Studio 2017.0中安装.Net Core 3后的MSBuild XML命名空间错误
- sql-server - BULK INSERT 完成,0 行受影响。SSMS v18.2