java获取ram_Java:ChronicleMap第2部分,超级RAM映射
java獲取ram
諸如無處不在的HashMap類的標準Java Map最終受到可用RAM的限制。 閱讀本文并了解如何創建幾乎無限大小甚至超過目標計算機RAM大小的Java Map。
內置的Map實現,例如HashMap和ConcurrentHashMap ,只要它們相對較小,就可以正常工作。 在所有情況下,它們都受可用堆的限制,因此最終受可用RAM大小的限制。 ChronicleMap可以將其內容存儲在文件中,從而規避了此限制,為TB級映射打開了空間,如有關CronicleMap系列文章的第二篇文章所示。
在我之前的第一篇文章中了解有關CronicleMap基礎的更多信息。
文件映射
通過在ChronicleMap構建器上調用createPersistedTo()方法來進行文件映射,如下所示:
private static Map<Long, Point> createFileMapped() {try {return ChronicleMap.of(Long.class, Point.class).averageValueSize(8).valueMarshaller(PointSerializer.getInstance()).entries(10_000_000).createPersistedTo(new File("my-map"));} catch (IOException ioe) {throw new RuntimeException(ioe);} }這將創建一個Map,將其內容布局在名為“ my-map”的內存映射文件中,而不是直接內存中。 以下示例說明了如何創建1000萬個Point對象并將其全部存儲在文件映射圖中:
final Map<Long, Point> m3 = LongStream.range(0, 10_000_000).boxed().collect(toMap(Function.identity(),FillMaps::pointFrom,(u, v) -> {throw new IllegalStateException();},FillMaps::createFileMapped));以下命令顯示了新創建的文件:
Pers-MacBook-Pro:target pemi$ ls -lart my-map -rw-r--r-- 1 pemi staff 330305536 Jul 10 16:56 my-map可以看出,該文件約為33 MB,因此,每個條目平均占用33個字節。
堅持不懈
當JVM終止時,映射文件仍然存在,從而可以輕松地拾取先前創建的包含其內容的映射。 這非常類似于基本的超快數據庫。 這是我們從現有文件開始的方法:
return ChronicleMap.of(Long.class, Point.class).averageValueSize(8).valueMarshaller(PointSerializer.getInstance()).entries(10_000_000).createOrRecoverPersistedTo(new File("my-map"));該Map將直接可用,包括以前的內容。
Java Map超出RAM限制
內存映射文件的一個有趣方面是,它們可以超過堆和RAM的限制。 文件映射邏輯將確保當前使用的部件按需加載到RAM中。 映射邏輯還將在物理內存中保留已訪問映射內存的最近部分,以提高性能。 這發生在幕后,不需要由應用程序本身進行管理。
我的臺式計算機是只有16GB內存的較舊的MacBook Pro(是的,我知道那很糟)。 不過,我可以分配一個Map其中包含10億個條目,它們可能占用33 * 1,000,000,000 = 33 GB的內存(我們從上面記得,每個條目平均占用33個字節)。 代碼如下:
return ChronicleMap.of(Long.class, Point.class).averageValueSize(8).valueMarshaller(PointSerializer.getInstance()).entries(1_000_000_000).createPersistedTo(new File("huge-map"));即使我嘗試用2倍于我的RAM大小來創建Java Map,代碼也可以完美運行,并得到以下文件:
Pers-MacBook-Pro:target pemi$ ls -lart | grep huge-map -rw-r--r-- 1 pemi staff 34573651968 Jul 10 18:52 huge-map不用說,您應該確保要映射的文件位于具有較高隨機訪問性能的文件系統上。 例如,位于本地SSD上的文件系統。
摘要
ChronicleMap可以映射到外部文件
JVM退出時保留映射的文件
新的應用程序可以選擇現有的映射文件 ChronicleMap可以容納的數據多于RAM 映射文件最好放置在隨機訪問性能高的文件系統上
翻譯自: https://www.javacodegeeks.com/2019/08/java-chroniclemap-super-ram-maps.html
java獲取ram
總結
以上是生活随笔為你收集整理的java获取ram_Java:ChronicleMap第2部分,超级RAM映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阆苑仙葩读音 阆苑仙葩的意思
- 下一篇: 惊讶的意思是什么 惊讶的意思简单介绍