携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
1.写在前面
前面分享了常用的调优工具,详情可查看:这里
基于该文章,我们了解了,JDK工具包,VisualVM工具,MemoryAnalyzer工具,第三方 GCEasy等工具。
通过这些工具,我们就可以对jvm进行分析,堆内存分析,线程分析等,都可以做到。
在我们对jvm的内存,线程等分析后,一般就需要去调优了。
那其实jvm调优,主要的是对jvm参数进行调整。
既然这样,那我们是不是得去学习一下相关的jvm参数?
掌握jvm参数,妈妈再也不用担心我们进行jvm调优了!!!^_^
好了,废话不多说,直接上干货了。xdm,做好笔记了。
2.JVM参数
在JVM调整过程中,主要是对JVM参数做的调整,以下我们队JVM主要参数做逐一介绍。
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。
但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。
下面我们就来对这些JVM参数进行详细的介绍。
JVM参数主要分为以下三种: 标准参数、非标准参数、不稳定参数。
2.1 标准参数、非标准参数、不稳定参
2.1.1 标准参数
标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上 不会随着JVM版本的变化而变化 。标准参数以 - 开头,如:java -version、java -jar等,通过java -help可以查询所有的标准参数,
我们可以通过 -help 命令来检索出所有标准参数。
-help 也是一个标准参数,再比如使用比较多的 -version也是。
2.1.2 非标准参数
非标准参数以 -X 开头,是标准参数的扩展。对应前面讲的标准化参数,这是非标准化参数。
表示在将来的JVM版本中可能会发生改变,但是这类以-X开始的参数变化的比较小。
我们可以通过 Java -X 命令来检索所有-X 参数。
我们可以通过设置非标准参数来配置堆的内存分配,常用的非标准参数有:
-
-Xms 堆内存的最小值:默认值是总内存/64(且小于1G),默认情况下,当堆中可用内存小于40%时,堆内存会开始增加,一直增加到-Xmx的大小。
-
-Xmx 堆内存的最大值:默认值是总内存/64(且小于1G),如果Xms和Xmx都不设置,则两者大小会相同,默认情况下,当堆中可用内存大于70%时,堆内存会开始减少,一直减小到-Xms的大小;
-
-Xmn 新生代内存的最大值:包括Eden区和两个Survivor区的总和,写法如:-Xmn1024m
-
-Xss 每个线程的栈内存: 默认1M,一般来说是不需要改的。(比较少用)
这几个参数,用到比较多,其他就不再一 一描述了。(毕竟百度是最好的老师!!!)
2.1.3 不稳定参数
这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于 JVM调优 和 debug。
不稳定参数以-XX 开头,此类参数的设置很容易引起JVM 性能上的差异,使JVM存在极大的不稳定性。
如果此类参数设置合理将大大提高JVM的性能及稳定性。
不稳定参数分为三类:
- 性能参数:用于JVM的性能调优和内存分配控制,如内存大小的设置;
- 行为参数:用于改变JVM的基础行为,如GC的方式和算法的选择;
- 调试参数:用于监控、打印、输出jvm的信息;
不稳定参数语法规则:
- 布尔类型参数值:
- -XX:+
- -XX:-
示例:-XX:+UseG1GC:表示启用G1垃圾收集器
复制代码
- 数字类型参数值:
- -XX:=
示例:-XX:MaxGCPauseMillis=500 :表示设置GC的最大停顿时间是500ms
复制代码
- 字符串类型参数值:
- -XX:=
示例:-XX:HeapDumpPath=./dump.core
复制代码
2.2 常用参数
2.2.1 实用参数
参数名称 | 含义 | 默认值 | |
---|---|---|---|
-Xms | 初始堆大小 | 物理内存的1/64(<1GB) | |
-Xmx | 最大堆大小 | 物理内存的1/4(<1GB | |
-Xmn | 年轻代大小 | ||
-XX:NewSize | 设置年轻代大小 | ||
-XX:MaxNewSize | 年轻代最大值 | ||
-XX:PermSize | 设置持久代(perm gen)初始值 | 物理内存的1/64 | |
-XX:MaxPermSize | 设置持久代最大值 | 物理内存的1/4 | |
-Xss | 每个线程的堆栈大小 | ||
-XX:ThreadStackSize | 线程堆栈大小 | ||
-XX:NewRatio | 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) | -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5,Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 | |
-XX:SurvivorRatio | Eden区与Survivor区的大小比值 | 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 |
并行收集器相关参数
参数名称 | 含义 | 默认值 |
---|---|---|
-XX:+UseParallelGC | Full GC采用parallelMSC | |
-XX:+UseParNewGC | 设置年轻代为并行收集 | |
-XX:ParallelGCThreads | 并行收集器的线程数 | |
-XX:+UseParallelOldGC | 年老代垃圾收集方式为并行收集(Parallel Compacting) |
这里参数,实在是比较多,就不再一一列举了。
真实的jvm调优实践,我们再一一分享,真实案例中使用到的jvm调优参数了。
好了,以上就是JVM常用的参数的分享了。
个人理解,可能也不够全面,班门弄斧了。
今天就先到这里了,掰掰了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!