JVM调优-JVM常用的参数

2,068 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情


1.写在前面

前面分享了常用的调优工具,详情可查看:这里

基于该文章,我们了解了,JDK工具包VisualVM工具MemoryAnalyzer工具第三方 GCEasy等工具。

通过这些工具,我们就可以对jvm进行分析,堆内存分析,线程分析等,都可以做到。

在我们对jvm的内存,线程等分析后,一般就需要去调优了。

那其实jvm调优,主要的是对jvm参数进行调整

既然这样,那我们是不是得去学习一下相关的jvm参数

掌握jvm参数,妈妈再也不用担心我们进行jvm调优了!!!^_^

image.png

好了,废话不多说,直接上干货了。xdm,做好笔记了。

2.JVM参数

在JVM调整过程中,主要是对JVM参数做的调整,以下我们队JVM主要参数做逐一介绍。

JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。

但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。

下面我们就来对这些JVM参数进行详细的介绍。

JVM参数主要分为以下三种: 标准参数非标准参数不稳定参数

2.1 标准参数、非标准参数、不稳定参

2.1.1 标准参数

标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上 不会随着JVM版本的变化而变化 。标准参数以 - 开头,如:java -version、java -jar等,通过java -help可以查询所有的标准参数,

我们可以通过 -help 命令来检索出所有标准参数。

image.png

-help 也是一个标准参数,再比如使用比较多的 -version也是。

2.1.2 非标准参数

非标准参数以 -X 开头,是标准参数的扩展。对应前面讲的标准化参数,这是非标准化参数。

表示在将来的JVM版本中可能会发生改变,但是这类以-X开始的参数变化的比较小。

我们可以通过 Java -X 命令来检索所有-X 参数。

image.png

我们可以通过设置非标准参数来配置堆的内存分配,常用的非标准参数有:

  1. -Xms 堆内存的最小值:默认值是总内存/64(且小于1G),默认情况下,当堆中可用内存小于40%时,堆内存会开始增加,一直增加到-Xmx的大小。

  2. -Xmx 堆内存的最大值:默认值是总内存/64(且小于1G),如果Xms和Xmx都不设置,则两者大小会相同,默认情况下,当堆中可用内存大于70%时,堆内存会开始减少,一直减小到-Xms的大小;

  3. -Xmn 新生代内存的最大值:包括Eden区和两个Survivor区的总和,写法如:-Xmn1024m

  4. -Xss 每个线程的栈内存: 默认1M,一般来说是不需要改的。(比较少用)

这几个参数,用到比较多,其他就不再一 一描述了。(毕竟百度是最好的老师!!!)

2.1.3 不稳定参数

这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于 JVM调优debug

image.png

不稳定参数以-XX 开头,此类参数的设置很容易引起JVM 性能上的差异,使JVM存在极大的不稳定性。

如果此类参数设置合理将大大提高JVM的性能及稳定性。

不稳定参数分为三类:

  • 性能参数:用于JVM的性能调优和内存分配控制,如内存大小的设置;
  • 行为参数:用于改变JVM的基础行为,如GC的方式和算法的选择;
  • 调试参数:用于监控、打印、输出jvm的信息;

不稳定参数语法规则:

  1. 布尔类型参数值:
    • -XX:+
    • -XX:-
示例:-XX:+UseG1GC:表示启用G1垃圾收集器
  1. 数字类型参数值:
    • -XX:=
示例:-XX:MaxGCPauseMillis=500 :表示设置GC的最大停顿时间是500ms
  1. 字符串类型参数值:
    • -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:SurvivorRatioEden区与Survivor区的大小比值设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
并行收集器相关参数
参数名称含义默认值
-XX:+UseParallelGCFull GC采用parallelMSC
-XX:+UseParNewGC设置年轻代为并行收集
-XX:ParallelGCThreads并行收集器的线程数
-XX:+UseParallelOldGC年老代垃圾收集方式为并行收集(Parallel Compacting)

这里参数,实在是比较多,就不再一一列举了。

真实的jvm调优实践,我们再一一分享,真实案例中使用到的jvm调优参数了。


好了,以上就是JVM常用的参数的分享了。

个人理解,可能也不够全面,班门弄斧了。

今天就先到这里了,掰掰了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png