Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby内存管理和垃圾回收

 Ruby内存管理和垃圾回收

Tongfei Gao

May 12, 2019
Tweet

Other Decks in Technology

Transcript

  1. Ruby如何使⽤用内存 • 初始化:申请多个 heap page(和操作系 统的heap⽆无关) • 每个heap page有408 个槽(slot),每个槽

    占40字节 • 槽中⽤用于存放创建的对 象;如果超过40字 节,Ruby会额外申请 内存。 • 默认申请10000个槽 (RUBY_GC_HEAP_I NIT_SLOTS) Obj Ruby Heap Page slot Obj Obj Obj Obj Obj Obj Obj Obj
  2. Minor GC和Major GC • 两种GC:minor GC和major GC • minor GC:没有空余槽⽤用于存放对象时触发。特点:耗时

    少,更更加频繁。作⽤用于“年年轻”的对象 • major GC触发条件:minor GC触发后还没有⾜足够空间; 或 当oldmalloc_increase_bytes,malloc_increase_bytes或 old_objects数量量超过限制(具体可以看GC.stat)。作⽤用于 “年年⻓长”的对象
  3. GC tuning 参数 • RUBY_GC_HEAP_INIT_SLOTS • RUBY_GC_HEAP_FREE_SLOTS • RUBY_GC_HEAP_GROWTH_FACTOR •

    RUBY_GC_HEAP_GROWTH_MAX_SLOTS • RUBY_GC_MALLOC_LIMIT RUBY_GC_MALLOC_LIMIT_MAX • RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR • RUBY_GC_OLDMALLOC_LIMIT • RUBY_GC_OLDMALLOC_LIMIT_MAX • RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR https://github.com/ruby/ruby/blob/ruby_2_6/gc.c#L7685