我有一个Java应用程序,在一台16G内存的机器上使用了约15G。我不知道是否应该设置最大堆大小。
如果设置了,JVM会吃掉所有RAM直到达到限制,然后开始垃圾回收并在处理15G堆对象时停止所有操作吗?
如果没有设置,JVM会通过不使用机器上所有可用的RAM来损害性能吗?
我的具体虚拟机是:Java HotSpot(TM) 64-Bit Server VM(build 1.6.0_03-b05,混合模式)。
谢谢!
我有一个Java应用程序,在一台16G内存的机器上使用了约15G。我不知道是否应该设置最大堆大小。
如果设置了,JVM会吃掉所有RAM直到达到限制,然后开始垃圾回收并在处理15G堆对象时停止所有操作吗?
如果没有设置,JVM会通过不使用机器上所有可用的RAM来损害性能吗?
我的具体虚拟机是:Java HotSpot(TM) 64-Bit Server VM(build 1.6.0_03-b05,混合模式)。
谢谢!
-Xmx15G
将最大堆大小设置为15GB。Java只会在运行时分配所需的堆空间。如果您不设置它,它将仅使用默认值。有关默认值的信息,请参见此帖子。
-Xms15G
将最小堆大小设置为15GB。这将强制Java在开始执行之前分配15GB的堆空间,无论是否需要。
通常情况下,可以根据JVM的调优设置它们的合适值。
-Xmx
开关来更改最大堆大小。有关用法详细信息,请参见java
- Java应用程序启动器文档。-Xmx
),默认的最大值不是只有64MB吗?OutOfMemoryError
而失败吗?我对这个问题感到困惑。没有这个开关,您的应用程序如何运行?OutOfMemory
异常。如果是,则明显意味着你的应用程序实际上需要更多的内存,否则就不需要。 - Amit