java 解释器在逐行执行代码之前执行 conversion/translation 吗?

does java interpreter performs conversion/translation before execution of code line by line?

维基百科和其他一些网站将解释器描述为将代码从某种高级语言翻译成某种低级语言的翻译器。然而,那里有很多解释,包括在 Whosebug 中,它说解释器直接执行它作为输入的指令,而无需事先转换。 那么解释器是像编译器一样的翻译器还是像CPU一样的执行器?

这在很大程度上取决于。

您必须了解当今的 jvm 实现是强大的大工具。

通常,他们有翻译部分。那一个首先启动:它读取字节码并直接解释它自己。其名字直接意义上的Java虚拟机

但是一旦特定代码被重复执行(即数千次重复),所谓的即时编译器就会启动。它们将字节码转换为本机机器码并进行各种性能优化,比如方法内联。

这样的 jvms 正在做你在问题中提到的两件事。

当你编译Java代码时,你把它变成了Java字节码。当你执行你的 Java 程序时,你实际上调用了 Java 虚拟机来解释 Java 字节码。 JVM 解释 Java 字节码,并从中生成特定于平台的字节码,然后由平台执行。

这是对它的作用的简单解释,但它做的更多:就像@GhostCat 所说的,除此之外,它有时会编译经常执行的代码块,并保留编译后的版本(以某种形式特定于平台的字节码),以避免每次都解释它(这称为 JIT 编译)。

这使得 Java 成为编译和解释的混合体:源代码被 编译 为 Java 字节码,然后 Java 字节码在特定平台上解释