Java 10 堆分配增强:支持 NV-DIMM 等替代内存设备
JEP 316:堆分配在替代内存设备
Java 10 允许指定替代内存设备(如 NV-DIMM 非易失性内存)作为 Java 堆分配位置,通过新选项 -XX:AllocateHeapAt 实现。
使用语法
java -XX:AllocateHeapAt=/path/to/nvdimm/mountpoint -Xmx4g -Xms4g YourApp
- 参数为文件系统路径,JVM 通过内存映射(mmap)实现堆分配。
- 原有堆选项
-Xmx、-Xms、-Xmn等继续生效,限制堆大小范围。
典型场景
- 大内存数据库/缓存:堆驻留 NV-DIMM,重启后数据可快速恢复(配合持久化框架)。
- 高密度部署:单机运行多实例,DRAM 容量受限时将部分堆溢出至 NVM。
- 快速重启:类元数据、编译代码缓存等若也置于持久内存,可实现秒级热启动。
前提与限制
- 操作系统需支持 NVM 文件系统(Linux: ext4/xfs DAX 模式、Windows: NTFS DAX)。
- 文件系统挂载需
dax选项绕过页缓存,直接映射物理介质。 - JVM 仅负责映射,不负责持久化一致性——应用层需自行管理数据持久化逻辑。
- 目前仅支持 Linux/x64 与 Windows/x64。
相关生态
配合 java.lang.foreign (Java 19+)、PMem 库、MapDB、Chronicle Map 等持久化框架,可构建真正的持久化内存应用。
java
- C语言动态内存分配完全指南:malloc、calloc、realloc 与 free
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 10 堆分配增强:支持 NV-DIMM 等替代内存设备