pile et tas dans V8 (JavaScript)

V8 utilise-t-il la pile et le tas comme la JVM? si oui met-il primitives sur la pile et objets sur le tas?

23
demandé sur Mathias Schwarz 2011-07-07 00:57:02

3 réponses

Oui, V8 utilise un tas similaire à JVM et à la plupart des autres langues. Cela signifie cependant que les variables locales (en règle générale) sont placées sur la pile et les objets dans le tas. Cela peut par exemple ne pas tenir si une fonction se ferme sur ces valeurs. Comme dans la JVM, les primitives ne peuvent être stockées sur la pile que si elles sont stockées dans une variable locale.

En tant qu'utilisateur, ce n'est pas quelque chose dont vous auriez normalement besoin de vous inquiéter.

15
répondu Mathias Schwarz 2011-07-06 21:26:00
  • En V8 null, undefined, true et false en interne sont tas objets alloués. Si vous venez de Java, vous pouvez dire que true et false dans V8 ressemblent plus à Boolean.TRUE et Boolean.FALSE en Java.
  • Il existe une différence importante entre les variables localesréelles et les variables capturées par des fermetures ou ombrées par eval/with. Les variables de capture sont stockées dans une structure allouée spéciale appelée Context et sont accessibles indirectement. Pour plus d' détails sur réel vs contexte alloue des variables de voir ma réponse à une question différente
  • V8 a deux compilateurs: non-optimizing (aka full) et optimizing one:

    • le compilateur Non optimisant ne peut pas stocker les nombres à virgule flottante et les entiers au-delà de 31 bits (32 bits sur x64) sur la pile, il les place toujours dans HeapNumbers. Il n'essaie pas de faire l'allocation d'enregistrement et stocke Real variables locales sur le pile.
    • L'optimisation du compilateur est beaucoup plus intelligente. Il enregistre l'allocation (balayage linéaire) et peut conserver des entiers complets de 32 bits et des nombres à virgule flottante sur la pile et dans les registres (y compris les registres XMM).
  • En parlant de JVM: il peut effectuer ce qu'on appelle l'allocation de pile et allouer un objet non-échappant sur la pile au lieu du tas. Une optimisation plus générique (remplacement scalaire ) peut parfois éliminer complètement l'allocation de l'objet non-échappement et l'exploser dans des champs séparés.

29
répondu Vyacheslav Egorov 2017-05-23 12:34:37

Dans les termes les plus généraux, Yes V8 utilise un tas et une pile pour fonctionner dans lequel les variables locales générales sont stockées dans la pile tandis que les objets qui doivent être maintenus sont stockés dans le tas.

0
répondu kg11 2016-08-30 09:31:58