1

我安装了 JDK 6 的 fastdebug 版本,并运行了以下命令:

java -XX:+PrintCFGToFile Test

但没有找到带有打印信息的文件...我在 Linux 和 Windows 操作系统上都试过了,但没有任何成功。放弃后,我从源代码(OpenJDK 7 源代码,Ubuntu)构建了 JDK,但没有成功,同样,它打印"VM option '+PrintCFGToFile'"但没有在执行类的目录中创建文件,也没有在 JDK bin 目录中......我寻找“输出.cfg”在文件系统上,什么也没找到...我检查了来源,似乎该文件确实有名称“output.cfg”(如果我没记错的话是CFGPrinter)

怎么了?是否应指定任何其他选项?如何以及在何处获取包含控制流图信息的此文件?

4

2 回答 2

1

好吧,非常感谢 OpenJDK 邮件列表,特别是感谢 Krystal Mok,他没有回答我的这个问题,并且不要在这里回答这个问题,并与社区分享:

HotSpot 中有两个 JIT:
1)C1 又名客户端 JIT
2)C2 又名服务器 JIT
,因为我使用 Ubuntu,HotSpot 使用 C2 编译器,并且 PrintCFGToFile 仅应用于 C1。

如果你真的想看到这个标志在你当前的平台上工作,你可能想要打开 -XX:+TieredCompilation

是一个建议,所以解决方案是:

java -XX:+PrintCFGToFile -XX:+TieredCompilation Test

运行它我在执行类的文件夹中得到 output.cfg 文件(如预期的那样)

原始答案(和线程)

于 2012-02-14T20:02:54.443 回答
0

关于 C1/C2 是对的。并且只有JIT编译的方法才能产生CFG-XX:+PrintCompilationopttion 可以报告编译了哪个方法。

于 2012-03-27T15:25:08.343 回答