1. 程式人生 > >《JDK10新特性官方文件》在可選記憶體裝置上的分配堆記憶體

《JDK10新特性官方文件》在可選記憶體裝置上的分配堆記憶體

原文連結

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

概要

允許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正是這類例子。這些檔案系統中的記憶體對映檔案可繞過頁面快取並提供虛擬記憶體到裝置實體記憶體的直接對映。

要在這樣的記憶體中分配堆,我們可以新增一個新選項-XXAllocateHeapAt = <path>。此選項將採用檔案系統的路徑並使用記憶體對映來實現在記憶體裝置上分配堆物件 JEP不打算在多個正在執行的JVM之間共享一個非易失性區域,或者重用一個區域來呼叫JVM

現有堆相關引數(如-Xmx-Xms等)和垃圾收集相關引數將繼續像以前一樣有效

為確保應用程式實現的安全性,必須確保在檔案系統中建立的檔案是:

1.受正確許可權保護,以防止其他使用者訪問它。

2.在任何可能情況下,應用程式終止時刪除。

測試

測試不一定需要任何特殊的記憶;它可以在例如ramfstmpfs記憶體中的檔案系統上執行。