为 C2 编译期间 Java 高内存使用生成编译器回放数据文件

问题描述 投票:0回答:1

C2 编译器线程在编译一些方法时正在分配高端内存(借助本机内存跟踪确认)。问题是随机重现的,无法用测试代码复制。

编译实际上失败了:COMPILE SKIPPED: unsupported calling sequence (retry at different tier)

如何在这个有问题的编译过程中记录 JVM 的状态并转储所谓的“Compiler_replay_data”文件?

在一些关于 JVM 崩溃的 JDK 错误报告中,可以看到重播文件非常有帮助。如何为我的高内存占用情况生成一个这样的案例?

java jvm compiler-optimization jit
1个回答
0
投票

您可以使用

-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 ...
© www.soinside.com 2019 - 2024. All rights reserved.