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,因为您已经决定这已经足够了