配置JavaScript引擎
运行JavaScript代码可能会受到一些环境变量的影响,尤其是
环境变量 | 描述 |
---|---|
QV4_JIT_CALL_THRESHOLD | JavaScript引擎包含一个即时编译器(JIT)。JIT将频繁运行的JavaScript函数编译成机器代码以加快运行速度。此环境变量确定一个函数需要运行多少次才被认为适合JIT编译。默认值是3次。 |
QV4FORCEINTERPRETER | 设置此环境变量将所有函数和表达式都通过解释器运行。不管函数或表达式调用得多频繁,都不会使用JIT。函数和表达式可以使用qmlcachegen或qmlsc预先编译,但在运行时仅使用生成的字节码。任何生成的C++代码及其生成的机器代码都被忽略。 |
QV4JSMAXSTACKSIZE | JavaScript引擎为运行JavaScript保留一个特殊的内存区域作为堆栈。此堆栈与C++堆栈分开。通常此区域大小为4MB。如果此环境变量包含一个数字,JavaScript引擎将其解释为分配给JavaScript堆栈的内存区域的字节数。 |
QV4GCMAXSTACKSIZE | 除了常规JavaScript堆栈外,JavaScript引擎还保留另一个堆栈用于垃圾回收器,通常为2MB内存。如果垃圾回收器需要同时处理过多的对象,此堆栈可能会越界。如果其中包含数字,此环境变量就被解释为分配给垃圾回收器堆栈的内存区域的字节数。 |
QV4CRASHONSTACKOVERFLOW | 通常,JavaScript引擎试图捕获由过度的递归JavaScript代码引起的C++堆栈溢出,并生成一个非致命错误条件。编译JavaScript和运行JavaScript都有自己的递归检查。编译JavaScript时的堆栈溢出表明代码中包含深层嵌套的对象和函数。运行时堆栈溢出表明代码导致了深层递归的程序。这个检查只与上面提到的JavaScript堆栈大小间接相关,因为每个JavaScript函数调用都会占用C++和JavaScript堆栈的堆栈空间。检查过度递归的代码必须是保守的,因为可用的堆栈空间取决于许多因素,用户通常可以自定义。设置此环境变量后,JavaScript引擎在编译或运行JavaScript时不检查堆栈溢出,并且不会生成异常。相反,当堆栈溢出时,程序将尝试无效的内存访问。这很可能会终止程序。相反,程序可以利用操作系统可以提供的所有堆栈空间。 警告:恶意代码可能能够通过这种方式逃避免终止和访问意外的内存位置。 |
QV4MAXCALLDEPTH | 在运行时(与编译时相反)执行JavaScript时,通过控制调用的深度(嵌套函数调用的数量)来防止堆栈溢出。默认情况下,如果调用深度超过针对平台默认堆大小的调整过的最大数值,则会生成异常。如果环境变量QV4_MAX_CALL_DEPTH 包含一个数值,则此数值用作最大调用深度。请注意,编译JavaScript时的递归限制不受影响。大多数平台上默认的最大调用深度为1234。在QNX上为640,因为QNX的默认堆大小小于大多数平台。 |
QV4_MM_AGGRESSIVE_GC | 设置此环境变量将在每次内存分配之前运行垃圾回收器。这在运行时很昂贵,但可以快速发现许多内存管理错误,例如从C++中手动删除属于QML引擎的对象。 |
QV4_PROFILE_WRITE_PERF_MAP | 在Linux上,可以使用perf 实用工具来分析程序。要分析JIT编译的JavaScript函数,它需要了解其在内存中的名称和位置。为了提供这些信息,存在一个约定,在/tmp中创建一个名为perf-<.pid>.map 的特别文件,然后perf读取它。如果设置了此环境变量,JIT将生成此文件。 |
QV4_SHOW_BYTECODE | 将Qt生成的IR字节码输出到控制台。必须与QML_DISABLE_DISK_CACHE 一起使用,否则已缓存的字节码将不会显示。 |
QV4_DUMP_BASIC_BLOCKS | 输出编译前每个函数的基本块。块的详细信息打印到控制台。此外,还为每个编译函数生成DOT格式的字节码控制流图。使用QV4_DUMP_BASIC_BLOCKS 的值作为生成DOT文件文件夹的路径。如果路径是["-", "1", "true"]中的任何一个或无法打开文件,则将图输出到stdout。 |
QV4_VALIDATE_BASIC_BLOCKS | 对编译前函数的基本块进行检查,以验证其结构和一致性。如果验证失败,将错误信息打印到控制台。 |
QML磁盘缓存接受允许对其行为进行微调的其他环境变量。特别是QML_DISABLE_DISK_CACHE
可能在调试中非常有用。
© 2024 Qt公司有限公司。本文件中包含的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布并由其出版的< DOEDescripcionEnvironmentalVariable "GNU自由文档许可版本1.3"> Doe hosting> 许可的条款提供的。Qt及其相关标志是芬兰的Qt公司及其全球子公司或附属公司的商标。所有其他商标均为其各自所有者的财产。