1. -XX:+PrintCompilation 与 JIT 日志解读
-XX:+PrintCompilation 与 JIT 日志如何解读?
- PrintCompilation 的输出格式
- 编译级别与状态
- 解读 JIT 编译行为
-XX:+PrintCompilation 会输出 JIT 编译事件日志,每行形如:timestamp compilation_id attributes flags owner compiled_method,其中 timestamp 是编译开始时间,compilation_id 是编译编号,attributes 表示编译状态(如 % 表示 OSR 栈上替换、s 表示 synchronized 方法、! 表示异常处理、n 表示 native 等),flags 表示编译级别(C1/C2,如 1/2/3/4),owner 是编译线程,compiled_method 是方法签名。通过解读日志可了解:哪些方法被编译、编译级别(C1 快速编译还是 C2 深度优化)、是否发生 OSR、是否多次重新编译(去优化)。这在定位"方法未按预期编译"或"编译开销过大"时很有用。
PrintCompilation 是 JIT 编译行为的"账本",记录编译时机、级别与状态。结合编译级别(1-4)与 OSR/去优化标记,可判断 JIT 是否按预期工作。
// 启用 JIT 编译日志
// -XX:+PrintCompilation
// 输出示例
// 123.456 567 b 3 com.example.Service::process (123 bytes)