V8是否像JVM一样使用堆栈和堆? 如果是这样,它将原语放在堆栈上和堆上的对象上?
答案 0 :(得分:31)
null
中,undefined
,true
和false
内部为heap allocated objects。如果您使用Java,可以说V8中的true
和false
更像是Java中的Boolean.TRUE
和Boolean.FALSE
。V8有两个编译器:非优化(又称完整)和优化一个:
说到JVM:它可以执行所谓的堆栈分配,并在堆栈而不是堆上分配非转义对象。更通用的优化(标量替换)有时可以完全消除非转义对象的分配并将其分解为单独的字段。
答案 1 :(得分:15)
是的,V8使用类似于JVM和大多数其他语言的堆。但是,这意味着将局部变量(作为一般规则)放在堆栈中的对象和堆中的对象上。例如,如果函数关闭这些值,则这可能不成立。 与在JVM中一样,如果基元存储在局部变量中,则它们只能存储在堆栈中。
作为用户,您通常不需要担心。
答案 2 :(得分:0)
在最一般的术语中,Yes V8使用堆和堆栈来运行,其中一般局部变量存储在堆栈中,而需要维护的对象存储在堆中。