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

Ruby内存管理和垃圾回收

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 Ruby内存管理和垃圾回收

Avatar for Tongfei Gao

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