当前位置: 首页 > 知识库问答 >
问题:

将Xms和Xmx设置为相同的值有什么好处吗?

鲜于勇
2023-03-14

通常我设置Xms512m和Xmx1g,这样当JVM启动时,它会分配512MB,并根据需要逐渐将堆增加到1GB。但我看到,在专用服务器实例中,这些值设置为相同的值,例如1g。将两者设置为相同的值有什么好处吗?

共有3个答案

长孙深
2023-03-14

AFAIK还有一个原因,是堆的扩展是一个停止世界事件;将它们设置为相同的值将防止这种情况。

年业
2023-03-14

来自Oracle Java SE 8文档:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html默认情况下,虚拟机在每个集合处增长或缩小堆,以尝试将每个集合处活动对象的可用空间比例保持在特定范围内。此目标范围由参数-XX: MinHeapFreeRatio=设置为百分比

如果-Xms和-Xmx的值相同,JVM将不必调整堆大小,这意味着JVM的工作量更少,应用程序的时间更长。但是,如果所选的值对于-Xms来说是一个糟糕的选择,那么分配的一些内存将永远不会被使用,因为堆永远不会收缩,如果对于-Xmx来说是一个糟糕的选择,那么您将得到OutOfMemoryError。

卞浩漫
2023-03-14

嗯,有两件事。

  1. 程序将以-Xms值开始,如果该值较小,则最终会强制GC更频繁地发生
  2. 一旦程序到达-Xms堆,jvm请求OS额外内存并最终抓取需要额外时间导致性能问题的-Xmx,您不妨在开始时将其设置为避免jvm请求额外内存。

这里的回答很好-https://developer.jboss.org/thread/149559?_sscc=t

 类似资料:
  • 我不得不问这是一个好的做法吗?好心地建议使用它的优点和缺点(利弊)。

  • 我有一个Java微服务,它在生产中的内存每天都在增加,我刚刚继承了它。它目前使用了一个4GB堆的80%,并且每天增加几个百分点。 JVM选项中的-xms和-xmx值都设置为4GB。 这是否意味着垃圾收集器在JVM达到其堆限制之前不会激活?

  • 问题内容: 现在,我在ini文件中对这些设置是: -Xms768M -Xmx1024M 当将它们设置得更高时,eclipse就不会再开始了……有没有办法增加这些值而又不会使eclipse崩溃? 问题答案: 最大值不取决于Eclipse,而是取决于您的OS(显然取决于可用的物理内存)。 您可能想看一下这个问题:Windows中每个Java进程的最大内存量?

  • 问题内容: 请说明JVM 中Xms和Xmx参数的使用。它们的默认值是多少? 问题答案: 该标志指定Java虚拟机(JVM)的最大内存分配池,而Xms指定初始内存分配池。 这意味着你的JVM将以一定数量的内存启动,并且将能够使用最大数量的内存。例如,启动如下所示的JVM将以256 MB的内存启动它,并将允许该进程使用最多2048 MB的内存: 也可以以不同的大小(例如千字节,兆字节等)指定内存标志。

  • 我编写的java应用程序遇到了一个问题,导致硬件性能问题。问题(我很确定)是,我运行应用程序的一些机器只有1GB的内存。当我启动java应用程序时,我将堆大小设置为-xms512m-xmx1024m。 我的第一个问题是,我的假设是否正确,因为我将机器的所有内存分配给java堆,这显然会导致性能问题?

  • 将清单中的compileSdkVersion设置为小于最新的api内部版本号有什么好处吗,还是您应该始终将其设置为最新的api内部版本? 我说的优势是指应用程序的性能、应用程序的编译时间、apk的大小等。当然,我指的是你可以把它设置得更低的情况--例如,一个应用程序不使用共享转换或任何Lollipop的功能。