当前位置: 首页 > 面试题库 >

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

吕英豪
2023-03-14
问题内容

给定这两个命令

A:

$ java -Xms10G -Xmx10G myjavacode input.txt

B:

$ java -Xms5G -Xmx5G myjavacode input.txt

我有两个问题:

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

问题答案:

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

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

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



 类似资料:
  • 问题内容: 我想在VPS上运行一个用Java编写的非常简单的机器人。我想将jvm内存限制为10MB(我怀疑是否需要更多内存)。 我正在使用以下命令运行机器人: java -Xms5M -Xmx10M -server -jar IrcBot.jar“ / home / jbot” 但是表明为Java保留的实际内存是(或者我在这里解释错了吗?)。 13614 jbot 17 0 144米 16米674

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

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

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

  • 我有以下代码: 您可以看到每个操作分配5M。当我设置时,它无一例外地成功运行,而当时,它会引发异常。有人能解释一下为什么吗?我在Windows 7、64bit、Eclipse 4.3下。以下代码是相同的结果:

  • 我正在运行6个java进程,我将-xms和-xmx参数设置为每个进程1 GB,因此总堆分配为6 GB。我有8 GB的物理内存,所以在启动这6个进程之后,“free”命令应该显示6 GB是已用的,剩下2 GB但事实并非如此。相反,“free”显示只使用了1 GB,而7 GB是免费的。我有点困惑,因为我对-xms(A MB)的理解是,一个MBs的内存是由OS分配给JVM,而-xmx(B MBs)意味着