问题标签 [off-heap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 下载的大文件的堆外存储
我有多个需要每小时下载的大文件(大约 10-12 个文件,每个 1-2Gb)。我将它们存储为 Hashmap,其中键是文件版本,值是字符串列表中的文件内容。我们面临的问题是,每小时下载新文件时,GC 会启动并清理旧文件,这会导致系统长时间停顿,因为文件很大。我正在考虑一个解决方案,我们可以在堆外存储这些文件内容。为此,我们探索了编年史地图。
问题 1:下载时,操作系统是否使用任何堆上缓冲区或数据结构?如果是,那么我是否将文件存储在堆外也没关系,因为堆上内存已经分配。有没有办法在堆外下载和存储文件,而根本不使用堆内存来存储文件?
问题 2:有没有办法将文件存储在堆外,并在我的 hashmap 中保留这个内存的引用作为值,从而避免使用任何特殊的数据结构,如 Chronicle map。
java - 当堆外内存已满时,Chronicle 映射如何表现?
我下载了一些文件,并使用内存中的编年史地图将它们存储在堆外。当我超过可用的本机(堆外)内存量时,我想了解编年史地图的行为。我有两个问题:
- 数据会溢出到磁盘吗?如果没有,究竟会发生什么?如果我们遇到错误,避免此类错误的最佳方法和做法是什么?
- 如果我们在完成使用它们后不关闭编年史地图(或者如果我们有内存泄漏),它会继续填满堆内存吗?当堆外内存已满时会导致JVM失败,还是操作系统会介入并为我们清理?
java - 使用java堆外内存和兼容性
在 Java 8 中,我使用以下代码来分配和管理堆外内存。
这将导入类 sun.misc.Cleaner 和 sun.nio.ch.DirectBuffer;这在 Java 16 中不可用。在 Java 16 下,我需要使用外部内存 API,如下所示,但是该 API 在 Java 8 中不可用。
有没有办法分配堆外内存并使我的源代码与 Java 8 和 16 兼容?