C2 编译器线程在编译一些方法时正在分配高端内存(借助本机内存跟踪确认)。问题是随机重现的,无法用测试代码复制。
编译实际上失败了:COMPILE SKIPPED: unsupported calling sequence (retry at different tier)
如何在这个有问题的编译过程中记录 JVM 的状态并转储所谓的“Compiler_replay_data”文件?
在一些关于 JVM 崩溃的 JDK 错误报告中,可以看到重播文件非常有帮助。如何为我的高内存占用情况生成一个这样的案例?
您可以使用
-XX:CompileCommand
启用特定方法的重放数据记录:
java -XX:CompileCommand=option,ClassName::methodName,DumpReplay ...
ClassName
和/或 methodName
可以用 *
指定为通配符。例如,要转储所有 java.lang
类的回放数据,请使用
java -XX:CompileCommand=option,java.lang.*::*,DumpReplay ...
如果 JVM 在 JIT 编译期间崩溃,重播数据也会自动保存。您可以使用以下选项在编译失败时强制 JVM 崩溃:
java -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure ...