什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13)

什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13)

简而言之,

  • Xmx指定应用程序可用的最大堆大小
  • Xms指定应用程序可用的最小堆大小

这些是Java虚拟机(JVM)参数,用于指定Java应用程序的内存边界。在对性能问题或OutOfMemoryError进行故障排除时,通常使用它们。它们控制 Java应用程序可用的内存量。该Xmx参数指定最大存储器的应用程序都可以使用,其中作为Xms指定的最小或初始内存池。如果您的应用程序超出了最大内存(使用分配Xmx),并且垃圾回收器无法释放内存,则JVM将崩溃,并显示OutOfMemoryError。如果您有兴趣,我写了一篇文章,并举例说明垃圾收集的工作方式及其产生的年代

<span style="color:#515151"> 
$ java -Xmx256m Xmx1024m -jar yourapp.jar
 
</span>

在上面的示例中,应用程序yourapp.jar将获得256 MB的初始内存池,最大内存池最大为1024 MB。在中256mm代表兆字节。您可以使用gG表示千兆字节。

  • Xmx1gXmx1G:将最大内存大小设置为1 GB。
  • Xmx1024mXmx1024M:将最大内存大小设置为1024兆字节。
  • Xmx1024000kXmx1024000K:将最大内存大小设置为1024000千字节。

请务必注意,XmxXms都是可选的。如果未提供这些,则Java虚拟机(JVM)将为其使用默认值。默认值取决于您的计算机和JVM配置。对于服务器类机器,这些定义为

  • 初始堆大小为物理内存的1/64(用于Xms
  • 最大堆大小为物理内存的1/4(用于Xmx

在下面的示例中,最大内存将被限制为1024 MB。初始内存(Xms参数代表的将使用默认值。)

<span style="color:#515151"> 
java -Xmx1024m -jar yourapp.jar
 
</span>

这是一个不错的YouTube视频,介绍了解决与内存相关的错误的过程,并通过示例演示了如何解决这些错误。

Java 13和Z垃圾收集器

Java 13引入了一个称为ZGC的新垃圾收集器。其功能之一包括优化,以将未使用的内存返回到操作系统。默认情况下启用此功能,它不会返回内存,以使堆大小减小到小于Xms。因此,如果您将其设置Xms为相等Xmx(就像许多开发人员一样),它将实质上禁用该功能。

如果要查看所有可用的JVM参数,则可以使用java -X开关,例如

$ java -X
    -Xmixed混合模式执行(默认)
    仅-xint解释模式执行
    -Xbootclasspath:<目录和zip / jar文件,用:>分隔
                      设置引导类和资源的搜索路径
    -Xbootclasspath / a:<用:>分隔的目录和zip / jar文件
                      追加到引导类路径的末尾
    -Xbootclasspath / p:<用:>分隔的目录和zip / jar文件
                      放在引导类路径的前面
    -Xdiag显示其他诊断消息
    -Xnoclassgc禁用类垃圾回收
    -Xincgc启用增量垃圾收集
    -Xloggc:    将GC状态记录到带有时间戳的文件中
    -Xbatch禁用后台编译
    -Xms        设置初始Java堆大小
    -Xmx        设置最大Java堆大小
    -Xss        设置Java线程堆栈大小
    -Xprof输出cpu分析数据
    -Xfuture启用最严格的检查,预期将来会发生默认情况
    -Xrs减少Java / VM对OS信号的使用(请参阅文档)
    -Xcheck:jni对JNI功能执行附加检查
    -Xshare:off不要尝试使用共享的类数据
    -Xshare:如果可能,自动使用共享的类数据(默认)
    -Xshare:按要求使用共享类数据,否则将失败。
    -XshowSettings显示所有设置并继续
    -XshowSettings:全部
                      显示所有设置并继续
    -XshowSettings:vm显示所有与vm相关的设置并继续
    -XshowSettings:属性
                      显示所有属性设置并继续
    -XshowSettings:语言环境
                      显示所有与语言环境相关的设置并继续

-X选项是非标准的,如有更改,恕不另行通知。
什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13)什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13) kingmax54212008 发布了928 篇原创文章 · 获赞 388 · 访问量 280万+ 他的留言板 关注
上一篇:JVM 可开辟线程数量受什么影响


下一篇:Xms Xmx PermSize MaxPermSize 区别