我有一个在16G机器上使用大约15G的Java应用程序。我不知道是否应该设置最大堆大小。
如果设置将jvm吃掉所有ram达到极限然后开始垃圾收集并停止一切,当它通过15G堆对象搅拌时?
如果没有,jvm会因为没有使用机器上所有可用的ram而损害性能。
我的特定虚拟机是:Java HotSpot(TM)64位服务器虚拟机(版本1.6.0_03-b05,混合模式)。
由于
答案 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,那么您的应用程序是否会失败?我对这个问题很困惑。如果没有此切换,您的应用程序如何运行?