xmx和MaxRAM JVM参数之间有什么区别?

Che*_*rry 5 java heap jvm heap-memory

maxram的

根据计算机上的内存量。堆内存使用比例由命令行选项InitialRAMFraction和MaxRAMFraction控制。maxRAM的值取决于平台。

Xmx

-Xmxn指定内存分配池的最大大小(以字节为单位)。此值必须是大于2 MB的1024的倍数。追加字母k或K表示千字节,或者追加m或M表示兆字节。默认值为64MB。在Solaris 7和Solaris 8 SPARC平台上,此值的上限约为4000m,而在Solaris 2.6和x86平台上,该值的上限约为2000m(减去开销)。

据我了解,两者都定义了heap尺寸。没有?建议使用什么:XmxMaxRAM?如果我同时使用两个卵子?

apa*_*gin 11

-Xmx指定堆的精确上限。这是设置堆大小的首选方法。

-XX:MaxRAM没有直接定义堆大小。取而代之的是,此参数在根据人体工程学计算堆限制时会覆盖物理RAM的实际数量。

如果-Xmx设置,MaxRAM则从不使用。否则,最大堆尺寸估计1作为

MaxHeapSize = MaxRAM * MaxRAMPercentage / 100% (default MaxRAMPercentage=25)
Run Code Online (Sandbox Code Playgroud)

1实际算法稍微复杂一点,并且取决于其他参数。

  • 我的演讲 [Java 进程的内存占用](https://vimeo.com/364039638) 可能会给出一些提示。简而言之:影响占用空间的因素已经太多了,因此您几乎不想在内存方程中再添加一个不可控的变量。 (4认同)
  • _这是设置堆大小的首选方法_,除非这是在容器中启动,对吧?在这种情况下,“InitialRAMPercentage”和“MaxRAMPercentage”将是您最好的选择。我对么? (3认同)
  • 非常有趣的一点,我唯一不喜欢的是,如果您指定“-Xmx”和“-Xms”,您还需要正确为“docker”指定“-m”。如果您参与像我这样的公司,生成 docker 镜像并不意味着您可以控制它们在何处以及由谁启动;我想我应该在一开始就明确地说出这一点。 (2认同)
  • @Eugene *“如果您指定 -Xmx 和 -Xms,您还需要正确为 docker 指定 -m”* - 是的,这很好,因为这些参数并不是很相关,即使 JDK 开发人员试图说服用户认为所谓的“Java 容器支持”功能具有所有魔力。实际上,它只是执行一种“Xmx = cgroup_mem_limit * MaxRAMPercentage / 100” (2认同)