Sun';的默认最大堆大小是多少;来自JavaSE6的JVM?

Sun';的默认最大堆大小是多少;来自JavaSE6的JVM?,java,jvm,memory-management,Java,Jvm,Memory Management,Java SE 6中Sun的JVM的默认最大堆大小是多少(即相当于设置-Xmx) 看起来像是带有服务器类机器的Java SE 5 物理内存的1/4或1GB中的较小者 附加问题:看起来对于IBM的JVM,您可以 你能问一下Sun的JVM吗 编辑: 我使用Runtime.getRuntime().maxMemory来确认min(物理内存/4,1G),在中引用。一种方法是,如果您安装了jdk,在bin文件夹中有一个名为jconsole的实用程序(甚至可以使用visualvm)。 启动它并连接到相关的j

Java SE 6中Sun的JVM的默认最大堆大小是多少(即相当于设置-Xmx)

看起来像是带有服务器类机器的Java SE 5

物理内存的1/4或1GB中的较小者

附加问题:看起来对于IBM的JVM,您可以

你能问一下Sun的JVM吗

编辑


我使用Runtime.getRuntime().maxMemory来确认min(物理内存/4,1G),在中引用。

一种方法是,如果您安装了jdk,在bin文件夹中有一个名为jconsole的实用程序(甚至可以使用visualvm)。 启动它并连接到相关的java进程,您可以看到堆大小设置集和许多其他细节


在仅运行headless或cli时,如果在启动相关服务时指定要连接的端口,则可以通过lan使用jConsole。

可以使用一些Java代码询问:

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

请参阅。

java 1.6.0\u 21或更高版本,等等

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize                         := 12660904960      {product}
看起来最小值(1G)已被删除

或者在Windows上使用findstr

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize

要回答这个问题,关键在于JavaVM是处于客户机模式还是服务器模式。 您可以指定“-client”或“-server”选项。否则java使用内部规则;基本上,win32始终是客户端,Linux始终是服务器,但请参见下表:

Sun/OracleJRE6U18文档称,re客户端:如果机器使用JDK,VM将获得1/2的物理内存, 您还可以使用jinfo连接到所讨论的
的JVM,并获取MaxHeapSize的值:

jinfo -flag MaxHeapSize <PROCESS_ID>
jinfo-标志MaxHeapSize

从JDK6U18开始,以下是堆大小的配置

在客户机JVM中,默认的Java堆配置是 修改以提高当今富客户端的性能 应用。初始堆大小和最大堆大小更大,设置更高 与分代垃圾收集相关的功能得到了更好的优化

默认最大堆大小为物理内存的一半,最大物理内存大小为192兆字节,否则为物理内存的四分之一 物理内存的大小不超过1GB。 例如,如果您的计算机有128 MB的物理内存,则最大堆大小为64 MB,大于或等于 1 GB的物理内存导致最大堆大小为256 兆字节。 JVM实际上不会使用最大堆大小,除非您的程序创建了足够的对象来需要它。数量要小得多, 称为初始堆大小,是在JVM初始化期间分配的。 该量至少为8兆字节,否则为物理量的1/64 物理内存大小不超过1GB的内存


来源:

它是无头的,因此没有图形功能。什么是客户端和服务器模式?我对这两种模式感到困惑,它们实际上是什么?好东西,可以使用相同的方法来查找MaxPermSize Too为了进一步澄清这一点,windows上的上述命令给出了以字节为单位的大小。所以你需要把它除以1024*1024得到MB。对于我的windows计算机,上面至少是这样的,我得到的大小是256MB(结果除以1024*1024)“看起来最小值(1G)已经被删除了。”这不是InitialHeapSize值吗?
jinfo -flag MaxHeapSize <PROCESS_ID>