首页 > 解决方案 > JVM:JVM指令实现可以使用什么语言?

问题描述

取自有关 JVM的Oracle官方文档:

Java 虚拟机的实现可以使用传统的堆栈,通俗地称为“C 堆栈”,以支持本地方法(以 Java 编程语言以外的语言编写的方法)。本机方法堆栈也可以被 Java 虚拟机指令集的解释器实现使用,例如 C 语言。

因此,基本上每当 JVM 在 C 中实现其指令集时,该实现就可以使用本机方法堆栈。这让我想到 JVM 指令集可以用哪些其他语言实现,在这些情况下使用什么样的堆栈?

标签: javajvmnativebytecode

解决方案


因此,基本上每当 JVM 在 C 中实现其指令集时,该实现就可以使用本机方法堆栈。

JVM 规范说,当 JVM 以“诸如C 的语言”(添加了重点)实现时,它可以使用所谓的“C 堆栈”。这几乎毫无意义。最合理的解释是,如果实现特定 JVM 的语言本身依赖于 C 堆栈,则允许 JVM 本身依赖于 C 堆栈。

引用的上下文是对 JVM 使用的内存区域的讨论,所以要提出的要点只是 JVM 可能会将其一些运行时内存用于 C 堆栈。为 Java 堆栈提供了完全独立的规定,尽管规范并不要求这与使用 C 堆栈的 JVM 中的 C 堆栈区域不同。

但是请注意,尽管人们通常期望 C 本身被视为一种语言,例如 C,但它的规范对堆栈没有任何规定。“C 堆栈”不是 C 的属性,而是硬件和 ABI 的属性。

这让我想到 JVM 指令集可以用哪些其他语言来实现

原则上,JVM 可以用任何图灵完备的语言来实现。示例包括 C、C++、Fortran、Python、Lisp、Perl、Ruby、Bash、BASIC、Java 本身以及许多其他的过去、现在和未来。有些人比其他人更有吸引力。

在这些情况下使用什么样的堆栈?

如果所选语言的所选实现使用 C 堆栈,则 JVM可以为 C 堆栈保留空间。还有每个 JVM 都有的 Java 堆栈。JVM 规范没有明确规定任何其他类型的堆栈。


推荐阅读