tangguo

加快Java -Xms和-Xmx选项的权衡

java

给定这两个命令

A:

$ java -Xms10G -Xmx10G myjavacode input.txt

B:

$ java -Xms5G -Xmx5G myjavacode input.txt

我有两个问题:

  1. 由于命令A保留了更多的参数存储空间,因此A的运行速度会比B快吗?
  2. 如何-Xmx和-Xms影响正在运行的进程,我的程序的输出?

阅读 697

收藏
2020-11-02

共2个答案

小编典典

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

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

总而言之,这是一个折衷方案,您只能根据程序的内存行为来决定。

2020-11-02
小编典典

这取决于您的Java使用的GC。并行GC在较大的内存设置上可能会更好地工作-尽管我不是专家。

通常,如果您拥有更大的内存,则不需频繁对其进行GC处理-会有大量的垃圾空间。但是,当涉及到GC时,GC必须在更多的内存上工作-这反过来可能会更慢。

2020-11-02