stack and heap in V8 ( JavaScript)

2019-01-08 08:26发布

does V8 uses stack and heap like the JVM? if so does it put primitives on the stack and objects on the heap?

标签: javascript v8
3条回答
你好瞎i
2楼-- · 2019-01-08 08:41
  • In V8 null, undefined, true and false internally are heap allocated objects. If you are comming from Java you can say that true and false in V8 are more like Boolean.TRUE and Boolean.FALSE in Java.
  • There is an important difference between real local variables and variables that are captured by closures or shadowed by eval/with. Captures variables are stored in a special heap allocated structure called Context and are accessed indirectly. For more details about real vs. context allocates variables see my answer to a different question
  • V8 has two compilers: non-optimizing (aka full) and optimizing one:

    • Non-optimizing compiler can't store floating point numbers and integers beyond 31-bit (32-bit on x64) on the stack it always boxes them into HeapNumbers. It does not try to do register allocation and stores real local variables on the stack.
    • Optimizing compiler is much smarter. It does register allocation (linear scan) and can keep full 32-bit integers and floating point numbers on the stack and in the registers (including XMM registers).
  • Speaking of JVM: it can perform so called stack allocation and allocate a non-escaping object on the stack instead of the heap. A more generic optimization (scalar replacement) can sometimes completely eliminate allocation of non-escaping object and explode it into separate fields.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-01-08 08:41

In the most general terms, Yes V8 uses a heap and stack for functioning wherein general local variables are stored in the stack while the objects that need to be maintained are stored in the heap.

查看更多
SAY GOODBYE
4楼-- · 2019-01-08 08:47

Yes, V8 uses a heap similar to JVM and most other languages. This, however, means that local variables (as a general rule) are put on the stack and objects in the heap. This may for instance not hold if a function closes over these values. As in the JVM, primitives can only be stored on the stack if they are stored in a local variable.

As a user it is not something you would normally need to worry about.

查看更多
登录 后发表回答