Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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
Java1.5是否有默认的-Xmx设置?_Java_Jvm - Fatal编程技术网

Java1.5是否有默认的-Xmx设置?

Java1.5是否有默认的-Xmx设置?,java,jvm,Java,Jvm,出于兴趣-是否存在默认值,或者每个操作系统上的默认值不同 如果是,默认设置是什么?难以置信的难找 根据java文档,Sun/Oracle和JVM的默认值为64MB。不过,对于不同的JVM供应商,这可能有所不同。例如,的默认-Xmx值是内存总量的75%或1GB中的较小值 如果您对JVM上可以使用的最大内存量感到好奇,那么在运行时可以调用: System.out.println(Runtime.getRuntime().maxMemory()); 您可以在中找到详细信息。具体而言: 对于“服务器

出于兴趣-是否存在默认值,或者每个操作系统上的默认值不同


如果是,默认设置是什么?难以置信的难找

根据java文档,Sun/Oracle和JVM的默认值为64MB。不过,对于不同的JVM供应商,这可能有所不同。例如,的默认-Xmx值是内存总量的75%或1GB中的较小值

如果您对JVM上可以使用的最大内存量感到好奇,那么在运行时可以调用:

System.out.println(Runtime.getRuntime().maxMemory());

您可以在中找到详细信息。具体而言:

  • 对于“服务器级”计算机(2个以上处理器,2+GB RAM),默认最大堆大小为物理内存的¼,最多1G字节
  • 对于“普通”计算机,它是64MB
正如所回答的,java 1.5的具体要求是,对于服务器级机器,物理内存为1GB或¼,以较低者为准;对于其他机器,物理内存为64MB(从)

不幸的是,JVM会随着时间的推移而变化,最合适的文档也会变得更加难以识别,因此要找到特定JVM的默认堆(和PermGen堆)大小,最好的方法是让JVM告诉您


在“1.6.0_06”和“1.6.0_21”之间的某个地方,添加了
-XX:+PrintFlagsFinal
选项,它似乎首先出现在“1.6.0_23”左右。它提供了大量关于JVM如何配置的信息,但我们将集中讨论堆和permgen的大小和限制

Linux 在Linux上,您可以使用以下命令:

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
窗户 同样,在windows上,您可以使用以下命令:

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
笔记
  • 根据您的系统,
    java
    可能默认为
    -client
    -server
    ,因此,如果您强制应用程序使用这两个命令之一启动,也可以在启动这些命令时执行相同的操作
例子 在我的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"
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"
它默认为
-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"
在我的Windows系统上,我得到:

$ 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"
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"
哪些是
-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'.
总结如下:

Parameter \ JVM             1.6.0_24                   
                            Lin/svr  Lin/cli  Windows  
InitialHeapSize               63MB     16MB     16MB   
LargePageHeapSizeThreshold   128MB    128MB    128MB   
MaxHeapSize                 1014MB    256MB    256MB   
MaxPermSize                   64MB     64MB     64MB   
PermSize                      16MB     12MB     12MB   

我猜是64米,但我不能确定。嗨,克罗克。不幸的是,1.5版中
java
man
页面似乎不正确。我在回答中链接到的“人体工程学”文章中描述了实际的默认设置。在Java 6.0中,
man
页面被修改为简单地说,“默认值是根据系统配置在运行时选择的。有关更多信息,请参阅HotSpot人机工程学。”尽管Windows机器没有应用自动“服务器”标志。假设Windows计算机通常运行客户端应用程序。我非常确定,您必须显式地将内存大小设置为所需的大小。否则默认值为64Mb根据链接的文档,32位Windows计算机不会获得自动“服务器”标志,但64位计算机会。不过,值得一提的是。谢谢:-)。这个链接现在似乎已断开。重定向至@GreenGiant,谢谢提醒。我修复了链接。它需要特定的VM版本吗?2006年6月1日,我收到“未识别选项”错误。