开源推荐:Off-Heap Cache(OHC)
ohcJava large off heap cache项目地址:https://gitcode.com/gh_mirrors/oh/ohc
1、项目介绍
OHC 是一个不再维护的开源缓存解决方案,它专注于提供高效的离堆内存存储,适用于处理大量数据并最大化内存利用率。尽管不进行新功能开发,但其现有功能和性能在某些场景下仍然非常有价值。
2、项目技术分析
- 异步加载支持:OHC 支持异步加载缓存项,提高系统响应速度。
- 时间戳管理:提供了可选的条目级或默认的生存时间(TTL)/过期时间。
- 无单独线程的条目过期与剔除:在无需额外线程的情况下实现缓存条目的过期和剔除操作。
- 大规模内存管理:设计用于存储大量缓存内存。
- 兼容性:运行在 Java 8 和 Java 11 上,不支持 Java 7 及更早版本。
- 构建要求:使用 Java 11 或更高版本从源代码编译 OHC。
3、项目及技术应用场景
OHC 特别适合于以下场景:
- 大型分布式系统:在非均匀内存架构(NUMA)中,OHC 可以优化性能,减少跨节点访问的开销。
- 高性能缓存:对于需要快速存取数据且对内存有高需求的应用来说,OHC 提供了高效解决方案。
- 小对象存储:通过 chunked 实现,OHC 能够有效处理小尺寸的对象,降低存储开销。
4、项目特点
-
两种实现方式:
- 链接实现:适用于中到大尺寸的缓存项,使用 LRU 算法进行剔除。
- 分块实现:针对小型缓存项,预先分配内存,降低了小对象的内存开销(仍实验阶段)。
-
高性能:专为普通硬件和大型系统优化,利用
sun.misc.Unsafe
API 提高性能。 -
配置灵活:通过
OHCacheBuilder
进行多种参数设置,如段数、哈希表大小、负载因子等。 -
内存管理:直接分配内存绕过了 Java 的离堆内存限制,并推荐使用 jemalloc 减少碎片化。
-
序列化:通过自定义的
CacheSerializer
对键值进行序列化和反序列化。
总体而言,虽然 OHC 已经停止更新,但在理解和掌握其工作原理后,开发者可以将这些知识应用到新的缓存解决方案中,或者直接在现有的项目中使用 OHC,尤其是在旧版 Java 环境中,该项目可能仍然是一个可靠的工具。
ohcJava large off heap cache项目地址:https://gitcode.com/gh_mirrors/oh/ohc