让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

公司资讯 NEWS
你的位置:极速购彩 > 公司资讯 > 你需要明白的 JVM 参数都在这里
你需要明白的 JVM 参数都在这里
发布日期:2022-05-15 15:07    点击次数:78

本文转载自微信公众号「Java期间指北」,作家指北君。转载本文请关联Java期间指北公众号。

哈喽,全球好,我是指北君。

上一篇著述咱们先容了多样垃圾麇集器,包括

更生代垃圾麇集器:Serial、ParNew、Parallel Scavenge;

老年代垃圾麇集器:Serial Old(MSC)、Parallel Old、CMS;

整堆:G1

临了先容了最强的垃圾麇集器:ZGC。

那么本篇著述咱们就来给全球先容这些垃圾麇集器的 JVM 参数成就。

JVM参数有好多,其实咱们平直使用默许的JVM参数,不去修改都不错满足大无数情况。然而要是你想在有限的硬件资源下,部署的系统达到最大的运行成果,那么进行关联的JVM参数缔造是必不成少的。底下咱们就来对这些JVM参数进行详备的先容。JVM参数主要分为以下三种(不错凭证书写神气来别离):

一、圭臬参数

圭臬参数,顾名思义,圭臬参数中包括功能以及输出的罢了都是很沉稳的,基本上不会跟着JVM版块的变化而变化。

咱们不错通过 -help 敕令来检索出整个圭臬参数。

对于这些敕令的详备阐述,不错参考官网:https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help 亦然一个圭臬参数,再比如使用比拟多的 -version亦然。

①、-version

泄漏Java的版块信息。

二、X 参数

对应前边讲的圭臬化参数,这瑕瑜圭臬化参数。暗示在畴昔的JVM版块中可能会发生窜改,然而这类以 -X脱手的参数变化的比拟小。

咱们不错通过 Java -X 敕令来检索整个-X 参数。

对于这些参数的先容,其实上图的中语阐述很明白了,这里咱们不作过多的先容。

三、XX参数

这是咱们重大斥地中战役到最多的参数类型。这也瑕瑜圭臬化参数,相对来说不沉稳,跟着JVM版块的变化可能会发生变化,主要用于JVM调优和debug。

宝贵:这种参数是咱们后续先容JVM调优培育最多的参数。

该参数的书写神气又分为两大类:

①、Boolean类型 神情:-XX:[+-]暗示启用或者禁用name属性。

例子:-XX:+UseG1GC(暗示启用G1垃圾麇集器)

②、Key-Value类型 神情:-XX:=暗示name的属性值为value。

例子:-XX:MaxGCPauseMillis=500(暗示缔造GC的最大停顿时辰是500ms)

四、参数详解

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 Files\Java\jdk1.8.0_152\bin\jconsole.exe"

暗示发生OOM后,运行jconsole.exe措施。这里不错毋庸加“”,因为jconsole.exe旅途Program Files含有空格。

诓骗这个参数,咱们不错在系统OOM后,自界说一个剧本,不错用来发送邮件告警信息,不错用来重启系统等等。

五、打印gc信息

①、打印GC毛糙信息

-verbose:gc

-XX:+PrintGC

一个是圭臬参数,一个是-XX参数,都是打印详备的gc信息。频繁会打印如下信息:

比如第一滑,暗示GC回收之前有12195K的内存,回收之后剩余1088K,总计内存为125951K

②、打印详备GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

六、指定GC日记以文献输出

-Xloggc:./gc.log

这个在参数用于将gc日记以文献的神气输出,更浅易咱们去稽察日记,定位问题。

七、缔造恒久代大小

-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

八、垃圾麇集器常用参数