Java字节码是否包含"处理器指令信息"?

时间:2016-05-13 18:28:33

标签: java bytecode

Java字节代码是否包含"处理器指令信息"?

DO-178C表A-6"集成过程输出的测试"声明“可执行目标代码应......”,其中DO-178将目标代码定义如下:“计算机程序的低级表示,通常不是目标计算机可直接使用的形式,而是以除处理器指令信息外,还包括重定位信息。“

因此,我很好奇Java字节码是否适合DO-178C对象代码的定义"。

我没有多次询问字节代码和对象之间的区别 - 如果Java字节码包含"处理器指令信息",我特别感兴趣。

非常感谢您的时间和任何反馈和见解。

根据Oracle:" JIT将字节代码编译成本机机器代码必须在方法执行之前进行" http://docs.oracle.com/cd/E15289_01/doc.40/e15058/underst_jit.htm我想这意味着在此之前缺少本机机器处理器指令。基于此,似乎" no" Java字节码不包括本机处理器指令,这些指令存在于来自C编译器的目标代码中。

此外,维基百科(尽可能可信任)表明:"字节码不是任何特定计算机的机器代码" https://en.wikipedia.org/wiki/Just-in-time_compilation因此,这似乎表明Java字节码缺少"处理器指令信息"存在于C对象代码中。

2 个答案:

答案 0 :(得分:2)

是的,字节码处理器指令信息。

平台特定指令不是字节码的一部分。 JVM通过.class文件执行不同的操作,具体取决于它当前正在查看的字节码指令(它充当虚拟CPU,因此是虚拟机的术语)。这当然是一种简化,但您可以将JVM视为一个庞大的switch语句。一些JVM将分析几个字节码指令(可能是整个方法),以生成一些特定于平台的机器代码,这些代码在需要时由CPU直接执行(JIT编译)。

答案 1 :(得分:2)

这是关于技术属性的定义问题,但答案是肯定的。首先,有一些专门的处理器设计在门级,用于解析和执行JVM字节码(带有一些约束)。即使字节码不是在物理处理器上运行而是在JVM上运行,字节码也是JVM本身的指令集。但是,此字节码稍后可以通过JIT编译/优化转换为在使用的物理处理器上本机运行的处理器指令。