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

Mar*_*ond 22 java performance jvm memory-management

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

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

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

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

谢谢

Cog*_*gsy 18

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

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

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


coo*_*ird 12

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

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

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

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

  • 请注意,以上仅适用于"服务器级"计算机.对于Java SE 6,这是一台具有至少2个CPU和至少2GB物理内存的计算机(根据http://download.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html ) (2认同)