Java进阶指南:JVM核心知识1.4JVM启动参数

系列文章目录

1:JVM核心知识

        1.1:字节码

        1.2:类加载器

        1.3:内存模型

        1.4:JVM启动参数


目录

系列文章目录

前言

一、JVM启动参数分类(以前缀分类)

二、JVM启动参数分类(以作用分类)

总结



前言

本系列主要针对想进一步进阶Java的开发者,本文介绍JVM的启动参数。


一、JVM启动参数分类(以前缀分类)

- 开头为标准参数,所有的 JVM 都要实现这些 参数,并且向后兼容。

-D 设置系统属性。

以 -X 开头为非标准参数, 基本都是传给 JVM 的, 默认 JVM 实现这些参数的功能,但是并不保证所 有 JVM 实现都满足,且不保证向后兼容。 可以使 用 java -X 命令来查看当前 JVM 支持的非标准参 数。

以 –XX:开头为非稳定参数, 专门用于控制 JVM的 行为,跟具体的 JVM 实现有关,随时可能会在下 个版本取消。

-XX:+-Flags 形式, +- 是对布尔值进行开关。

-XX:key=value 形式, 指定某个选项的值

二、JVM启动参数分类(以作用分类)

1. 系统属性参数

这个就像Windows下面的系统环境变量。主要用来指定一些宏观的配置。

一般以-D开头。

2. 运行模式参数

 -server:设置 JVM 使用 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率 很高,适用于生产环境。在具有 64 位能力的 JDK 环境下将默认启用该模式,而忽略 -client 参 数。 -client :JDK1.7 之前在32位的 x86 机器上的默认值是 -client 选项。设置 JVM 使用 client 模 式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或 者 PC 应用开发和调试。

此外,我们知道 JVM 加载字节码后,可以解释执行,也可以编译成本 地代码再执行,所以可以配置 JVM 对字节码的处理模式,下面的参数是对解释执行和编译执行的调整。

 -Xint:在解释模式(interpreted mode)下运行,-Xint 标记会强制 JVM 解释执行所有的字节 码,这当然会降低运行速度,通常低10倍或更多。

 -Xcomp:-Xcomp 参数与-Xint 正好相反,JVM 在第一次使用时会把所有的字节码编译成本地 代码,从而带来最大程度的优化。【注意预热】

 -Xmixed:-Xmixed 是混合模式,将解释模式和编译模式进行混合使用,有 JVM 自己决定,这 是 JVM 的默认模式,也是推荐模式。 我们使用 java -version 可以看到 mixed mode 等信息。

3. 堆内存设置参数

-Xmx, 指定最大堆内存。 如 -Xmx4g。这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。

-Xms, 指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并 不是操作系统实际分配的初始值,而是GC先规划好,用到才分配。 专用服务 器上需要保持 –Xms 和 –Xmx 一致,否则应用刚启动可能就有好几个 FullGC。 当两者配置不一致时,堆内存扩容可能会导致性能抖动。 -Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其 他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ ¼。

-Xss, 设置每个线程栈的字节数,影响栈的深度。 例如 -Xss1m 指定线程栈为 1MB,与-XX:ThreadStackSize=1m 等价

4. GC 设置参数

-XX:+UseG1GC:使用 G1 垃圾回收器

-XX:+UseConcMarkSweepGC:使用 CMS 垃圾回收器 -XX:+UseSerialGC:使用串行垃圾回收器

-XX:+UseParallelGC:使用并行垃圾回收器

// Java 11+

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

// Java 12+

-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC

5. 分析诊断参数

这些参数主要是JVM发生异常如堆栈溢出,或发生其他错误时,要采取的措施,如Dump堆内存,执行某个脚本。

-XX:+-HeapDumpOnOutOfMemoryError 选项,当 OutOfMemoryError 产生,即内存溢出(堆内存或持久代) 时,自动 Dump 堆内存。 

-XX:HeapDumpPath 选项,与 HeapDumpOnOutOfMemoryError 搭配使用,指定内存溢出时 Dump 文件的 目录。 如果没有指定则默认为启动 Java 程序的工作目录。 

-XX:OnError 选项,发生致命错误时(fatal error)执行的脚本。 例如, 写一个脚本来记录出错时间, 执行一些命令,或者 curl 一下某个在线报警的 url。

-XX:OnOutOfMemoryError 选项,抛出 OutOfMemoryError 错误时执行的脚本。

-XX:ErrorFile=filename 选项,致命错误的日志文件名,绝对路径或者相对路径。

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506,远程调试

6. JavaAgent 参数

注:JavaAgent是Java中的黑科技,能通过无请入的方式做很多事情,主要在JVM启动后,类加载之前可以用agent内置的一些逻辑,对要加载的类做一些处理,比如开启CPU时间抽样分析。

这里仅简单介绍有这么个东西


总结

以上就是今天要讲的内容,本文介绍了JVM启动参数的使用,下面我们将学习JDK内置命令行工具,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值