Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保证为JVM分配特定GB作为堆外内存_Java_Memory_Memory Management_Jvm - Fatal编程技术网

Java 如何保证为JVM分配特定GB作为堆外内存

Java 如何保证为JVM分配特定GB作为堆外内存,java,memory,memory-management,jvm,Java,Memory,Memory Management,Jvm,-Xmx10g保证JVM从操作系统获得10G用于进程。类似地,我希望为堆外使用保证特定数量的内存(比如4g) 如果我的机器的RAM是8GB,而我的java进程的Xmx是2G。现在,可能还有其他过程会消耗一些内存。因此,当我想启动JVM时,我想指定要在JVM中使用的堆外内存量 -XX:MaxDirectMemorySize仅指定最大直接内存大小 如何确保特定大小的堆外内存有保证的可用性?您对参数的理解不太正确。它允许JVM请求操作系统为其堆提供高达10GB的内存。它不能保证JVM会得到它。事实上,

-Xmx10g
保证JVM从操作系统获得10G用于进程。类似地,我希望为堆外使用保证特定数量的内存(比如4g)

如果我的机器的RAM是8GB,而我的java进程的
Xmx
是2G。现在,可能还有其他过程会消耗一些内存。因此,当我想启动JVM时,我想指定要在JVM中使用的堆外内存量

-XX:MaxDirectMemorySize
仅指定最大直接内存大小


如何确保特定大小的堆外内存有保证的可用性?您对参数的理解不太正确。它允许JVM请求操作系统为其堆提供高达10GB的内存。它不能保证JVM会得到它。事实上,如果您的系统没有足够的内存(物理和分页),JVM将无法获得它


对于其他内存(堆除外),JVM将请求它并在有足够内存时获取它。但是,同样没有保证,也没有保证的参数。

我建议使用内存映射文件作为堆外文件,因为这些文件在处理提交的大小时更灵活

在您的情况下,您可能需要一个启动程序或脚本来选择堆大小,除非您始终可以将堆大小设置为2GB,因为您已经决定这已经足够了