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

Java-启动JVM时,-Xms和-Xmx参数是什么?

韩景辉
2023-03-14
问题内容

请说明JVM 中Xms和Xmx参数的使用。它们的默认值是多少?


问题答案:

该标志Xmx指定Java虚拟机(JVM)的最大内存分配池,而Xms指定初始内存分配池。

这意味着你的JVM将以Xms一定数量的内存启动,并且将能够使用最大Xmx数量的内存。例如,启动如下所示的JVM将以256 MB的内存启动它,并将允许该进程使用最多2048 MB的内存:

java -Xms256m -Xmx2048m

也可以以不同的大小(例如千字节,兆字节等)指定内存标志。

-Xmx1024k
-Xmx512m
-Xmx8g

该Xms标志没有默认值,Xmx通常默认值为256 MB。这些标志的常见用法是遇到java.lang.OutOfMemoryError

使用这些设置时,请记住,这些设置用于JVM的堆,并且JVM可以/将使用的内存比分配给堆的大小更多。从Oracle文档中:

请注意,JVM使用的内存不仅仅是堆。例如,Java方法,线程堆栈和本机句柄与堆以及JVM内部数据结构分开分配在内存中。



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

  • 问题内容: 我试图找出是否有一种方法可以从正在运行的Java进程中确定JVM启动属性。具体来说,我试图找出存储- Xmx(最大堆大小)和-XX:MaxPermSize之类的参数的位置。我正在运行Sun的1.6 jvm。 如果您想知道为什么要执行此操作,则有许多JVM Web服务器可能已正确配置,也可能未正确配置,因此我想将其添加到启动代码检查中。对于我来说,签入到处部署的一段Java代码比手动查找

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

  • 我正在寻找一种策略来调整我正在运行的应用程序的JVM参数。 该应用程序本身是一个网络应用程序,大多数时候不做太多事情,也不需要太多内存。假设300MB。时不时地,外部的一些东西会触发大量的繁重处理,偶尔需要更多内存。假设1400 MB。 我在JDK 15上运行,没有任何其他JVM参数在kubernetes集群中的pod上。 我想: 确保我的应用程序持续运行 确保我的应用程序从底层系统占用的内存不会

  • 据我所知,两者都定义大小。没有?建议使用什么:或?如果我两个都用,哪一个比另一个好?

  • 我正在运行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)意味着