java - JVM:JVM指令实现可以使用什么语言?
问题描述
取自有关 JVM的Oracle官方文档:
Java 虚拟机的实现可以使用传统的堆栈,通俗地称为“C 堆栈”,以支持本地方法(以 Java 编程语言以外的语言编写的方法)。本机方法堆栈也可以被 Java 虚拟机指令集的解释器实现使用,例如 C 语言。
因此,基本上每当 JVM 在 C 中实现其指令集时,该实现就可以使用本机方法堆栈。这让我想到 JVM 指令集可以用哪些其他语言实现,在这些情况下使用什么样的堆栈?
解决方案
因此,基本上每当 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 规范没有明确规定任何其他类型的堆栈。
推荐阅读
- dart - 使用 Flutter 和 web3dart 创建智能合约
- java - 安排了 2 个石英作业,但只有一个执行了两次
- java - 如何修复“运行‘应用程序’时出错:未找到默认活动”
- c# - 如何从服务器下载文本?
- typescript - 我无法让 Blockly 在 Angular 中工作:如何使其工作?
- angular - 如何在有角度的 ionic 4 中恢复由 ion-searchbar 过滤的数据?
- sql - 如何选择具有连接列的表?
- r - 将自定义函数应用于 R 中的多个组
- angular - 如何将 HTTPS 请求从 Angular 前端发送到使用自签名证书保护的服务器?
- excel - Excel VBA将XML文件读入字符串用完了字符