Spec-Zone.ru › Ruby 3.2

модуль 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_hidden_new(argc);
    }
    rb_ary_cat(stress_to_class, argv, argc);
    return self;
}

Вызывает NoMemoryError при выделении экземпляра указанных классов.

auto_compact → true или false Показать исходный код
static VALUE
gc_get_auto_compact(VALUE _)
{
    return RBOOL(ruby_enable_autocompact);
}

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

auto_compact = флаг Показать исходный код
static VALUE
gc_set_auto_compact(VALUE _, VALUE v)
{
    GC_ASSERT(GC_COMPACTION_SUPPORTED);

    ruby_enable_autocompact = RTEST(v);
    return v;
}

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

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

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

compact Показать исходный код
static VALUE
gc_compact(VALUE self)
{
    /* Run GC with compaction enabled */
    gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue);

    return gc_compact_stats(self);
}

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

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

Чтобы проверить, поддерживается ли уплотнение GC, используйте выражение:

GC.respond_to?(:compact)
count → Целое число Показать исходный код
# File gc.rb, line 99
def self.count
  Primitive.gc_count
end

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

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

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

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

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

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

GC.disable   #=> false
GC.enable    #=> true
GC.enable    #=> false
latest_compact_info → хэш Показать исходный код
static VALUE
gc_compact_stats(VALUE self)
{
    size_t i;
    rb_objspace_t *objspace = &rb_objspace;
    VALUE h = rb_hash_new();
    VALUE considered = rb_hash_new();
    VALUE moved = rb_hash_new();
    VALUE moved_up = rb_hash_new();
    VALUE moved_down = rb_hash_new();

    for (i=0; i<T_MASK; i++) {
        if (objspace->rcompactor.considered_count_table[i]) {
            rb_hash_aset(considered, type_sym(i), SIZET2NUM(objspace->rcompactor.considered_count_table[i]));
        }

        if (objspace->rcompactor.moved_count_table[i]) {
            rb_hash_aset(moved, type_sym(i), SIZET2NUM(objspace->rcompactor.moved_count_table[i]));
        }

        if (objspace->rcompactor.moved_up_count_table[i]) {
            rb_hash_aset(moved_up, type_sym(i), SIZET2NUM(objspace->rcompactor.moved_up_count_table[i]));
        }

        if (objspace->rcompactor.moved_down_count_table[i]) {
            rb_hash_aset(moved_down, type_sym(i), SIZET2NUM(objspace->rcompactor.moved_down_count_table[i]));
        }
    }

    rb_hash_aset(h, ID2SYM(rb_intern("considered")), considered);
    rb_hash_aset(h, ID2SYM(rb_intern("moved")), moved);
    rb_hash_aset(h, ID2SYM(rb_intern("moved_up")), moved_up);
    rb_hash_aset(h, ID2SYM(rb_intern("moved_down")), moved_down);

    return h;
}

Возвращает информацию о перемещенных объектах в ходе последнего уплотнения GC.

Возвращаемый хэш имеет два ключа: :considered и :moved. Хэш для :considered содержит количество объектов, которые были рассмотрены для перемещения компактором, а хэш :moved — количество объектов, которые были фактически перемещены. Некоторые объекты не могут быть перемещены (например, закрепленные), поэтому эти числа могут быть использованы для расчета эффективности уплотнения.

latest_gc_info → хэш Показать исходный код
latest_gc_info(хэш) → хэш
latest_gc_info(:major_by) → :malloc
# File gc.rb, line 231
def self.latest_gc_info hash_or_key = nil
  Primitive.gc_latest_gc_info hash_or_key
end

Возвращает информацию о последней сборке мусора.

Если в качестве необязательного аргумента передан хэш, он перезаписывается и возвращается. Это делается для избежания эффекта зондирования.

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.

measure_total_time → true/false Показать исходный код
# File gc.rb, line 273
def self.measure_total_time
  Primitive.cexpr! %{
    RBOOL(rb_objspace.flags.measure_gc)
  }
end

Возвращает флаг measure_total_time (по умолчанию: true). Обратите внимание, что измерение может повлиять на производительность приложения.

measure_total_time = true/false Показать исходный код
# File gc.rb, line 261
def self.measure_total_time=(flag)
  Primitive.cstmt! %{
    rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;
    return flag;
  }
end

Включает измерение времени работы GC. Результат можно получить с помощью GC.stat(:time). Обратите внимание, что измерение времени GC может вызвать некоторое снижение производительности.

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 для выполнения minor GC. Используйте immediate_sweep: false для отсрочки очистки (используйте lazy sweep).

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

END_OF_DOCUMENT_MARKER
stat → Хэш Показать исходный код
stat(хэш) → Хэш
stat(:ключ) → Числовое
# File gc.rb, line 183
def self.stat hash_or_key = nil
  Primitive.gc_stat hash_or_key
end

Возвращает Hash содержащий информацию о сборщике мусора.

Содержимое хэша зависит от реализации и может измениться в будущем без предварительного уведомления.

Хэш включает информацию о внутренней статистике сборщика мусора, например:

count

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

time

Общее время, затраченное на сборку мусора (в миллисекундах).

heap_allocated_pages

Общее количество страниц `:heap_eden_pages` + `:heap_tomb_pages`.

heap_sorted_length

Количество страниц, которое может поместиться в буфер, хранящий ссылки на все страницы.

heap_allocatable_pages

Общее количество страниц, которые приложение могло бы выделить без дополнительной сборки мусора.

heap_available_slots

Общее количество слотов во всех страницах `:heap_allocated_pages`.

heap_live_slots

Общее количество слотов, содержащих активные объекты.

heap_free_slots

Общее количество слотов, не содержащих активных объектов.

heap_final_slots

Общее количество слотов с ожидающими выполнением финализаторами.

heap_marked_slots

Общее количество объектов, помеченных в последней сборке мусора.

heap_eden_pages

Общее количество страниц, содержащих хотя бы один активный слот.

heap_tomb_pages

Общее количество страниц, не содержащих активных слотов.

total_allocated_pages

Кумулятивное количество страниц, выделенных с момента запуска приложения.

total_freed_pages

Кумулятивное количество страниц, освобожденных с момента запуска приложения.

total_allocated_objects

Кумулятивное количество объектов, выделенных с момента запуска приложения.

total_freed_objects

Кумулятивное количество объектов, освобожденных с момента запуска приложения.

malloc_increase_bytes

Объем памяти, выделенной на куче для объектов. Уменьшается любой сборкой мусора.

malloc_increase_bytes_limit

Когда `:malloc_increase_bytes` превышает это ограничение, запускается сборка мусора.

minor_gc_count

Общее количество минорных сборок мусора, выполненных с момента запуска процесса.

major_gc_count

Общее количество основных сборок мусора, выполненных с момента запуска процесса.

compact_count

Общее количество уплотнений, выполненных с момента запуска процесса.

read_barrier_faults

Общее количество раз, когда барьер чтения был активирован во время уплотнения.

total_moved_objects

Общее количество объектов, перемещенных уплотнением.

remembered_wb_unprotected_objects

Общее количество объектов без барьеров записи.

remembered_wb_unprotected_objects_limit

Когда `:remembered_wb_unprotected_objects` превышает это ограничение, запускается основная сборка мусора.

old_objects

Количество активных старых объектов, которые пережили как минимум 3 сборки мусора.

old_objects_limit

Когда `:old_objects` превышает это ограничение, запускается основная сборка мусора.

oldmalloc_increase_bytes

Объем памяти, выделенной на куче для объектов. Уменьшается основной сборкой мусора.

oldmalloc_increase_bytes_limit

Когда `:old_malloc_increase_bytes` превышает это ограничение, запускается основная сборка мусора.

Если необязательный аргумент hash передан, он перезаписывается и возвращается. Это сделано для того, чтобы избежать эффекта зондирования.

Этот метод должен работать только на CRuby.

stat_heap → Хэш Показать исходный код
stat_heap(nil, хэш) → Хэш
stat_heap(имя_кучи) → Хэш
stat_heap(имя_кучи, хэш) → Хэш
stat_heap(имя_кучи, :ключ) → Числовое
# File gc.rb, line 217
def self.stat_heap heap_name = nil, hash_or_key = nil
  Primitive.gc_stat_heap heap_name, hash_or_key
end

Возвращает информацию о пулах памяти в сборщике мусора.

Если первый необязательный аргумент, heap_name, передан и не nil, возвращается Hash содержащий информацию об определенном пуле памяти. В противном случае возвращается Hash с именами пулов памяти в качестве ключей и Hash содержащей информацию о пуле памяти в качестве значений.

Если второй необязательный аргумент, hash_or_key, передан как Hash, он перезаписывается и возвращается. Это сделано для того, чтобы избежать эффекта зондирования.

Если оба необязательных аргумента переданы, и второй необязательный аргумент является символом, возвращается Numeric значения для данного пула памяти.

В CRuby, heap_name имеет тип Integer, но может быть типа String в других реализациях.

Содержимое хэша зависит от реализации и может измениться в будущем без предварительного уведомления.

Если необязательный аргумент, хэш, передан, он перезаписывается и возвращается.

Этот метод должен работать только на CRuby.

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

Возвращает текущий статус режима стрессовых нагрузок для сборщика мусора.

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

Обновляет режим стрессовых нагрузок для сборщика мусора.

Когда режим стрессовых нагрузок включен, сборщик мусора вызывается при каждой возможности: все выделения памяти и объектов.

Включение режима стрессовых нагрузок снизит производительность, он предназначен только для отладки.

Флаг может быть true, false или целым числом, битовым ИЛИ, следующими флагами.

0x01:: no major GC
0x02:: no immediate sweep
0x04:: full mark after malloc/calloc/realloc
total_time → целое Показать исходный код
# File gc.rb, line 283
def self.total_time
  Primitive.cexpr! %{
    ULL2NUM(rb_objspace.profile.total_time_ns)
  }
end

Возвращает измеренное общее время работы сборщика мусора в наносекундах.

using_rvargc? → true или false Показать исходный код
static VALUE
gc_using_rvargc_p(VALUE mod)
{
#if USE_RVARGC
    return Qtrue;
#else
    return Qfalse;
#endif
}

Возвращает true, если используется экспериментальная функция «Выделение переменной ширины», в противном случае false.

verify_compaction_references(toward: nil, double_heap: false) → хэш Показать исходный код
# File gc.rb, line 250
def self.verify_compaction_references(toward: nil, double_heap: false, expand_heap: false)
  Primitive.gc_verify_compaction_references(double_heap, expand_heap, toward == :empty)
end

Проверка непротиворечивости ссылок уплотнения.

Этот метод зависит от реализации. Во время уплотнения объекты, которые были перемещены, заменяются объектами T_MOVED. После уплотнения ни один объект не должен иметь ссылки на объект T_MOVED.

Эта функция расширяет кучу, чтобы гарантировать место для перемещения всех объектов, уплотняет кучу, чтобы убедиться, что все перемещается, обновляет все ссылки, а затем выполняет полную сборку мусора. Если какой-либо объект содержит ссылку на объект 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–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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