摘自JVM的官方甲骨文文档:
Java虚拟机的实现可以使用传统的堆栈(俗称"C堆栈“)来支持本机方法(用Java编程语言以外的语言编写的方法)。Java虚拟机指令集解释器的实现也可以使用本机方法栈,例如C语言。
因此,只要JVM在C中实现它的指令集,那么实现就可以使用本机方法堆栈。这让我想到JVM指令集可以在哪些其他语言中实现,以及在这些情况下使用什么样的堆栈?
发布于 2021-01-25 07:04:52
因此,只要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、BASIC、Java本身以及许多其他的过去、现在和未来。有些人比其他人更有吸引力。
在这些情况下使用的是哪种堆栈?
如果所选语言的实现使用C堆栈,那么JVM可以为C堆栈预留空间。还有Java堆栈,每个JVM都有。JVM规范没有对任何其他类型的堆栈做出明确的规定。
https://stackoverflow.com/questions/65879732
复制相似问题