什么是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。在中256m
,m
代表兆字节。您可以使用g
或G
表示千兆字节。
-
Xmx1g
或Xmx1G
:将最大内存大小设置为1 GB。 -
Xmx1024m
或Xmx1024M
:将最大内存大小设置为1024兆字节。 -
Xmx1024000k
或Xmx1024000K
:将最大内存大小设置为1024000千字节。
请务必注意,Xmx
和Xms
都是可选的。如果未提供这些,则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选项是非标准的,如有更改,恕不另行通知。
kingmax54212008
发布了928 篇原创文章 · 获赞 388 · 访问量 280万+
关注