javascript - JavaScript 中的 JVM/heap/stack 等价物是什么?

标签 javascript

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

问题:

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

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

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

最佳答案

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

A conforming implementation of ECMAScript must provide and support all the types, values, objects, properties, functions, and program syntax and semantics (behavior) described in this specification.

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

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

规范根据 Execution Contexts 讨论堆栈由逻辑链组成。

When control is transferred to ECMAScript executable code, control is entering an execution context. Active execution contexts logically form a stack ..

关于javascript - JavaScript 中的 JVM/heap/stack 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157155/

相关文章:

javascript - .Net Core Get 不被击中

javascript - 如何在 React.createClass 中使用箭头函数

javascript - 手动添加声明文件 (TypeScript)

javascript - jquery点击功能选择和取消选择

javascript - 如何在Firebase数据库中查询子节点然后删除节点

javascript - 在表中的 <i> 元素上弹出

javascript - Express.js POST 方法不起作用

javascript - 使用箭头函数重构嵌套函数

带有 aria-hidden 弹出窗口的 Javascript 问题

javascript - 如何创建一个按钮来更改 href 的一部分?