Configuración del motor JavaScript

La ejecución del código JavaScript puede verse influida por algunas variables de entorno, en particular:

Variable de entornoDescripción
QV4_JIT_CALL_THRESHOLDEl motor JavaScript contiene un compilador Just-In-Time (JIT). El JIT compila las funciones JavaScript que se ejecutan con frecuencia en código máquina para que se ejecuten más rápidamente. Esta variable de entorno determina la frecuencia con la que debe ejecutarse una función para ser considerada para la compilación JIT. El valor predeterminado es 3 veces.
QV4_FORCE_INTERPRETERAl establecer esta variable de entorno, todas las funciones y expresiones se ejecutan a través del intérprete. El JIT nunca se utiliza, independientemente de la frecuencia con la que se llame a una función o expresión. Las funciones y expresiones aún pueden compilarse con antelación utilizando qmlcachegen o qmlsc, pero sólo el código de bytes generado se utiliza en tiempo de ejecución. El código C++ generado y el código máquina resultante se ignoran.
QV4_JS_MAX_STACK_SIZEEl motor JavaScript reserva un área de memoria especial como pila para ejecutar JavaScript. Esta pila está separada de la pila de C++. Normalmente, esta área tiene un tamaño de 4 MB. Si esta variable de entorno contiene un número, el motor JavaScript lo interpreta como el tamaño del área de memoria, en bytes, que se asignará como pila JavaScript.
QV4_GC_MAX_STACK_SIZEAdemás de la pila JavaScript normal, el motor JavaScript mantiene otra pila para el recolector de basura, normalmente de 2 MB de memoria. Si el recolector de basura necesita manejar un número excesivo de objetos al mismo tiempo, esta pila podría desbordarse. Si contiene un número, esta variable de entorno se interpreta como el tamaño en bytes del área de memoria que se asignará como pila para el recolector de basura.
QV4_STACK_SOFT_LIMITCuando se establece esta variable de entorno, el motor JavaScript lanzará una excepción "RangeError: Maximum call stack size exceeded" una vez que el uso de la pila de llamadas alcance el límite suave definido. Si la variable no está definida, el motor utilizará por defecto los límites detectados en tiempo de ejecución o los predefinidos por Qt, dependiendo del sistema operativo.
QV4_CRASH_ON_STACKOVERFLOWNormalmente, el motor JavaScript intenta detectar los desbordamientos de pila de C++ causados por código JavaScript excesivamente recursivo, y genera una condición de error no fatal. Existen comprobaciones de recursividad independientes para la compilación y la ejecución de JavaScript. Un desbordamiento de pila al compilar JavaScript indica que el código contiene objetos y funciones profundamente anidados. Un desbordamiento de pila en tiempo de ejecución indica que el código resulta en un programa profundamente recursivo. La comprobación de esto sólo está relacionada indirectamente con el tamaño de la pila de JavaScript mencionado anteriormente, ya que cada llamada a una función de JavaScript consume espacio de pila tanto en la pila de C++ como en la de JavaScript. El código que comprueba la recursividad excesiva es necesariamente conservador, ya que el tamaño de pila disponible depende de muchos factores y a menudo puede ser personalizado por el usuario. Con esta variable de entorno establecida, el motor de JavaScript no comprueba los desbordamientos de pila al compilar o ejecutar JavaScript y no generará excepciones por ellos. En su lugar, cuando la pila se desborda, el programa intenta un acceso no válido a la memoria. Lo más probable es que esto termine el programa. A su vez, el programa llega a utilizar todo el espacio de pila que el sistema operativo puede proporcionar.

Advertencia: un código malicioso puede ser capaz de evadir la terminación y acceder a posiciones de memoria inesperadas de esta manera.

QV4_MAX_CALL_DEPTHLos desbordamientos de pila al ejecutar (en lugar de compilar) JavaScript se evitan controlando la profundidad de llamada: el número de invocaciones de funciones anidadas. Por defecto, se genera una excepción si la profundidad de llamada supera un número máximo ajustado al tamaño de pila por defecto de la plataforma. Si la variable de entorno QV4_MAX_CALL_DEPTH contiene un número, éste se utiliza como profundidad máxima de llamada. Tenga en cuenta que el límite de recursión al compilar JavaScript no se ve afectado. La profundidad máxima de llamada por defecto es 1234 en la mayoría de las plataformas. En QNX es 640 porque en QNX el tamaño de la pila por defecto es menor que en la mayoría de las plataformas.

QV4_GC_TIMELIMIT

Este valor se utiliza para indicar al motor cuánto tiempo debe emplear en cada paso de recolección de basura incremental. Puede ser un número positivo, especificando el límite de tiempo en milisegundos, o 0. Si el valor es 0, la recolección de basura se vuelve no incremental.
QV4_MM_AGGRESSIVE_GCEstablecer esta variable de entorno ejecuta el recolector de basura antes de cada asignación de memoria. Esto es muy costoso en tiempo de ejecución, pero descubre rápidamente muchos errores de gestión de memoria, por ejemplo el borrado manual de un objeto perteneciente al motor QML de C++.
QV4_MM_CROSS_VALIDATE_INCREMENTAL_GCAl establecer esta variable de entorno se ejecutan pasos de depuración adicionales para reconocer los casos en los que el recolector de basura incremental se comporta mal comparando su comportamiento con el del recolector de basura no incremental.
QV4_PROFILE_WRITE_PERF_MAPEn Linux, la utilidad perf puede utilizarse para perfilar programas. Para analizar las funciones JavaScript compiladas en JIT, necesita conocer sus nombres y ubicaciones en memoria. Para proporcionar esta información, existe la convención de crear un archivo especial llamado perf-<pid>.map en /tmp que luego lee perf. Esta variable de entorno, si se establece, hace que el JIT genere este archivo.
QV4_SHOW_BYTECODEMuestra el bytecode IR generado por Qt en la consola. Debe combinarse con QML_DISABLE_DISK_CACHE o no se mostrará el bytecode ya almacenado en caché.
QV4_DUMP_BASIC_BLOCKSMuestra los bloques básicos de cada función compilada por adelantado. Los detalles de los bloques se imprimen en la consola. Además, se generan gráficos de flujo de control con el código de bytes de cada bloque en el formato DOT para cada función compilada. El valor de QV4_DUMP_BASIC_BLOCKS se utiliza como ruta a la carpeta donde deben generarse los archivos DOT. Si la ruta es cualquiera de ["-", "1", "true"] o si no se pueden abrir los archivos, los gráficos se vuelcan a stdout en su lugar.
QV4_VALIDATE_BASIC_BLOCKSRealiza comprobaciones en los bloques básicos de una función compilada de antemano para validar su estructura y coherencia. Si la validación falla, se imprime un mensaje de error en la consola.

La caché de disco QML acepta otras variables de entorno que permiten ajustar su comportamiento. En particular, QML_DISABLE_DISK_CACHE puede ser útil para la depuración.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.