使用大量内存的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
您的应用程序是否会失败? 我对这个问题很困惑。 没有这个开关你的应用程序如何运行?