Spec-Zone.ru › Ruby 3

модуль GC

Модуль GC предоставляет интерфейс к механизму сборки мусора Ruby с использованием метода «маркировка и очистка».

Некоторые основополагающие методы также доступны через модуль ObjectSpace.

Вы можете получить информацию об работе модуля GC через GC::Profiler.

Константы

INTERNAL_CONSTANTS

внутренние константы

OPTS

GC параметры сборки

Методы публичного класса

add_stress_to_class(class[, ...]) Показать исходный код
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 при выделении экземпляра заданных классов.

auto_compact → true или false Показать исходный код
# File gc.rb, line 46
def self.auto_compact
  Primitive.gc_get_auto_compact
end

Возвращает значение, указывающее, включена ли автоматическая уплотнение.

auto_compact = флаг Показать исходный код
# File gc.rb, line 58
def self.auto_compact=(flag)
  Primitive.gc_set_auto_compact(flag)
end

Обновляет режим автоматического уплотнения.

При включении уплотнитель выполняется при каждой основной коллекции.

Включение уплотнения ухудшит производительность при основных коллекциях.

compact Показать исходный код
# File gc.rb, line 212
def self.compact
  Primitive.gc_compact
end

Эта функция уплотняет объекты в куче Ruby. Она устраняет неиспользуемое пространство (или фрагментацию) в куче, перемещая объекты в это неиспользуемое пространство. Эта функция возвращает хеш, содержащий статистику о перемещенных объектах. См. `GC.latest_gc_info` для получения подробной информации о статистике уплотнения.

Этот метод специфичен для реализации и не ожидается, что он будет реализован в какой-либо реализации помимо MRI.

count → Целое число Показать исходный код
# File gc.rb, line 120
def self.count
  Primitive.gc_count
end

Количество раз, когда произошла GC.

Возвращает количество раз, когда произошла GC с момента запуска процесса.

disable → true или false Показать исходный код
# File gc.rb, line 84
def self.disable
  Primitive.gc_disable
end

Отключает сборку мусора, возвращая true, если сборка мусора уже была отключена.

GC.disable   #=> false
GC.disable   #=> true
enable → true или false Показать исходный код
# File gc.rb, line 72
def self.enable
  Primitive.gc_enable
end

Включает сборку мусора, возвращая true, если сборка мусора была ранее отключена.

GC.disable   #=> false
GC.enable    #=> true
GC.enable    #=> false
latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS→11}} Показать исходный код
# 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 содержит количество объектов, которые фактически были перемещены. Некоторые объекты не могут быть перемещены (возможно, они были прикреплены), поэтому эти значения могут быть использованы для расчета эффективности уплотнения.

latest_gc_info -> {:gc_by→:newobj} Показать исходный код
latest_gc_info(hash) → hash
latest_gc_info(:major_by) → :malloc
# 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 указан, он перезаписывается и возвращается. Это предназначено для предотвращения эффекта зондирования.

malloc_allocated_size → Целое число Показать исходный код
static VALUE
gc_malloc_allocated_size(VALUE self)
{
    return UINT2NUM(rb_objspace.malloc_params.allocated_size);
}

Возвращает размер памяти, выделенной функцией malloc().

Доступно только если ruby был скомпилирован с CALC_EXACT_MALLOC_SIZE.

malloc_allocations → Целое число Показать исходный код
static VALUE
gc_malloc_allocations(VALUE self)
{
    return UINT2NUM(rb_objspace.malloc_params.allocations);
}

Возвращает количество выделений памяти с помощью malloc().

Доступно только если ruby был скомпилирован с CALC_EXACT_MALLOC_SIZE.

remove_stress_to_class(class[, ...]) Показать исходный код
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 при выделении экземпляра заданных классов.

start → nil Показать исходный код
garbage_collect → nil
include GC; garbage_collect → nil
start(full_mark: true, immediate_sweep: true) → nil
garbage_collect(full_mark: true, immediate_sweep: true) → nil
include GC; garbage_collect(full_mark: true, immediate_sweep: true) → nil
# 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 для отсрочки очистки (используйте ленивую очистку).

Примечание: Эти ключевые аргументы зависят от реализации и версии. Они не гарантируют совместимость в будущем и могут быть проигнорированы, если реализация их не поддерживает.

stat → Хеш Показать исходный код
stat(hash) → hash
stat(:key) → Числовое значение
# 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.

stress → целое число, true или false Показать исходный код
# File gc.rb, line 92
def self.stress
  Primitive.gc_stress_get
end

Возвращает текущий статус режима стресса GC.

stress = флаг → флаг Показать исходный код
# 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
verify_compaction_references(toward: nil, double_heap: false) → хеш Показать исходный код
# 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.

verify_internal_consistency → nil Показать исходный код
static VALUE
gc_verify_internal_consistency_m(VALUE dummy)
{
    gc_verify_internal_consistency(&rb_objspace);
    return Qnil;
}

Проверить внутреннюю непротиворечивость.

Этот метод специфичен для реализации. Сейчас этот метод проверяет генерационную непротиворечивость, если поддерживается RGenGC.

verify_transient_heap_internal_consistency() Показать исходный код
static VALUE
gc_verify_transient_heap_internal_consistency(VALUE dmy)
{
    rb_transient_heap_verify();
    return Qnil;
}

Общедоступные методы экземпляров

garbage_collect(full_mark: true, immediate_mark: true, immediate_sweep: true) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API