如果不使用Xmx会发生什么?

Pom*_*rio 6 jvm

根据JVM的文档,如果使用太大的Xms参数,JVM将无法启动.所以,我问,如果我不使用会发生什么?我的VM是否可以无限期增长?它只会在物理内存耗尽时停止吗?

vcs*_*nes 6

XMX是最大堆大小.

如果我不使用它会发生什么?

如果省略,则使用默认值.默认值因JVM版本及其运行的平台而异.版本5的详细信息在这里.

默认情况下,在服务器级计算机上选择以下内容.

...

最大堆大小为1/4的物理内存,最大为1Gbyte


Mar*_*oth 5

如果您不指定,-Xmx那么您将获得操作系统、jvm、选项和版本的默认分配。

考虑到可能影响该值的因素数量以及浏览文档所需的时间,询问您的 jvm 可能会更容易。

以我的 Linux 系统为例:

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight               = 20               {product}
uintx ErgoHeapSizeLimit                    = 0                {product}
uintx InitialHeapSize                     := 66328448         {product}
uintx LargePageHeapSizeThreshold           = 134217728        {product}
uintx MaxHeapSize                         := 1063256064       {product}
uintx MaxPermSize                          = 67108864         {pd product}
uintx PermSize                             = 16777216         {pd product}
java version "1.6.0_24"
Run Code Online (Sandbox Code Playgroud)

因为它默认为-server,但-client我得到:

$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight               = 20               {product}
uintx ErgoHeapSizeLimit                    = 0                {product}
uintx InitialHeapSize                     := 16777216         {product}
uintx LargePageHeapSizeThreshold           = 134217728        {product}
uintx MaxHeapSize                         := 268435456        {product}
uintx MaxPermSize                          = 67108864         {pd product}
uintx PermSize                             = 12582912         {pd product}
java version "1.6.0_24"
Run Code Online (Sandbox Code Playgroud)

在我的 Windows 系统上,我得到:

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
uintx AdaptivePermSizeWeight               = 20               {product}
uintx ErgoHeapSizeLimit                    = 0                {product}
uintx InitialHeapSize                     := 16777216         {product}
uintx LargePageHeapSizeThreshold           = 134217728        {product}
uintx MaxHeapSize                         := 268435456        {product}
uintx MaxPermSize                          = 67108864         {pd product}
uintx PermSize                             = 12582912         {pd product}
java version "1.6.0_21"
Run Code Online (Sandbox Code Playgroud)

这是-client设置,似乎没有-server选项:

C:\>java -server -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
C:\>java -server -XX:+PrintFlagsFinal -version
Error: no `server' JVM at `C:\jdk\jre\bin\server\jvm.dll'.
Run Code Online (Sandbox Code Playgroud)