JavaScript中的JVM /堆/堆栈等价物是什么?

时间:2014-03-03 20:50:40

标签: javascript

我是一名JavaScript新手。我习惯于Java,因此我试图以极其不正确的方式映射两个世界。

问题:

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

  2. 在Java中,对象占用内存,内存存储在堆中。 JavaScript对象存储在哪里?换句话说,JVM的堆等价于JavaScript吗?

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

1 个答案:

答案 0 :(得分:4)

Java和ECMAScript 不是相同的语言,并且过去的一般性,具有不同的执行模型。虽然JLS (Java Language Specification)在技术上非常精确,但“{3}}仅关注行为

  

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

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

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

规范讨论了由Program execution组成的堆栈,它由逻辑链组成。

  

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