IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Guava

共 2 篇相关文章

IT 累计浏览 2,346

从LongAdder看更高效的无锁实现

这篇讲的是作者从阅读Guava源码时接触到AtomicLong出发,为何要深入研究Doug Lea设计的LongAdder。文章的核心在于解析LongAdder如何实现比AtomicLong更高并发性能的无锁计数。 我们知道,AtomicLong的高效依赖CAS操作,但在高并发下,大量线程竞争同一个value变量会导致频繁的CAS失败与重试,形成恶性循环。LongAdder的核心实现思路正是解决这个问题:它采用“分段更新”的策略,将单一value的压力分散到一个Cell数组中。 具体来说,当CAS更新base值失败时,LongAdder会根据线程信息将更新操作分散到cells数组的某个Cell单元上。每个线程尽可能只更新自己命中的那个Cell的value值,从而极大降低了高并发下的冲突概率。只有当需要获取总数时,才将base值与所有Cell的value累加。文章还巧妙地分析了其中的权衡:在低并发时,CAS更新base值大概率成功,不会立即进入分段逻辑,从而兼顾了空间与效率。此外,当分段更新本身也失败时,`retryUpdate`方法会进行cells数组的扩容和重哈希,进一步降低冲突。 作者通过逐行解析`add`方法和`retryUpdate`逻辑,清晰地揭示了这种以空间换时间、通过降低热点数据“热度”来换取吞吐量提升的精妙设计。这正是一篇典型的源码分析文章,带我们看到了高并发场景下无锁算法的一个经典优化范例。

IT 累计浏览 2,345

Google Guava V11 中的Cache操作

这篇讲的是 Java 生态中广受欢迎的本地内存缓存组件 Google Guava Cache,并聚焦于 V11 版本带来的核心操作与新特性。作者从实际应用场景出发,清晰地拆解了 Guava Cache 的主要功能点:它不仅仅是一个简单的键值存储,更提供了基于容量、时间、引用等多种灵活的驱逐策略,确保缓存既能高效利用内存,又能保持数据的“新鲜度”。 文章特别提到了 V11 版本中引入的重要增强,比如新增的 `RecordStats` 统计功能,能让你轻松监控缓存的命中率、加载耗时等关键指标,这对于性能调优至关重要。同时,也对 CacheBuilder 的构建方式做了细致讲解,展示了如何通过流畅的 API 链式配置出满足业务需求的缓存实例。 对于开发者而言,这篇文章的价值在于它不仅解释了“是什么”,更侧重于“怎么用”和“为什么好”。它帮助读者理解,Guava Cache 如何以极低的集成成本,为单机应用提供高性能、细粒度控制的缓存能力,尤其适用于需要快速访问且允许短暂不一致的场景。如果你正在设计本地缓存方案,文章中对策略选型的讨论会提供直接的参考。