модуль GC
Модуль GC предоставляет интерфейс к механизму сборки мусора Ruby с использованием метода «маркировка и очистка».
Некоторые основополагающие методы также доступны через модуль ObjectSpace.
Вы можете получить информацию об работе модуля GC через GC::Profiler.
Константы
- INTERNAL_CONSTANTS
-
внутренние константы
- OPTS
-
GCпараметры сборки
Методы публичного класса
static VALUE
rb_gcdebug_add_stress_to_class(int argc, VALUE *argv, VALUE self)
{
rb_objspace_t *objspace = &rb_objspace;
if (!stress_to_class) {
stress_to_class = rb_ary_tmp_new(argc);
}
rb_ary_cat(stress_to_class, argv, argc);
return self;
} Вызывает NoMemoryError при выделении экземпляра заданных классов.
# File gc.rb, line 46 def self.auto_compact Primitive.gc_get_auto_compact end
Возвращает значение, указывающее, включена ли автоматическая уплотнение.
# File gc.rb, line 58 def self.auto_compact=(flag) Primitive.gc_set_auto_compact(flag) end
Обновляет режим автоматического уплотнения.
При включении уплотнитель выполняется при каждой основной коллекции.
Включение уплотнения ухудшит производительность при основных коллекциях.
# File gc.rb, line 212 def self.compact Primitive.gc_compact end
Эта функция уплотняет объекты в куче Ruby. Она устраняет неиспользуемое пространство (или фрагментацию) в куче, перемещая объекты в это неиспользуемое пространство. Эта функция возвращает хеш, содержащий статистику о перемещенных объектах. См. `GC.latest_gc_info` для получения подробной информации о статистике уплотнения.
Этот метод специфичен для реализации и не ожидается, что он будет реализован в какой-либо реализации помимо MRI.
# File gc.rb, line 84 def self.disable Primitive.gc_disable end
Отключает сборку мусора, возвращая true, если сборка мусора уже была отключена.
GC.disable #=> false GC.disable #=> true
# File gc.rb, line 72 def self.enable Primitive.gc_enable end
Включает сборку мусора, возвращая true, если сборка мусора была ранее отключена.
GC.disable #=> false GC.enable #=> true GC.enable #=> false
# File gc.rb, line 197 def self.latest_compact_info Primitive.gc_compact_stats end
Returns information about object moved in the most recent GC compaction.
Возвращаемый хеш имеет два ключа: :considered и :moved. Хеш для :considered содержит количество объектов, которые были рассмотрены для перемещения уплотнителем, а хеш :moved содержит количество объектов, которые фактически были перемещены. Некоторые объекты не могут быть перемещены (возможно, они были прикреплены), поэтому эти значения могут быть использованы для расчета эффективности уплотнения.
# File gc.rb, line 183 def self.latest_gc_info hash_or_key = nil Primitive.gc_latest_gc_info hash_or_key end
Returns information about the most recent garbage collection.
Если необязательный аргумент hash указан, он перезаписывается и возвращается. Это предназначено для предотвращения эффекта зондирования.
static VALUE
gc_malloc_allocated_size(VALUE self)
{
return UINT2NUM(rb_objspace.malloc_params.allocated_size);
} Возвращает размер памяти, выделенной функцией malloc().
Доступно только если ruby был скомпилирован с CALC_EXACT_MALLOC_SIZE.
static VALUE
gc_malloc_allocations(VALUE self)
{
return UINT2NUM(rb_objspace.malloc_params.allocations);
} Возвращает количество выделений памяти с помощью malloc().
Доступно только если ruby был скомпилирован с CALC_EXACT_MALLOC_SIZE.
static VALUE
rb_gcdebug_remove_stress_to_class(int argc, VALUE *argv, VALUE self)
{
rb_objspace_t *objspace = &rb_objspace;
int i;
if (stress_to_class) {
for (i = 0; i < argc; ++i) {
rb_ary_delete_same(stress_to_class, argv[i]);
}
if (RARRAY_LEN(stress_to_class) == 0) {
stress_to_class = 0;
}
}
return Qnil;
} Больше не вызывает NoMemoryError при выделении экземпляра заданных классов.
# File gc.rb, line 33 def self.start full_mark: true, immediate_mark: true, immediate_sweep: true Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false end
Инициализирует сборку мусора, даже если она была вручную отключена.
Этот метод определен с ключевыми аргументами, которые по умолчанию равны true:
def GC.start(full_mark: true, immediate_sweep: true); end
Используйте full_mark: false для выполнения небольшой GC. Используйте immediate_sweep: false для отсрочки очистки (используйте ленивую очистку).
Примечание: Эти ключевые аргументы зависят от реализации и версии. Они не гарантируют совместимость в будущем и могут быть проигнорированы, если реализация их не поддерживает.
# File gc.rb, line 169 def self.stat hash_or_key = nil Primitive.gc_stat hash_or_key end
Возвращает Hash, содержащий информацию о GC.
Хеш включает информацию о внутренней статистике GC, такой как:
{
:count=>0,
:heap_allocated_pages=>24,
:heap_sorted_length=>24,
:heap_allocatable_pages=>0,
:heap_available_slots=>9783,
:heap_live_slots=>7713,
:heap_free_slots=>2070,
:heap_final_slots=>0,
:heap_marked_slots=>0,
:heap_eden_pages=>24,
:heap_tomb_pages=>0,
:total_allocated_pages=>24,
:total_freed_pages=>0,
:total_allocated_objects=>7796,
:total_freed_objects=>83,
:malloc_increase_bytes=>2389312,
:malloc_increase_bytes_limit=>16777216,
:minor_gc_count=>0,
:major_gc_count=>0,
:remembered_wb_unprotected_objects=>0,
:remembered_wb_unprotected_objects_limit=>0,
:old_objects=>0,
:old_objects_limit=>0,
:oldmalloc_increase_bytes=>2389760,
:oldmalloc_increase_bytes_limit=>16777216
}
Содержание хеша специфично для реализации и может быть изменено в будущем.
Если необязательный аргумент, хеш, задан, он перезаписывается и возвращается. Это сделано для предотвращения эффекта зондирования.
Этот метод ожидается работать только в C Ruby.
# File gc.rb, line 92 def self.stress Primitive.gc_stress_get end
Возвращает текущий статус режима стресса GC.
# File gc.rb, line 110 def self.stress=(flag) Primitive.gc_stress_set_m flag end
Обновляет режим стресса GC.
Когда режим стресса включен, GC вызывается при каждой возможности GC: все выделения памяти и объектов.
Включение режима стресса снизит производительность, он предназначен только для отладки.
Флаг может быть true, false или целым числом, полученным путем побитового ИЛИ операций с флагами.
0x01:: no major GC 0x02:: no immediate sweep 0x04:: full mark after malloc/calloc/realloc
# File gc.rb, line 230 def self.verify_compaction_references(toward: nil, double_heap: false) Primitive.gc_verify_compaction_references(double_heap, toward == :empty) end
Проверка согласованности ссылок уплотнения.
Этот метод специфичен для реализации. Во время уплотнения объекты, которые были перемещены, заменяются объектами T_MOVED. Ни один объект не должен иметь ссылку на объект T_MOVED после уплотнения.
Эта функция удваивает кучу, чтобы обеспечить место для перемещения всех объектов, уплотняет кучу, чтобы убедиться, что все объекты перемещаются, обновляет все ссылки, затем выполняет полную GC. Если какой-либо объект содержит ссылку на объект T_MOVED, этот объект должен быть помещен в стек маркировки, и это приведет к SEGV.
static VALUE
gc_verify_internal_consistency_m(VALUE dummy)
{
gc_verify_internal_consistency(&rb_objspace);
return Qnil;
} Проверить внутреннюю непротиворечивость.
Этот метод специфичен для реализации. Сейчас этот метод проверяет генерационную непротиворечивость, если поддерживается RGenGC.
static VALUE
gc_verify_transient_heap_internal_consistency(VALUE dmy)
{
rb_transient_heap_verify();
return Qnil;
} Общедоступные методы экземпляров
# File gc.rb, line 37 def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false end
Ruby Core © 1993–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.