“这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战”
🔉引言
今天是第31天了,这一个月很感动,也很感恩,感动的是什么呢,感动的是自己竟然完成了每天的更文任务,并还能和这么多的小伙伴一起前行,感恩的是如果没有这个活动,可能也就不会有这个状态下的我,我们每一次成功都要感谢自己的运气和我们的选择,最后一篇理论很少,废话很多。
虚拟机及垃圾收集器日志
解决java虚拟机内存问题最直接的办法就是看日志,但遗憾的是虚拟机的日志并没有一个固定的规范,而且在JDK9以前并没有一个统一的日志处理框架,这就导致虚拟机的各个功能模块的日志开关分布在不同的参数上,直到JDK9,这种混乱不堪的局面才消失,所有功能的日志都归到了-Xlog的参数上。
JDK9的GC日志
-Xlog[:[selector][:[output][:[decorators][:output-options]]]]
命令行中最关键的参数是选择器(Selector),它由标签(Tag)和日志级别(Level)共同组成。标签可理解为虚拟机中某个功能模块的名字,它告诉日志框架用户希望得到虚拟机哪些功能的日志输出。垃圾收集器的标签名称为“gc”,由此可见,垃圾收集器日志只是HotSpot众多功能日志的其中一项,全部支持的功能模块标签名如下所示:
日志级别从低到高,共有Trace,Debug,Info,Warning,Error,Off六种级别,日志级别决定了输出信息的详细程度,默认级别为Info,HotSpot的日志规则与Log4j、SLF4j这类Java日志框架大体上是一致的。额外附加信息还包括:
time:当前日期和时间。
uptime:虚拟机启动到现在经过的时间,以秒为单位。
timemillis:当前时间的毫秒数,相当于System.currentTimeMillis()的输出。
uptimemillis:虚拟机启动到现在经过的毫秒数。
timenanos:当前时间的纳秒数,相当于System.nanoTime()的输出。
uptimenanos:虚拟机启动到现在经过的纳秒数。
pid:进程ID。
tid:线程ID。
level:日志级别。
tags:日志输出的标签集。
JDK8的GC日志
查看GC基本信息参数设置:
查看GC基本信息结果:
同查看GC基本信息一样,在JDK 9之前使用-XX:+PrintGCDetails;
查看GC详细信息结果: