天天看点

Java8相关的Jvm参数学习

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

常用jvm参数列表

指数 说明
内存配置相关 -Xms 表示新生代初始内存的大小,应该小于-Xms的值;
-Xmx 表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;
-XX:NewSize=10m 新生代内存大小,表示新生代初始内存的大小,应该小于-Xms的值;
-XX:MaxNewSize=10m
-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数。
打印每次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