反汇编Java JIT编译的本机字节码


问题内容

有什么方法可以对Java即时编译器生成的本机代码进行汇编转储吗?

和一个相关的问题:是否有任何方法可以使用JIT编译器而无需运行JVM将我的代码编译为本地机器代码?


问题答案:

是的,有一种方法可以打印生成的本机代码(需要OpenJDK
7)。

不,无法使用JDK的JIT将Java字节码编译为本地代码并将其另存为本地可执行文件。

即使这是可能的,它也可能没有您想象的有用。JVM进行了一些非常复杂的优化,甚至可以在必要时动态取消对代码的优化。换句话说,它不像JIT那样简单地将代码编译为本地机器语言,然后在程序运行时该本地机器语言将保持不变。同样,这也不允许您制作独立于JVM和运行时库的本机可执行文件。