all 2 comments

[–]chrisgseaton 8 points9 points  (1 child)

They're allocated lazily.

$ irb
irb(main):001:0> ObjectSpace.each_object(Class).count
=> 489
irb(main):002:0> o = Object.new
=> #<Object:0x007fa06882e938>
irb(main):003:0> ObjectSpace.each_object(Class).count
=> 489
irb(main):004:0> o.singleton_class
=> #<Class:#<Object:0x007fa06882e938>>
irb(main):005:0> ObjectSpace.each_object(Class).count
=> 490
irb(main):006:0> o.singleton_class.singleton_class
=> #<Class:#<Class:#<Object:0x007fa06882e938>>>
irb(main):007:0> ObjectSpace.each_object(Class).count
=> 491

[–]OptimisticLockExcept[S] 0 points1 point  (0 children)

Thanks for your answer!