apilar y amontonar en V8 (JavaScript)


¿V8 usa pila y montón como la JVM? si es así, ¿pone primitivas en la pila y objetos en la pila?

Author: Mathias Schwarz, 2011-07-07

3 answers

Sí, V8 utiliza un montón similar a JVM y la mayoría de los otros lenguajes. Esto, sin embargo, significa que las variables locales (como regla general) se colocan en la pila y los objetos en el montón. Esto puede, por ejemplo, no mantenerse si una función se cierra sobre estos valores. Al igual que en la JVM, las primitivas solo se pueden almacenar en la pila si se almacenan en una variable local.

Como usuario no es algo de lo que normalmente tendría que preocuparse.

 15
Author: Mathias Schwarz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-06 21:26:00
  • En V8 null, undefined, true y false internamente son montón de objetos asignados. Si viene de Java, puede decir que true y false en V8 son más como Boolean.TRUE y Boolean.FALSE en Java.
  • Hay una diferencia importante entre variables locales reales y variables que son capturadas por closures o sombreadas por eval/with. Las variables capturadas se almacenan en una estructura especial de asignación de montón llamada Context y se accede indirectamente. Para más detalles acerca de real vs. contexto asigna variables ver mi respuesta a una pregunta diferente
  • V8 tiene dos compiladores: no optimizando (también conocido como full) y optimizando uno:

    • El compilador no optimizador no puede almacenar números e enteros en coma flotante más allá de 31 bits (32 bits en x64) en la pila siempre los recubre en Número de montóns. No intenta hacer asignación de registros y almacena variables locales reales en el pila.
    • El compilador de optimización es mucho más inteligente. Registra la asignación (escaneo lineal) y puede mantener enteros completos de 32 bits y números de coma flotante en la pila y en los registros (incluidos los registros XMM).
  • Hablando de JVM: puede realizar lo que se llama asignación de pila y asignar un objeto sin escape en la pila en lugar del montón. Una optimización más genérica (reemplazo escalar ) a veces puede eliminar completamente la asignación de no escapar de objeto y explotar en campos separados.

 29
Author: Vyacheslav Egorov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:37

En términos más generales, Yes V8 utiliza un montón y pila para funcionar en el que las variables locales generales se almacenan en la pila mientras que los objetos que necesitan ser mantenidos se almacenan en el montón.

 0
Author: kg11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-30 09:31:58