модуль 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 158 def self.compact __builtin_rb_gc_compact end
# File gc.rb, line 63 def self.disable __builtin_gc_disable end
Отключает сборку мусора, возвращая true, если сборка мусора была уже отключена.
GC.disable #=> false GC.disable #=> true
# File gc.rb, line 51 def self.enable __builtin_gc_enable end
Включает сборку мусора, возвращая true, если сборка мусора была ранее отключена.
GC.disable #=> false GC.enable #=> true GC.enable #=> false
# File gc.rb, line 154 def self.latest_gc_info hash_or_key = nil __builtin_gc_latest_gc_info hash_or_key end
Возвращает информацию о последней сборке мусора.
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 __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 для отсрочки очистки (используйте ленивую очистку).
Примечание: Эти ключевые аргументы зависят от реализации и версии. Они не гарантируют совместимость в будущем и могут быть проигнорированы, если базовая реализация их не поддерживает.
# 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.
# File gc.rb, line 71 def self.stress __builtin_gc_stress_get end
Возвращает текущий статус режима стресса GC.
# 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
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.
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 __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.