首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java虚拟机语言是不可知的吗?

Java虚拟机语言是不可知的吗?
EN

Stack Overflow用户
提问于 2011-09-20 22:39:49
回答 4查看 991关注 0票数 10

可以肯定地说,Java虚拟机“最初”是为Java编程语言设计的,但现在,其他开发人员已经能够编写编译为Java字节码的编程语言,如Scala、Jython和JRuby。

在Java字节码中仍然有“面向对象”的引用,比如接口、方法、字段。例如,invokespecial是对“object”方法的调用。

它不是一个纯语言不可知指令集的纯堆栈虚拟机。例如,纯FORTH实现将只有堆栈操作。

问题是,JVM语言是不可知的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-20 23:09:02

在JVM和java字节码是图灵完成的意义上,任何其它图灵完成语言都可以被转换和编译成java字节码并在JVM上运行。它的效率可能非常低,但也不是不可能。至于“不可知论者”的最严格的定义,没有这样的事情。在硬件级别,所有处理器都有一组定义的二进制指令,因此在某些情况下,任何语言都必须转换为与其应该在其上执行的硬件兼容的汇编。

编辑: JVM不是在真空中开发的,它是与JAVA编程语言一起开发的,因此Java语言很大程度上影响了Java字节码和JVM的设计。因此,在这个意义上,您可以说JVM在设计时就考虑到了Java。但在体系结构中,JVM有意识地与Java语言解耦(通过中间字节码格式),因此在设计中有一些元素考虑了可能的替代语言。

票数 4
EN

Stack Overflow用户

发布于 2011-09-20 22:42:42

JVM绝对不是语言不可知的,有些语言不能在JVM上有效地实现。例如,JVM没有提供内存寻址操作,因此实现像C这样的低级语言将是非常低效的。但它的原语集能够支持许多流行的语言,具有不同于Java的功能,只要有一个适当的智能编译器。可以很好地实现的语言不一定只是加了语法糖的Java;当然,与Java的差异越大,实现这种语言就越困难

票数 9
EN

Stack Overflow用户

发布于 2011-09-20 22:51:54

JVM不是语言不可知的;但是,它的语言是JVM字节码。考虑虚拟机的组装,然后您将对JVM运行的内容有一个很好的了解。选择JVM字节码是为了方便Java程序的运行,但就像任何“足够完整”的程序集一样,它也可以用于许多其他用途。关键是编译过程中正在做什么。

其他语言障碍包括JVM是基于堆栈的机器的设计,这意味着显式地址对于字节码层中的JVM来说是无意义的。没有“加载”或“存储”操作;然而,这并不能阻止那些想要在JVM上实现寻址的语言的人。这只会让那些想要寻址的人变得更加困难。

要在JVM上进行寻址,基本上需要编写一个模拟器;在模拟器中,您有一个包含"address To object handle“查找表的对象。这允许您通过在缺乏寻址的虚拟机上进行模拟来执行基本寻址。它并不总是很好,并且模拟的质量通常只扩展到模拟语言允许的用例。

是的,将(对象的)地址映射(对象到Java堆引用)到(在JVM内部) java堆引用到物理内存地址,确实会造成一些性能损失。但这就是保持平台不可知性所必须做的事情。如果您可以直接访问内存,那么您最终将不得不为不同的硬件平台编码,而不是为虚拟机编码。好吧,至少你会比现在更早地被推入特定于平台的代码中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7487045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档