На сколько мне известно, руби плохо умеет возвращать свободную память системе(после сборщика).
Ага, там обычно в странице несколько блоков куда пишутся RValue, и если хотя бы один слот в странице занят, то страница не возвращается. Но в Ruby 2.7 появился метод GC.compact
, который может помочь дефрагментировать память (сам ещё не исследовал эту тему).