JVM学习日记⭐️如何挑选合适的垃圾收集器(下)

269 阅读2分钟

“这是我参与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六种级别,日志级别决定了输出信息的详细程度,默认级别为InfoHotSpot的日志规则与Log4jSLF4j这类Java日志框架大体上是一致的。额外附加信息还包括:

time:当前日期和时间。 uptime:虚拟机启动到现在经过的时间,以秒为单位。 timemillis:当前时间的毫秒数,相当于System.currentTimeMillis()的输出。 uptimemillis:虚拟机启动到现在经过的毫秒数。 timenanos:当前时间的纳秒数,相当于System.nanoTime()的输出。 uptimenanos:虚拟机启动到现在经过的纳秒数。 pid:进程ID。 tid:线程ID。 level:日志级别。 tags:日志输出的标签集。

JDK8的GC日志

查看GC基本信息参数设置:

image.png

查看GC基本信息结果:

image.png 同查看GC基本信息一样,在JDK 9之前使用-XX:+PrintGCDetails; 查看GC详细信息结果: image.png

📝题外话