我在java 8上通过主类运行java进程。我没有指定任何地方min(Xms)和max(Xmx)堆大小。但是,当我通过visualVM查看它时
4267704320(即4.26 GB)这是给定进程的默认最大堆大小(通过windows命令确认也是
-XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
。同样在Linux机箱上)。
我的问题是如果我的进程(在linux机器上)需要更多5 GB(我有30 GB RAM),当我没有指定时,我的进程将被分配5 GB内存 任何显式堆大小(Xms和Xmx)参数。
答案 0 :(得分:1)
鉴于您的计算机上有可用的RAM,如果您在服务器模式下运行64位JVM,那么是,堆大小将能够达到大约7.5 GB。
Documentation(我强调了相关部分):
客户端JVM默认初始和最大堆大小
默认的最大堆大小是物理内存的一半,物理内存大小为192兆字节(MB),否则 物理内存的四分之一 物理内存大小为1千兆字节(GB)。
服务器JVM默认初始和最大堆大小
默认的初始和最大堆大小在服务器JVM上的工作方式与在客户端JVM 上的工作方式相似,只是默认值可以更高。在32位JVM上,如果有4 GB或更多的物理内存,则默认的最大堆大小可以高达1 GB。 在64位JVM上,如果有128 GB或更多的物理内存,则默认最大堆大小最多可达32 GB 。您可以通过直接指定这些值来设置更高或更低的初始和最大堆;见下一节。
同样,假设64位JVM在服务器模式下运行,根据文档的默认最大堆大小将是总RAM的四分之一。所以你的情况大约为7.5 GB(30 GB的1/4)。
如果在服务器模式下运行32位JVM,则您的上限为1 GB。在客户端模式下,最大值为256 MB。