JVM实现的语言(如Jython)是在底层使用Java还是使用JVM本机



在使用JVM的语言中,比如Jython、JRuby或任何不是Java的语言,Java是"底层"某处使用的语言吗?

实现是否意味着:

语言移植使用JVM + Java某处+ JVM?

例如,Jython是用Java编写的还是使用其他东西来利用JVM?

看情况。

语言的部分标准库可以在java中实现。编译器/解释器也是如此。其他对引导不重要的部分甚至可以用语言本身编写。

用户代码本身最初可以通过解释器运行,但随后编译为字节码。此外,生成的字节码可以根据运行时收集的类型配置文件进一步优化。如果字节码的某些假设无效,字节码可能会被保释回解释器。这类似于hotspot的解释器/c1/c2层和许多其他JIT环境——尽管是在更高的抽象级别上。

但是解释器+JIT只是一种可能的方法。例如,Scala是aot编译成字节码的。

它们也可以使用C绑定来实现各自语言标准库的函数,这些函数与JDK标准库没有1:1的映射。

不,它们(在一般情况下)不会编译成Java。

例如,Jython将python编译成Java字节码,然后在JVM上运行。这是Java编译成的相同字节码,JRuby也是如此。虽然Jython和JRuby本身大部分都是用Java编写的,但是实际运行的python/Ruby程序并没有被编译成Java,而是立即被编译成Java字节码。

最新更新