Skip to content

JEP 271: Unified GC Logging | 统一的 GC 日志记录

摘要

使用 JEP 158 引入的统一 JVM 日志框架重新实现 GC 日志记录。

非目标

不要求确保当前的 GC 日志解析器在新的 GC 日志上无需更改即可正常工作。

新的日志格式可能不会完全复制所有日志条目。

描述

以尽量与当前 GC 日志格式一致的方式重新实现 GC 日志记录。新旧格式之间必然会有一些差异。

“gc”标签

想法是 -Xlog:gc(仅在 “gc” 标签上以 info 级别记录日志)应该类似于 -XX:+PrintGC,即每个 GC 打印一行。这意味着应该非常小心地使用 log_info(gc)("message"),不要仅在 “gc” 标签上以 info 级别记录日志,除非它是每个 GC 都应该打印的消息。

如果与其他标签组合使用,可以在 info 级别使用“gc”标签记录日志。例如:

java
log_info(gc, heap, ergo)("Heap expanded");

这里的想法是 -Xlog:gc 应该与 -XX:+PrintGCDetails 类似。但是这种映射不像 -Xlog:gc-XX:+PrintGC 的映射那样严格。-XX:+PrintGC 的规则非常明确:每个 GC 打印一行。-XX:+PrintGCDetails 的规则从来没有非常明确过。因此,一些 -XX:+PrintGCDetails 日志可能映射到多个标签,而有些可能只映射到“gc”标签的调试级别。

所有与 GC 相关的日志记录应使用“gc”标签。大多数日志记录不应仅使用“gc”标签,而是与其他适当的标签组合使用。

还有一些边界情况,不确定是否适用“gc”标签,例如在分配代码中。其中大多数情况可能不应使用“gc”标签。

其他标签

除了 “gc” 之外,还有许多其他标签。其中一些与旧标志相当匹配。例如,PrintAdaptiveSizePolicy 基本上映射到“ergo”标签(与“gc”标签和其他标签组合)。

详细模式

大多数由 Verbose 标志(一个开发标志)保护的日志记录应映射到 trace 级别。唯一的例外是如果它是从性能角度非常昂贵的日志记录,那么它将映射到 develop 级别。

前缀

统一日志框架中的前缀支持用于向 GC 日志消息添加 GC ID。GC ID 仅对在 GC 期间发生的日志记录感兴趣。由于前缀是针对特定的标签集定义的,即一组标签的组合,因此必须确保在 GC 之间发生的日志记录不使用与在 GC 期间进行的日志记录相同的标签集。

动态配置

某些日志记录要求在先前收集的数据的基础上进行。统一日志框架允许使用 jcmd 动态地打开和关闭所有日志记录。这意味着对于依赖于先前收集的数据的日志记录,仅检查日志记录是否启用是不够的;还必须进行检查以确保数据可用。

Page Layout Max Width

Adjust the exact value of the page width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the page layout
A ranged slider for user to choose and customize their desired width of the maximum width of the page layout can go.

Content Layout Max Width

Adjust the exact value of the document content width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the content layout
A ranged slider for user to choose and customize their desired width of the maximum width of the content layout can go.