【问题标题】:What is the JVM / heap / stack equivalent in JavaScript?JavaScript 中的 JVM / heap / stack 等价物是什么?
【发布时间】:2014-03-03 20:50:39
【问题描述】:

我是 JavaScript 新手。我习惯了 Java,因此我试图以极其错误的方式映射两个世界。

问题:

  1. 每个 Java 实例都在 JVM 上运行。 JavaScript 对应的 JVM 是什么?

  2. 在 Java 中,对象占用内存,而内存存储在堆上。 JavaScript 对象存储在哪里?换句话说,JVM 的堆等价物是什么?

  3. Java 中的每个函数调用都会添加一个堆栈帧。 JavaScript 函数调用是否也这样做(即添加堆栈)?

【问题讨论】:

  • 1.浏览器。 2.隐含的heap。 3. 是的。你可以触发stack overflow;只有每个 Javascript 函数也是一个对象。

标签: javascript


【解决方案1】:

Java 和 ECMAScript 不是同一种语言,而且过去的普遍性是具有不同的执行模型。虽然JLS (Java Language Specification) 在技术上对“引用”和“堆”之类的东西非常精确,但ECMAScript specification 只关注行为

ECMAScript 的一致实现必须提供并支持本规范中描述的所有类型、值、对象、属性、函数以及程序语法和语义(行为)。

ECMAScript 由"JavaScript Engine" 执行。通常每个浏览器窗口都有一个“环境”;也就是说,每个window 对象是最多一个并发Program execution 的全局上下文。这实际上意味着每个浏览器窗口“都是一个单独的 VM”。

每个可变对象都是可变的,并且每个对象只有在被强引用时才可访问(因此保证是活动的)。 实现当然使用“堆”内存和“引用”,因为它是一种实用/必需的设计选择;但规范中没有讨论“堆”或“引用”(在这个意义上)的使用。

规范以Execution Contexts 的形式讨论堆栈,它由逻辑链组成。

当控制权转移到 ECMAScript 可执行代码时,控制权正在进入执行上下文。活动执行上下文逻辑上形成一个堆栈..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2014-12-06
    • 2011-04-23
    • 2013-07-01
    相关资源
    最近更新 更多