¿utiliza V8 stack y heap como JVM? si es así, ¿pone primitivas en la pila y objetos en el montón?pila y montón en V8 (JavaScript)
Respuesta
Sí, V8 utiliza un montón similar a JVM y la mayoría de los demás lenguajes. Esto, sin embargo, significa que las variables locales (como regla general) se ponen en la pila y los objetos en el montón. Esto puede, por ejemplo, no mantenerse si una función cierra sobre estos valores. Al igual que en la JVM, las primitivas solo se pueden almacenar en la pila si están almacenadas en una variable local.
Como usuario, no es algo de lo que normalmente deba preocuparse.
Mucho los detalles del comportamiento en tiempo de ejecución pueden variar en función de las optimizaciones aplicadas. Cf. http://code.google.com/apis/v8/design.html –
En realidad, hasta donde yo sé, el problema de la pila frente al montón es bastante estático en el V8, pero no estoy 100% seguro de ello. Las cosas con las que enlazas son sobre el acceso a propiedades en objetos que tiene poco que ver con esto. –
cuando una función cierra sobre locales el objeto de cierre está en el montón?¿El marco nunca se mueve a la pila cuando se ejecuta su código? –
- En V8
null
,undefined
,true
yfalse
internamente son heap allocated objects. Si proviene de Java, puede decir quetrue
yfalse
en V8 son más comoBoolean.TRUE
yBoolean.FALSE
en Java. - Existe una diferencia importante entre real variables locales y variables que son capturadas por cierres o sombreadas por eval/with. Las variables de captura se almacenan en una estructura asignada de montón especial llamada Context y se accede indirectamente. Para más detalles sobre contexto real vs asigna variables de ver my answer to a different question
V8 tiene dos compiladores: no optimizando (aka completo) y optimizando uno:
- no la optimización de compilador no puede almacenar en coma flotante números y enteros más allá de 31 bits (32 bits en x64) en la pila, siempre los coloca en HeapNumber s. No intenta registrar la asignación y almacena variables locales en la pila.
- La optimización del compilador es mucho más inteligente. Registra la asignación (exploración 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: Se puede realizar la llamada asignación de pila y asignar un objeto no se escape en la pila en lugar del montón. Una optimización más genérica (escalar reemplazo) a veces puede eliminar por completo la asignación de objetos que no escapan y explotar en campos separados.
¿Podría actualizar su primer enlace? – Randomblue
@Randomblue ¡Disculpe las molestias! Actualicé enlaces para usar números de revisión fijos para evitar ese problema en el futuro. –
En los términos más generales, Sí V8 utiliza un montón y pila para que funcione 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.
- 1. montón y pila de ensamblaje de Windows?
- 2. Google Javascript V8 - multithreading
- 3. contenedores STL en la pila y el montón
- 4. Asignación estática en java - montón, pila y generación permanente
- 5. ¿Por qué la memoria se divide en pila y montón?
- 6. Creación de matriz de objetos en la pila y montón
- 7. JavaScript Standard Library for V8
- 8. Javascript regex cuelga (usando v8)
- 9. Ejecutando V8 Javascript Engine Independiente
- 10. Asignación de memoria del montón y pila de Java
- 11. ¿Por qué hay una pila y un montón?
- 12. Perl: Javascript :: Plantillas V8 - del perl
- 13. Node.js y V8 de recolección de basura
- 14. ¿Qué se almacena en el montón y qué se almacena en la pila?
- 15. patrones de ubicación de memoria en la pila y en el montón
- 16. CPython: internamente, ¿qué se almacena en la pila y en el montón?
- 17. montón vs segmento de datos vs asignación de pila
- 18. ¿Cómo convertir el javascript compilado de V8 en un EXE?
- 19. Sistema de archivos de E/S en Javascript usando V8
- 20. Destino de asignación de std :: aligned_storage (¿pila o montón?)
- 21. Uso adecuado de pila y pila en C++?
- 22. Javascript: bajo rendimiento en V8 de funciones agregadas a String.prototype?
- 23. Pregunta general: Java tiene el montón y la pila local. ¿Puedes acceder a cualquier objeto del montón?
- 24. ¿Cuál es la diferencia entre la pulverización de montón, desbordamiento de pila, desbordamiento de montón?
- 25. ¿Cuándo es mejor usar la pila en lugar del montón y viceversa?
- 26. límite de memoria en Node.js (y V8 de Chrome)
- 27. C++ apilar las variables y variables montón
- 28. clase montón en .NET
- 29. V8 FunctionTemplate Clase Instancia
- 30. ¿Cómo se configura v8 opciones en Node.js
No he hecho una respuesta completa ya que no leí completamente el artículo, pero definitivamente hubo discusiones sobre el uso de pila/pila/registro en http://wingolog.org/archives/2011/07/05/v8- a-tale-of-two-compilers – Domenic
ver http://stackoverflow.com/questions/16949690/many-erros-when-i-try-compile-c-in-v8-javascript/19088160#19088160 – wcy