Android Runtime(ART或Dalvik)是否包含类似JVM的Java VM堆栈或本地方法堆栈?

4
根据Oracle文档中的运行时数据区域,JVM包含各种数据区域,如下图所示:enter image description here我还了解到,JVM是基于堆栈的,而ART/Dalvik是基于寄存器的。Dalvik堆由活动堆和Zygote堆组成。
问题如下:
1. 基于堆栈的“Stack”和Java VM堆栈/本地方法堆栈中的“Stack”有什么区别?
2. ART/Dalvik是否像JVM中的Java VM堆栈一样包含堆栈?
3. ART/Dalvik运行时数据区域是什么样子?

首先,这些只是名称,用于表示内存部分的目的。因此,所有执行环境都拥有它们或类似的东西,即使它们可能为它们使用不同的名称。此外,您在一个问题中肯定有太多问题。单独第三个问题对于Stackoverflow来说也过于宽泛。如果您想了解Dalvik的运行时数据区域的外观,请查阅Dalvik内部的文档(如果有的话)。 - Holger
@Holger 感谢您的回复。我已经搜索了很长时间关于Dalvik的运行时数据区域,但似乎“运行时数据区域”的概念只会在JVM中提到。我已经阅读了一些关于Dalvik内部的文章,但是我没有找到任何类似于JVM运行时数据区域的东西。 - MummyDing
1个回答

5
  1. 在基于堆栈的语言中,"Stack" 和 Java VM stack/Native Method Stack 中的 "Stack" 有什么区别?

它们指的是同一件事情。“基于堆栈”的虚拟机使用其内存空间中的 stack 来执行逻辑和算术运算。

ART/Dalvik 中是否包含像 JVM 中的 Java VM stacks 那样的堆栈?

安卓虚拟机实现(包括 Dalvik 和 ART)并不是基于堆栈的,相反它是 基于寄存器的。这允许安卓将虚拟寄存器直接映射到真实硬件寄存器,提高了执行速度和效率。

  1. ART/Dalvik的运行时数据区是什么样子的?

您可以在此处查看有关基于堆栈和基于寄存器的虚拟机的示例和更多信息:链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接