Java 堆外Map工具

KV键值对存储大家都很熟悉了,Java 中的 map 都是在堆内存储,如果我们遇到一种情况是map特别大,每次GC我们不想释放这些空间,那么这一部分缓存数据又该如何处理呢?当然大家说可以使用第三方缓存组件:Redis,HBase,MongoDB,今天给大家多一种选择:堆外内存。

今天要给大家介绍的是一款使用堆外内存构建本地缓存行的工具:Chronicle-Map 。官网上给出该工具的特性:

  • 高吞吐量,低延迟,跨进程,持久键值存储;

  • 堆外数据存储,延迟时间为微秒;

  • 基于ConcurrentHashMap;

  • TCP连接;

  • 弹性写入,如果进程终止,则最后一次写入不会丢失;

  • 仅复制最新值即可支持很高的更新率;

  • 超低延迟:在某些测试中,Chronicle Map的目标是读取和写入查询的平均延迟小于1微秒;

  • 高并发性:写查询可以很好地扩展到服务器中硬件执行线程的数量。读取查询永远不会互相阻塞;

  • 磁盘持久性 -(可选);

  • 多主复制 -(可选,商业功能)-最终一致的,完全冗余的服务器间异步复制,默认情况下“最后写入胜出”策略允许实现基于状态的自定义CRDT策略。

下面说一下使用方式:

Copy
<dependency> <groupId>net.openhft</groupId> <artifactId>chronicle-map</artifactId> <version>3.17.2</version> </dependency>

创建一个普通的KV存储:

Copy
ChronicleMap<Long, String> userMap = ChronicleMap .of(Long.class, String.class) .name("user-map") .entries(50) .create(); userMap.put(1122L,"xiaming");

创建一个String 类型的 map,初始值为50个空间。

创建可持久化的KV存储:

Copy
try { ChronicleMap<Long, String> persistedUserMap = ChronicleMap .of(Long.class, String.class) .name("user-map") .entries(50) .createPersistedTo(new File(System.getProperty("user.home") + "/user.data")); } catch (IOException e) { e.printStackTrace(); }
posted @   rickiyang  阅读(1659)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示

"万一有人喜欢我呢"