JAVA虚拟机GC参数变化
前置知识
JVM日志
在JDK9以前,HotSpot没有统一的日志处理框架,直到JDK9,HotSpot所有功能的日志都可以由-Xlog
参数控制
使用说明:-Xlog[:[selector][:[output][:[decorators][:out-options]]]]
其中最关键的参数是选择器(selector),它由标签Tag
和日志级别Level
组成.
- Tag
标签
可以理解为虚拟机的某个功能模块.其中垃圾收集器的标签名称为gc
所有支持的标签如下
add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,breakpoint,bytecode,census,class,classhisto,cleanup,compaction,comparator,constraints,constantpool,coops,cpu,cset,data,defaultmethods,dump,ergo,event,exceptions,exit,fingerprint,freelist,gc,hashtables,heap,humongous,ihop,iklass,init,itables,jfr,jni,jvmti,liveness,load,loader,logging,mark,marking,metadata,metaspace,method,mmu,modules,monitorinflation,monitormismatch,nmethod,normalize,objecttagging,obsolete,oopmap,os,pagesize,parser,patch,path,phases,plab,preorder,promotion,protectiondomain,purge,redefine,ref,refine,region,remset,resolve,safepoint,scavenge,scrub,setting,stackmap,stacktrace,stackwalk,start,startuptime,state,stats,stringdedup,stringtable,subclass,survivor,sweep,system,task,thread,time,timer,tlab,unload,update,verification,verify,vmoperation,vtables,workgang
- 日志级别
日志级别从低到高,共有Trace,Debug,Info,Warning,Error,Off六中级别,支持附加在日志行上的消息如下表显示
tag | 说明 |
---|---|
time | 当前日期和时间 |
uptime | 虚拟机启动到现在经过的时间,以秒为单位 |
timemillis | 当前时间的毫秒数,相当于System.currentTimeMillis()的输出 |
uptimemillis | 虚拟机启动到现在经过的毫秒数 |
timenanos | 当前时间的纳秒数,相当于System.nanoTime()的输出 |
uptimenanos | 虚拟机启动到现在经过的纳秒数 |
pid | 进程id |
tid | 线程id |
level | 日志级别 |
tags | 日志输出的标签集 |
如果不刻意指定输出格式,其默认格式是[uptime][level][tags]
虚拟机GC相关参数变化
- GC基本信息
JDK9之前:-XX:+PrintGC
JDK9及以后:-Xlog:gc
C:\Java\jdk\bin>java -Xlog:gc Test
[0.019s][info][gc] Using G1
helloWorld
- GC详细信息
JDK9之前:-XX:+PrintGCDetail
JDK9及以后:-Xlog:gc*
C:\Java\jdk\bin>java -Xlog:gc* Test
[0.016s][info][gc,heap] Heap region size: 1M
[0.022s][info][gc ] Using G1
[0.023s][info][gc,heap,coops] Heap address: 0x0000000080a00000, size: 2038 MB, Compressed Oops mode: 32-bit
helloWorld
[0.123s][info][gc,heap,exit ] Heap
[0.123s][info][gc,heap,exit ] garbage-first heap total 131072K, used 1024K [0x0000000080a00000, 0x0000000100000000)
[0.125s][info][gc,heap,exit ] region size 1024K, 2 young (2048K), 0 survivors (0K)
[0.127s][info][gc,heap,exit ] Metaspace used 3635K, capacity 4486K, committed 4864K, reserved 1056768K
[0.128s][info][gc,heap,exit ] class space used 325K, capacity 386K, committed 512K, reserved 1048576K