且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java8相关的Jvm参数学习

更新时间:2022-08-14 18:36:52

最近学习了JVM知识,针对Jdk8的一些Jvm参数整理了一下。以备后用。

常用jvm参数列表

指数

说明

内存配置相关

-Xms

表示新生代初始内存的大小,应该小于-Xms的值;

-Xmx

表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;

-XX:NewSize=10m

新生代内存大小,表示新生代初始内存的大小,应该小于-Xms的值;

-XX:MaxNewSize=10m

表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;

-XX:MaxDirectMemorySize=10m

为NIO的direct-buffer分配时指定最大的内存大小。默认是0,意思是JVM自动选择direct-buffer的大小。

-XX:MaxMetaspaceSize

指定元数据区大小

-XX:MetaspaceSize

元数据区会在达到指定大小时发生垃圾回收,默认20.8M左右(x86下开启c2模式)

-XX:MinMetaspaceFreeRatio

当内存剩余比例小于这个值时垃圾回收会频繁一些, 默认40%。

-XX:MaxMetaspaceFreeRatio

当内存剩余比例大于这个值时垃圾回收频率会低一点,默认70%。

-XX:StringTableSize=N

指定常量池大小

-XX:+PrintStringTableStatistics

JVM进程退出时会打印StringTable统计信息

-Xsssize

设置thread stack大小同[-XX:ThreadStackSize],一般默认的几个系统参数如下:
Linux/x64: 1024 KB
OS: 1024 KB

GC相关

-verbose:gc

展示每个GC事件的信息

-XX:+PrintGC

展示每个GC事件的信息,包含-verbose:gc

-XX:+PrintGCDetails

程序产生GC时,打印垃圾回收的详细信息,包含-XX:+PrintGC

-Xloggc:filename

设置gc日志文件,gc相关信息会重定向到该文件。这个配置如果和-verbose:gc同时出现,会覆盖-verbose:gc参数。

-XX:+UseGCLogFileRotation

启用GC日志文件的自动转储

-XX:NumberOfGCLogFiles=1

GC日志文件的循环数目

-XX:GCLogFileSize=1M

控制GC日志文件的大小

-XX:+PrintGCDateStamps

输出gc的触发日期

-XX:+PrintGCTimeStamps

输出gc的触发时间

-verbose:jni

开启展示JNI调用信息。

-XX:+HeapDumpBeforeFullGC

发生fullGC前做heap dump

-XX:+HeapDumpAfterFullGC

发生fullGC后做heap dump

-XX:+HeapDumpOnOutOfMemoryError

参数表示当JVM发生OOM时,自动生成DUMP文件

-XX:HeapDumpPath=heapdump.hprof

${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof

-XX:ErrorFile=filename

当不可恢复的错误发生时,错误信息记录到哪个文件。默认是在当前目录的一个叫做hs_err_pid pid.log的文件。如果指定的目录没有写权限,这时候文件会创建到/tmp目录下。

-XX:ConcGCThreads=2

设置支持并发GC的线程数。默认值依赖于给JVM的CPU数目。

-XX:CMSTriggerRatio=50

设置一个在CMS开始前的内存的触发百分比,针对的是由-XX:MinHeapFreeRatio分配的内存。默认是80。

-XX:ParallelGCThreads=threads

并行GC时的线程数。默认值是CPU数。

-XX:+PrintGC

打印每次GC的消息,默认是关闭的。

-XX:+PrintGCApplicationConcurrentTime

打印上次GC暂停到目前的时间。默认不打印。

-XX:+PrintGCApplicationStoppedTime

打印GC暂停的时间长度。默认不打印。

-XX:+UseG1GC

设置使用G1作为GC收集器。G1比较推荐在大堆应用场景下使用(大于6GB)。

-XX:+UseSHM

在Linux环境下支持JVM使用共享内存来设置大页。


推荐默认开启的参数为:

java -Xms1024M -Xmx2048M XX:MetaspaceSize=125m -XX:MaxMetaspaceSize=256m -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=1M -XX:+PrintGCDetails -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof -jar xxx.jar