【发布时间】:2011-09-29 23:30:14
【问题描述】:
V8 是否像 JVM 一样使用堆栈和堆? 如果是这样,它会将原语放在堆栈上,将对象放在堆上吗?
【问题讨论】:
-
由于我没有完全阅读这篇文章,所以没有给出完整的答案,但是wingolog.org/archives/2011/07/05/v8-a-tale-of-two-compilers中肯定有关于堆栈/堆/寄存器使用的讨论
标签: javascript v8
V8 是否像 JVM 一样使用堆栈和堆? 如果是这样,它会将原语放在堆栈上,将对象放在堆上吗?
【问题讨论】:
标签: javascript v8
null、undefined、true 和 false 内部是 heap allocated objects。如果您来自 Java,您可以说 V8 中的 true 和 false 更像 Java 中的 Boolean.TRUE 和 Boolean.FALSE。V8 有两种编译器:非优化(又名完整)和优化一种:
说到JVM:它可以执行所谓的堆栈分配,并在堆栈而不是堆上分配一个非转义对象。更通用的优化(标量替换)有时可以完全消除非转义对象的分配并将其分解为单独的字段。
【讨论】:
是的,V8 使用类似于 JVM 和大多数其他语言的堆。然而,这意味着局部变量(作为一般规则)被放在堆栈中,而对象则放在堆中。例如,如果函数关闭这些值,这可能不成立。 与在 JVM 中一样,原语只能存储在堆栈中,前提是它们存储在局部变量中。
作为用户,这不是您通常需要担心的事情。
【讨论】:
一般来说,Yes V8 使用堆和堆栈来运行,其中一般局部变量存储在堆栈中,而需要维护的对象存储在堆中。
【讨论】: