Spec-Zone.ru › Ruby 2.7

модуль 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 при выделении экземпляра заданных классов.

compact() Показать исходный код
# File gc.rb, line 158
def self.compact
  __builtin_rb_gc_compact
end
count → Целое Показать исходный код
# File gc.rb, line 99
def self.count
  __builtin_gc_count
end

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

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

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

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

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

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

GC.disable   #=> false
GC.enable    #=> true
GC.enable    #=> false
latest_gc_info -> {:gc_by→:newobj} Показать исходный код
latest_gc_info(hash) → hash
latest_gc_info(:major_by) → :malloc
# File gc.rb, line 154
def self.latest_gc_info hash_or_key = nil
  __builtin_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.

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
  __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep
end

Инициирует сборку мусора, даже если она отключена вручную.

Этот метод определен с ключевыми аргументами, которые по умолчанию равны true:

def GC.start(full_mark: true, immediate_sweep: true); end

Используйте full_mark: false для выполнения небольшой GC. Используйте immediate_sweep: false для отсрочки очистки (используйте ленивую очистку).

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

stat → Hash Показать исходный код
stat(hash) → hash
stat(:key) → Число
# File gc.rb, line 144
def self.stat hash_or_key = nil
  __builtin_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 71
def self.stress
  __builtin_gc_stress_get
end

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

stress = flag → flag Показать исходный код
# File gc.rb, line 89
def self.stress=(flag)
  __builtin_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: nil) → nil Показать исходный код
static VALUE
gc_verify_compaction_references(int argc, VALUE *argv, VALUE mod)
{
    rb_objspace_t *objspace = &rb_objspace;
    int use_toward_empty = FALSE;
    int use_double_pages = FALSE;

    if (dont_gc) return Qnil;

    VALUE opt = Qnil;
    static ID keyword_ids[2];
    VALUE kwvals[2];

    kwvals[1] = Qtrue;

    rb_scan_args(argc, argv, "0:", &opt);

    if (!NIL_P(opt)) {
        if (!keyword_ids[0]) {
            keyword_ids[0] = rb_intern("toward");
            keyword_ids[1] = rb_intern("double_heap");
        }

        rb_get_kwargs(opt, keyword_ids, 0, 2, kwvals);
        if (kwvals[0] != Qundef && rb_intern("empty") == rb_sym2id(kwvals[0])) {
            use_toward_empty = TRUE;
        }
        if (kwvals[1] != Qundef && RTEST(kwvals[1])) {
            use_double_pages = TRUE;
        }
    }

    gc_compact(objspace, use_toward_empty, use_double_pages, TRUE);
    return gc_compact_stats(objspace);
}

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

Этот метод специфичен для реализации. Во время уплотнения объекты, которые были перемещены, заменяются объектами типа 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
  __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep
end

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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