ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

直接操作原生内存:Chronicle-Core Value接口读写long、int与String的完整API手册

直接操作原生内存:Chronicle-Core Value接口读写long、int与String的完整API手册 直接操作原生内存Chronicle-Core Value接口读写long、int与String的完整API手册【免费下载链接】Chronicle-CoreLow level access to native memory, JVM and OS.项目地址: https://gitcode.com/gh_mirrors/ch/Chronicle-CoreChronicle-Core是 Chronicle 系列的底层基石提供对原生内存、JVM 和操作系统的高级访问能力。本文带你快速掌握它最实用的功能之一通过net.openhft.chronicle.core.values包中的Value 接口在堆外内存上直接读写long、int与String无需中间包装对象性能更优、延迟更低。为什么需要 Value 接口传统 Java 中每次读写一个字段都会触发装箱boxing和对象创建带来 GC 压力。而 Chronicle-Core 的 Value 接口把值抽象成一个可寻址的引用零包装对象直接操作内存中的二进制数据避免Long、Integer等包装类支持堆外存储底层实现基于MemoryAPIOS.memory()操作原始内存地址可作用于 DirectByteBuffer、内存映射文件等内建并发语义提供 volatile 读写、原子加、compare-and-swap 等操作天然适配高并发场景 简单理解把值从 Java 对象世界里搬到了原生内存里接口只是操作它的把手。LongValue读写 long 的完整 APILongValue继承Closeable是并发功能最齐全的 Value 接口源码位于src/main/java/net/openhft/chronicle/core/values/LongValue.java。基础读写方法说明long getValue()读取当前值void setValue(long value)写入新值long getVolatileValue()以 volatile 语义读取带内存屏障保证可见性void setVolatileValue(long value)以 volatile 语义写入void setOrderedValue(long value)以有序语义写入之前写入不会被重排到其后long getVolatileValue(long closedValue)资源已关闭时返回给定的兜底值避免抛异常原子与并发操作方法说明long addValue(long delta)累加并返回新值long addAtomicValue(long delta)原子累加对所有线程可见boolean compareAndSwapValue(long expected, long value)CAS期望值匹配才更新返回是否成功void setMaxValue(long value)原子地只涨不跌仅当 value 更大时更新void setMinValue(long value)原子地只跌不涨仅当 value 更小时更新一个典型的 CAS 用法示例long current value.getValue(); boolean swapped value.compareAndSwapValue(current, current 1);setMaxValue/setMinValue内部就是用读 volatile 值 → CAS → 失败则暂停重试的自旋循环实现的非常适合做单调递增的高水位线。IntValue读写 int 的 API 速查IntValue同样继承Closeable源码位于src/main/java/net/openhft/chronicle/core/values/IntValue.javaAPI 与 LongValue 风格一致方法说明int getValue()读取 32 位整数值void setValue(int value)写入新值int getVolatileValue()volatile 语义读取void setOrderedValue(int value)有序语义写入int addValue(int delta)累加并返回新值int addAtomicValue(int delta)原子累加boolean compareAndSwapValue(int expected, int value)CAS 原子更新注意getValue()可能抛出BufferUnderflowException数据不足setValue()可能抛出BufferOverflowException空间不足这在操作定长缓冲时要留意。StringValue原生内存上的可变 StringStringValue建模了存储在直接内存中的可变字符串源码位于src/main/java/net/openhft/chronicle/core/values/StringValue.java只有 3 个核心方法方法说明String getValue()读取当前字符串void setValue(MaxBytes CharSequence value)写入字符串可用MaxBytes约束编码后的最大字节数StringBuilder getUsingValue(StringBuilder sb)将值读入你提供的 StringBuilder避免新建 String 对象sv.setValue(example); String text sv.getValue(); StringBuilder sb new StringBuilder(); sv.getUsingValue(sb); // 零额外 String 分配的读取方式MaxBytes给字符串限重MaxBytes注解见src/main/java/net/openhft/chronicle/core/values/MaxBytes.java可标注在方法参数上声明变长数据的最大编码字节数默认 64 字节。实现方据此强制执行内存上限防止堆外空间被超长字符串撑爆——这是原生内存编程中很好的安全护栏。进阶TwoLongValue 与数组 ValueTwoLongValue继承LongValue表示一对 long。getValue()/setValue()操作第一个值另有一套带2后缀的方法getValue2()、compareAndSwapValue2()、addAtomicValue2()等操作第二个值常见于高 64 位 低 64 位组合成 128 位数的场景。LongArrayValues/IntArrayValues对原生内存中原始类型数组的类型化视图提供getCapacity()、getUsed()/setUsed()、getValueAt(index)、setValueAt(index, value)、compareAndSet(index, expected, value)以及bindValueAt(index, value)——把一个可复用的LongValue绑定到指定下标上反复操作同一元素时无需重复寻址。完整的接口清单含BooleanValue、ByteValue、CharValue、ShortValue、FloatValue、DoubleValue可直接查阅官方文档src/main/docs/value-interfaces-guide.adoc。异常安全两个必须知道的 IllegalStateException几乎所有 LongValue / IntValue 方法都声明了两种运行时异常新手务必了解异常触发条件应对ClosedIllegalStateException资源已释放或关闭关闭前检查isClosed()或使用getVolatileValue(closedValue)这类兜底重载ThreadingIllegalStateException以不安全的并发方式访问资源并发访问只走 volatile / 原子方法这两种异常定义在src/main/java/net/openhft/chronicle/core/io/目录下是 Chronicle-Core 确定性资源管理思想的体现问题在第一时间暴露而不是静默出错。总结一张表看懂如何选择场景推荐接口并发计数器、状态标志64 位LongValue32 位整型字段读写IntValue堆外可变字符串StringValuegetUsingValue128 位数值或双 long 字段TwoLongValue原生内存数组LongArrayValues/IntArrayValuesChronicle-Core 的 Value 接口把原生内存读写封装成了简洁的类型安全 API你只需关心getValue/setValue/compareAndSwapValue底层的内存屏障与原子性由框架保证。掌握这套 API你就拿到了 Chronicle 系列Bytes、Map、Queue高性能设计的钥匙 延伸阅读Value 接口完整指南src/main/docs/value-interfaces-guide.adoc接口源码目录src/main/java/net/openhft/chronicle/core/values/内存映射底层支持src/main/java/net/openhft/chronicle/core/OS.java、src/main/java/net/openhft/chronicle/core/Memory.java【免费下载链接】Chronicle-CoreLow level access to native memory, JVM and OS.项目地址: https://gitcode.com/gh_mirrors/ch/Chronicle-Core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表