使用大量内存的Java应用程序。使用-Xmx?

时间:2009-06-23 01:48:44

标签: java performance memory-management jvm

我有一个在16G机器上使用大约15G的Java应用程序。我不知道是否应该设置最大堆大小。

如果设置将jvm吃掉所有ram达到极限然后开始垃圾收集并停止一切,当它通过15G堆对象搅拌时?

如果没有,jvm会因为没有使用机器上所有可用的ram而损害性能。

我的特定虚拟机是:Java HotSpot(TM)64位服务器虚拟机(版本1.6.0_03-b05,混合模式)。

由于

3 个答案:

答案 0 :(得分:18)

-Xmx15G将最大堆大小设置为15 gig。 Java只会在运行时分配它所需的内容。如果您没有设置它,它将只使用默认值。有关默认信息,请参阅this post

-Xms15G将最小堆设置为15 gig。这迫使java在开始执行之前分配15 gig的堆空间,无论它是否需要它。

通常,您可以将它们设置为适当的值,具体取决于您调整JVM的方式。

答案 1 :(得分:12)

在Java 6中,默认的最大堆大小由存在的系统内存量决定。

根据Garbage Collector Ergonomics页面,最大堆大小为:

  

小于物理的1/4   内存或1GB。在J2SE 5.0之前,   默认最大堆大小为64MB。

通过使用-Xmx开关可以用来更改最大堆大小。有关使用详情,请参阅java - the Java application launcher文档。

答案 2 :(得分:0)

如果未设置最大堆大小(使用-Xmx),则默认最大值不是仅64MB?

如果您没有设置OutOfMemoryError s,那么您的应用程序是否会失败?我对这个问题很困惑。如果没有此切换,您的应用程序如何运行?