ruby garbage-collection

Afinador recolector de basura en Ruby 1.9



garbage-collection (2)

No.

No hay forma de sintonizar el GC 1.9.0–1.9.2. Sin embargo, puede compilar una máquina virtual personalizada que exponga más o menos los mismos parámetros de ajuste que REE con este parche .

Sé de GC.enable/disable , pero ¿hay alguna forma de controlar el recolector de basura Ruby 1.9 con más detalle?

Al perfilar mi código (usando perftools.rb), observo que el GC representa hasta el 30% del total de muestras, y me gustaría ver si es posible ajustar el GC para disminuir este número. ¿Hay alguna variable de entorno u otro medio por el cual pueda establecer el número de ranuras de almacenamiento dinámico, el límite malloc, etc. como puede hacerlo con REE?


Sí, para abreviar.

Al principio, constantes básicas que definen el comportamiento del GC (se muestran los valores predeterminados):

  • RUBY_GC_MALLOC_LIMIT = 8000000 # - Tamaño inicial de una nueva losa de memoria, que se asigna después de consumir toda la memoria disponible
  • RUBY_HEAP_MIN_SLOTS = 10000 # - Tamaño de memoria inicial, asignado al inicio
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR = 1,8 # - La nueva tabla de memoria es X veces más grande que la anterior después de cada asignación.
  • RUBY_HEAP_SLOTS_INCREMENT = 1 # No estoy seguro, honestamente :)

Más detalles sobre GC, pueden ayudar

Una historia de 37signals guys, que puede ayudarte definitivamente. Utilizaron las llamadas GC manuales (GC.start) a tiempo, en lugar del tamaño de la memoria, y obtuvieron un gran impulso.