本篇文章我们就来给大家介绍垃圾收集器的 jvm 参数配置。
jvm参数有很多,其实我们直接使用默认的jvm参数,不去修改都可以满足大多数情况。但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的jvm参数设置是必不可少的。下面我们就来对这些jvm参数进行详细的介绍。jvm参数主要分为以下三种(可以根据书写形式来区分):
1、标准参数标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着jvm版本的变化而变化。
我们可以通过 -help 命令来检索出所有标准参数。
关于这些命令的详细解释,可以参考官网:https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html
-help 也是一个标准参数,再比如使用比较多的 -version也是。
①、-version
显示java的版本信息。
2、x 参数对应前面讲的标准化参数,这是非标准化参数。表示在将来的jvm版本中可能会发生改变,但是这类以 -x开始的参数变化的比较小。
我们可以通过 java -x 命令来检索所有-x 参数。
关于这些参数的介绍,其实上图的中文解释很清楚了,这里我们不作过多的介绍。
3、xx参数这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着jvm版本的变化可能会发生变化,主要用于jvm调优和debug。
注意:这种参数是我们后续介绍jvm调优讲解最多的参数。
该参数的书写形式又分为两大类:
①、boolean类型 格式:-xx:[+-]表示启用或者禁用name属性。
例子:-xx:+useg1gc(表示启用g1垃圾收集器)
②、key-value类型 格式:-xx:=表示name的属性值为value。
例子:-xx:maxgcpausemillis=500(表示设置gc的最大停顿时间是500ms)
4、参数详解1、打印已经被用户或者当前虚拟机设置过的参数
-xx:+printcommandlineflags比如:
2、最大堆和最小堆内存设置
-xms512m:设置堆内存初始值为512m
-xmx1024m:设置堆内存最大值为1024m
这里的ms是memory start的简称,mx是memory max的简称,分别代表最小堆容量和最大堆容量。但是别看这里是-x参数,其实这是-xx参数,等价于:
-xx:initialheapsize
-xx:maxheapsize
在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。所以在生产环境中,jvm的xms和xmx要设置成一样的,能够避免gc在调整堆大小带来的不必要的压力。
3、dump异常快照以及以文件形式导出
-xx:+heapdumponoutofmemoryerror
-xx:heapdumppath
堆内存出现oom的概率是所有内存耗尽异常中最高的,出错时的堆内信息对解决问题非常有帮助,所以给jvm设置这个参数(-xx:+heapdumponoutofmemoryerror),让jvm遇到oom异常时能输出堆内信息,并通过(-xx:+heapdumppath)参数设置堆内存溢出快照输出的文件地址,这对于特别是对相隔数月才出现的oom异常尤为重要。
这两个参数通常配套使用:
-xx:+heapdumponoutofmemoryerror -xx:heapdumppath=./
4、发送oom后,执行一个脚本
-xx:onoutofmemoryerror
比如这样设置:
-xx:onoutofmemoryerror=c:program filesjavajdk1.8.0_152binjconsole.exe
表示发生oom后,运行jconsole.exe程序。这里可以不用加“”,因为jconsole.exe路径program files含有空格。
利用这个参数,我们可以在系统oom后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。
5、打印gc信息
①、打印gc简单信息
-verbose:gc
-xx:+printgc
一个是标准参数,一个是-xx参数,都是打印详细的gc信息。通常会打印如下信息:
比如第一行,表示gc回收之前有12195k的内存,回收之后剩余1088k,总共内存为125951k
②、打印详细gc信息
-xx:+printgcdetails
-xx:+printgctimestamps
6、指定gc日志以文件输出
-xloggc:./gc.log
这个在参数用于将gc日志以文件的形式输出,更方便我们去查看日志,定位问题。
7、设置永久代大小
-xx:maxpermsize=1280m
在jdk1.7以及以前的版本中,只有hotspot 才有perm区,称为永久代,它在启动时固定大小,很难进行调优。
在某些情况下,如果动态加载类过多,容易产生perm区的 oom。比如某个实际 web 工程中,因为功能点较多,在运行过程中,要不断动态加载很多类,就会出现类似错误:
exception in thread 'dubbo client x.x.connect' java.lang.outofmemoryerror:permgenspace
为了解决这个问题,就需要在项目启动时,设定运行参数-xx:maxpermsize。
注意:在jdk1.8以后面的版本,使用元空间来代替永久代。在 jdk1.8以及后面的版本中,如果设定参数-xx:maxpermsize,启动jvm不会报错,但是会提示:
java hotspot 64bit server vm warning:ignoring option maxpermsize=1280m:support was removed in 8.0
8、垃圾收集器常用参数
基于单片机的定时器实验 定时器的基础知识
处理器基础抱佛脚-存储器部分
高精度六维力传感器市场发展趋势
PM2.5传感器有哪些,它们之间都有什么区别
亿纬动力与荆门公交集团合作推动城市公交的电动化、可持续发展
垃圾收集器的JVM参数配置
远航合金从新三板换道创业板IPO
中兴通讯李自学表示全球5G产业链条必须以合作的心态来迎接
ocxo恒温晶振的参数
德索三大检验方法保证fakra连接器的安全
Maxim最新推出除颤脉冲和ESD保护器件,为医疗应用保驾护航,漏电流减小100倍
电源由什么组成
Blackfin处理器在图像处理方面的技术优势解析
简述双层屏蔽的意义
中芯国际:晶圆“量增价跌”
电力调整器的负载方式_电力调整器的阻性负载
零跑C11获用户信任,3388位用户预付2万订金下订
AI越来越推广普及,我们需注意机器模型中不断涌现的人类偏见
和不老女神钟丽缇一起迎接抗衰新未来——欧洲之星Fotona4D
中国移动截至1月底已发展出了670余万个5G套餐客户