prelude: | class TheClass def initialize @levar = 1 @v0 = 1 @v1 = 2 @v3 = 3 end def set_value_loop # 100k i = 0 while i < 100_000 # 10 times to de-emphasize loop overhead @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i i += 1 end end end class Generic < Time def initialize @levar = 1 @v0 = 1 @v1 = 2 @v3 = 3 end def set_value_loop # 100k i = 0 while i < 100_000 # 10 times to de-emphasize loop overhead @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i i += 1 end end end obj = TheClass.new gen_obj = Generic.new class SomeClass @levar = 1 @v0 = 1 @v1 = 2 @v3 = 3 def self.set_value_loop # 100k i = 0 while i < 100_000 # 10 times to de-emphasize loop overhead @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i @levar = i i += 1 end end end benchmark: vm_ivar_set_on_instance: | obj.set_value_loop vm_ivar_set_on_generic: | gen_obj.set_value_loop vm_ivar_set_on_class: | SomeClass.set_value_loop loop_count: 100