gpt4 book ai didi

javascript - V8 中的栈和堆(JavaScript)

转载 作者:行者123 更新时间:2023-12-02 23:16:10 25 4
gpt4 key购买 nike

V8 是否像 JVM 一样使用栈和堆?如果是这样,它会将原语放在堆栈上并将对象放在堆上吗?

最佳答案

  • 在 V8 中,nullundefinedtruefalse 内部为 heap allocated objects 。如果您来自 Java,您可以说 V8 中的 truefalse 更像 Boolean.TRUEBoolean.FALSE 在 Java 中。
  • 真实的局部变量和由闭包捕获或由 eval/with 隐藏的变量之间存在重要区别。捕获变量存储在一个名为 Context 的特殊堆分配结构中。并被间接访问。有关真实与上下文分配变量的更多详细信息,请参阅 my answer to a different question
  • V8 有两个编译器:非优化(又称完整)编译器和优化编译器:

    • 非优化编译器无法在堆栈上存储超过 31 位(x64 上为 32 位)的 float 和整数,它总是将它们装箱到 HeapNumber 中。 s。它不会尝试进行寄存器分配,而是将真实局部变量存储在堆栈上。
    • 优化编译器要聪明得多。它进行寄存器分配(线性扫描),并可以在堆栈和寄存器(包括 XMM 寄存器)中保留完整的 32 位整数和 float 。
  • 说到 JVM:它可以执行所谓的堆栈分配,并在堆栈而不是堆上分配非逃逸对象。更通用的优化(标量替换)有时可以完全消除非转义对象的分配并将其分解为单独的字段。

关于javascript - V8 中的栈和堆(JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com