模块 RubyVM::RJIT
常量
- CFP
- C_ARGS
SystemV x64 调用约定
- C_RET
- CantCompile
- Default
- EC
被调用者保存的寄存器 TODO:在此处支持使用 r12/r13
- EndBlock
- GC_REFS
在垃圾回收期间标记此数组中的对象
- KeepCompiling
编译状态
- MAX_LOCAL_TYPES
我们跟踪的最大局部变量类型数
- MAX_TEMP_TYPES
我们跟踪的最大临时值类型数
- MAX_VERSIONS
每个代码块的最大版本数,1 表示始终创建通用版本
- MapToLocal
- MapToSelf
- MapToStack
临时堆栈上的值到 self、局部变量或常量的潜在映射,以便我们可以跟踪其类型
- Next0
分支形状
- Next1
- Qfalse
- Qnil
- Qtrue
Ruby 常量
- Qundef
- QwordPtr
64 位内存访问
- SP
- SelfOpnd
YARV 字节码指令的操作数
- StackOpnd
- Type
表示
RJIT
中值的类型(局部/堆栈/self)
公共类方法
runtime_stats() 点击切换源代码
返回 RJIT 统计信息的哈希值。 --rjit-stats 可以提供更多信息。
# File ruby_vm/rjit/stats.rb, line 4 def self.runtime_stats stats = {} # Insn exits INSNS.each_value do |insn| exits = C.rjit_insn_exits[insn.bin] if exits > 0 stats[:"exit_#{insn.name}"] = exits end end # Runtime stats C.rb_rjit_runtime_counters.members.each do |member| stats[member] = C.rb_rjit_counters.public_send(member) end stats[:vm_insns_count] = C.rb_vm_insns_count # Other stats are calculated here stats[:side_exit_count] = stats.select { |name, _count| name.start_with?('exit_') }.sum(&:last) if stats[:vm_insns_count] > 0 retired_in_rjit = stats[:rjit_insns_count] - stats[:side_exit_count] stats[:total_insns_count] = retired_in_rjit + stats[:vm_insns_count] stats[:ratio_in_rjit] = 100.0 * retired_in_rjit / stats[:total_insns_count] else stats.delete(:vm_insns_count) end stats end