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

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

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

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

我的具体vm是:Java HotSpot(TM)64位服务器VM(版本1.6.0_03-b05,混合模式)。

谢谢

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

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

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

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

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

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

通过使用-Xmx开关可以用来改变最大堆大小。 有关用法详细信息,请参阅java – Java应用程序启动器文档。

如果没有设置最大堆大小(使用-Xmx ),默认最大值是不是只有64MB?

因此,如果您没有设置OutOfMemoryError您的应用程序是否会失败? 我对这个问题很困惑。 没有这个开关你的应用程序如何运行?