解读Dart虚拟机的参数列表

一、概述

在third_party/dart/runtime/vm/flag_list.h定义了Dart虚拟机中所有标志的列表,标志分为以下几大类别:

  • Product标记:可以在任何部署模式中设置,包括Product模式
  • Release标志:通常可用的标志,除Product模式以外
  • Precompile标志:通常可用的标志,除Product模式或已预编译的运行时以外
  • Debug标志:只能在启用C++断言的VM调试模式中设置

Product、Release、Precompile、Debug这四类可控参数,可使用的范围逐次递减,比如Product flags可用于所有模式,Debug flags只能用于调试模式。Dart虚拟机总共有106个flags参数

二、flags参数

2.1 Product flags

用法:PRODUCT_FLAG_MARCO(名称,类型,默认值,注解)

名称 默认值 注解
collect_dynamic_function_names true 收集所有动态函数名称以标识唯一目标
enable_kernel_expression_compilation true 启用内核前端来编译表达式
enable_mirrors true 允许导入dart:mirrors
enable_ffi true 允许导入dart:ffi
guess_icdata_cid true 创建算法等操作的类型反馈
lazy_dispatchers true 懒惰地生成调度程序
polymorphic_with_deopt true 反优化的多态调用、巨形调用
reorder_basic_blocks true 对基本块重新排序
use_bare_instructions true 启用裸指令模式
truncating_left_shift true 尽可能优化左移以截断
use_cha_deopt true 使用类层次分析,即使会导致反优化
use_strong_mode_types true 基于强模式类型的优化
enable_slow_path_sharing true 启用共享慢速路径代码
enable_multiple_entrypoints true 启用多个入口点
experimental_unsafe_mode_use_ at_your_own_risk false 省略运行时强模式类型检查并禁用基于类型的优化
abort_on_oom false 如果内存分配失败则中止,仅与–old-gen-heap-size一起使用
collect_code false 尝试GC不常用代码
dwarf_stack_traces false 在dylib快照中发出dwarf行号和内联信息,而不表示堆栈跟踪
fields_may_be_reset false 不要优化静态字段初始化
link_natives_lazily false 懒加载链接本地调用
precompiled_mode false 预编译编译器模式
print_snapshot_sizes false 打印生成snapshot的大小
print_snapshot_sizes_verbose false 打印生成snapshot的详细大小
print_benchmarking_metrics false 打印其他内存和延迟指标以进行基准测试
shared_slow_path_triggers_gc false 测试:慢路径触发GC
trace_strong_mode_types false 跟踪基于强模式类型的优化
use_bytecode_compiler false 从字节码编译
use_compactor false 当在旧空间执行GC时则压缩堆
enable_testing_pragmas false 启用神奇的编译指示以进行测试
enable_interpreter false 启用解释内核字节码
verify_entry_points false 通过native API访问无效成员时抛出API错误
background_compilation USING_MULTICORE 根据是否多核来决定是否后台运行优化编译
concurrent_mark USING_MULTICORE 老年代的并发标记
concurrent_sweep USING_MULTICORE 老年代的并发扫描
use_field_guards !USING_DBC 使用字段gurad,跟踪字段类型
interpret_irregexp USING_DBC 使用irregexp字节码解释器
causal_async_stacks !USING_PRODUCT 非product 则开启改进异步堆栈
marker_tasks USING_MULTICORE ? 2 : 0 老生代GC标记的任务数,0代表在主线程执行
idle_timeout_micros 1000 * 1000 长时间后将空闲任务从线程池隔离,单位微秒
idle_duration_micros 500 * 1000 允许空闲任务运行的时长
old_gen_heap_size (kWordSize <= 4) ? 1536 : 0 旧一代堆的最大大小,或0(无限制),单位MB
new_gen_semi_max_size (kWordSize <= 4) ? 8 : 16 新一代半空间的最大大小,单位MB
new_gen_semi_initial_size (kWordSize <= 4) ? 1 : 2 新一代半空间的最大初始大小,单位MB
compactor_tasks 2 并行压缩使用的任务数
getter_setter_ratio 13 用于double拆箱启发式的getter/setter使用率?
huge_method_cutoff_in_tokens 20000 令牌中的大量方法中断:禁用大量方法的优化?
max_polymorphic_checks 4 多态检查的最大数量,否则为巨形的?
max_equality_polymorphic_checks 32 等式运算符中的多态检查的最大数量
compilation_counter_threshold 10 在解释执行函数编译完成前的函数使用次数要求,-1表示从不
optimization_counter_threshold 30000 函数在优化前的用法计数值,-1表示从不
optimization_level 2 优化级别:1(有利大小),2(默认),3(有利速度)

optimization_level这是一个可以尝试的参数

2.2 Release flags

用法:RELEASE_FLAG_MARCO(名称,product_value,类型,默认值,注解)

名称 product值 默认值 注解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值