Java的-Xms和-Xmx选项的速度权衡

2022-08-31 14:37:11

给定这两个命令

一个:

$ java -Xms10G -Xmx10G myjavacode input.txt

B:

$ java -Xms5G -Xmx5G myjavacode input.txt

我有两个问题:

  1. 由于命令 A 保留了更多内存及其参数,A 的运行速度会比 B 快吗?
  2. 如何影响程序的运行过程和输出?-Xmx-Xms

答案 1

该参数定义堆对于 JVM 可以达到的最大内存大小。您必须很好地了解程序,并查看它在负载下的性能,并相应地设置此参数。如果程序的堆内存达到最大堆大小,则较低的值可能会导致 OutOfMemoryExceptions 或性能非常差。如果您的程序在专用服务器中运行,则可以将此参数设置得更高,因为它不会影响其他程序。-Xmx

该参数设置 JVM 的初始堆内存大小。这意味着当您启动程序时,JVM 将立即分配此内存量。如果您的程序从一开始就消耗大量堆内存,这将非常有用。这避免了 JVM 不断增加堆,并且可以在那里获得一些性能。如果您不知道此参数是否会对您有所帮助,请不要使用它-Xms

总之,这是一个折衷方案,您必须仅根据程序的内存行为来决定。


答案 2

这取决于你的java正在使用的GC。并行GC可能在更大的内存设置上工作得更好 - 虽然我不是这方面的专家。

通常,如果您的内存较大,则需要GC-ed的频率越低 - 垃圾空间很大。但是,当涉及到GC时,GC必须在更多的内存上工作 - 这反过来又可能会更慢。


推荐