深入理解 JVM---JVM 和 GC 日志 以及 内存分配回收日志

发布时间 2023-04-05 16:19:13作者: archaique

虚拟机及垃圾收集器日志

1、JDK9 日志

在JDK 9以前,HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环 日志大小、输出格式、重定向等设置在不同功能上都要单独解决。

直到JDK 9,这种混乱不堪的局面 才终于消失,HotSpot所有功能的日志都收归到了“-Xlog”参数上,这个参数的能力也相应被极大拓展 了:

-Xlog[:[selector][:[output][:[decorators][:output-options]]]]

选择器(Selector)最关键,以下两部分

    • 标签(Tag),虚拟机中某个功能模块的名字:add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,breakpoint,bytecode
    • 日志级别(Level),共有Trace,Debug,Info,Warning,Error,Off六种级别,默认级别为Info

修饰器(Decorator),每行日志输出都附加上额外的内容,如果不指定,默认值是uptime、level、tags这三个

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

2、JDK9 前后举例

1、查看GC基本信息,在JDK 9之前使用-XX:+PrintGC,JDK 9后使用-Xlog:gc: