2009-10-30 76 views
1

我目前在SL4集群上使用Sun的Java 1.6。在Linux上定义的默认JVM堆大小(SL4)

出于某种原因,1.6 JVM正在启动与不可能大堆,而无法启动:

java -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

如果我与例如启动它-Xmx1800M,那么它工作正常。所以,我想知道默认堆大小的设置,更重要的是如何改变它?

该机器拥有8GB的物理内存,我相信Sun的服务器JVM应该默认启动一半512M的内存,但显然并非如此,因为它试图分配超过1800M。

编辑:我意识到它可以使用_JAVA_OPTIONS,但是这感觉有点笨拙;我期待在某处有一个属性文件,但到目前为止我一直无法找到它。

+0

32或64位VM? VPS? 64位操作系统的权利?这有帮助吗? http://forum.openvz.org/index.php?t=msg&goto=7057 – cletus 2009-10-30 12:06:34

+0

> uname -a Linux eddie004 2.6.18-128.7.1.el5#1 SMP Mon Aug 24 08:12:52 EDT 2009 x86_64 x86_64的x86_64的GNU/Linux的 我得到同样的行为,有或没有-d64(和-server): > Java虚拟机 的初始化过程中出现-d64 -version 误差对象堆无法保留足够的空间 无法创建Java虚拟机。 链接很好;我认为这一定是因为机器有8G的物理内存,但每个用户只允许2G使用它,这会让JVM产生与规范不同的行为。 – 2009-10-30 12:14:47

+0

对不起,该评论格式不正确。这是一个64位的操作系统,使用-d64并没有什么区别,服务器也没有。 这可能与8G的机器有关,但限制用户为2G – 2009-10-30 13:08:36

回答

1

没有这个属性文件。根据Garbage Collector Ergonomics

初始堆尺寸:

较大的机器的 物理内存的1/64在机器上或一些 合理最小值。在J2SE 5.0, 之前,默认的初始堆大小为 合理的最小值,其变化范围为 平台。您可以使用-Xms命令行 选项覆盖此默认值 。

最大堆尺寸:

较小物理 存储器或1GB的1/4的。在J2SE 5.0之前, 的默认最大堆大小为64MB。 您可以使用 -Xmx命令行选项覆盖此默认值。


注:边界和用于堆大小给定的级分是正确 为J2SE 5.0。在后续版本中,它们可能与 不同,因为 计算机变得更加强大。

给你有8GB的内存,默认最大堆大小应为1GB假设你使用的Java 6

+0

好的,太棒了。但似乎并非如此,我什至不知道默认是什么,因为它不会从默认开始。任何想法为什么它没有被设置为1GB,并且可以做什么?说这是我们拥有的JVM中的错误是否公平? – 2009-10-30 11:55:51

1

有没有标准的属性文件。 (Sun)JVM具有硬编码的默认值。

+0

嗨Brian: 这是否意味着您只能在运行时更改堆大小?更确切地说,如果我更改默认值并重新启动JVM,那么堆大小是否会恢复为“默认值硬编码”? – 2010-08-08 02:36:08