JEP 316: 在可选内存设备上的分配堆内存
Owner |
Kishor Kharbas |
Created |
2016/12/13 19:31 |
Updated |
2018/03/20 20:32 |
Type |
Feature |
Status |
Closed / Delivered |
Component |
hotspot / gc |
Scope |
JDK |
Discussion |
hotspot dash dev at openjdk dot java dot net |
Effort |
M |
Duration |
M |
Priority |
3 |
Reviewed by |
Mikael Vidstedt |
Endorsed by |
Mikael Vidstedt, Vladimir Kozlov |
Release |
10 |
Issue |
|
概要
允许HotSpot VM在用户指定的备用内存设备(如NV-DIMM)上分配Java堆对象。
动机
有了便宜的NV-DIMM内存,未来的系统可能配备异构内存架构。这种技术的一个例子是英特尔的3D XPoint。除DRAM之外,这种架构将具有一种或多种具有不同特性的非DRAM存储器。
该JEP针对与DRAM具有相同语义的可替代存储器设备,包括原子操作的语义,因此可以替代DRAM用于对象堆,而无需对现有应用程序代码进行任何更改。所有其他内存结构,如代码堆,元空间,线程堆栈等将继续驻留DRAM中。
此提议的一些使用案例是:
1.在多JVM部署中,某些JVM,如守护进程,服务等的优先级低于其他进程。与DRAM相比,NV-DIMM可能具有更高的访问延迟。低优先级进程可以为堆使用NV-DIMM内存,允许高优先级进程使用更多DRAM。
2.大数据和内存数据库等应用程序对内存的需求不断增加。这种应用可以将堆内存分配在NV-DIMM,因为与DRAM相比,NV-DIMM可能具有更大的容量,更低的成本。
描述
一些操作系统已经通过文件系统暴露非DRAM内存。NTFS DAX模式和ext4 DAX正是这类例子。这些文件系统中的内存映射文件可绕过页面缓存并提供虚拟内存到设备物理内存的直接映射。
要在这样的内存中分配堆,我们可以添加一个新选项-XX:AllocateHeapAt = <path>。此选项将采用文件系统的路径并使用内存映射来实现在内存设备上分配堆对象。 JEP不打算在多个正在运行的JVM之间共享一个非易失性区域,或者重用一个区域来调用JVM。
现有堆相关参数(如-Xmx,-Xms等)和垃圾收集相关参数将继续像以前一样有效。
为确保应用程序实现的安全性,必须确保在文件系统中创建的文件是:
1.受正确权限保护,以防止其他用户访问它。
2.在任何可能情况下,应用程序终止时删除。
测试
测试不一定需要任何特殊的记忆;它可以在例如ramfs或tmpfs的内存中的文件系统上执行。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/66244.html