ruby-changes:58640
From: Koichi <ko1@a...>
Date: Fri, 8 Nov 2019 15:30:13 +0900 (JST)
Subject: [ruby-changes:58640] 054cb6d389 (master): forget to add gc.rb
https://git.ruby-lang.org/ruby.git/commit/?id=054cb6d389 From 054cb6d389da6a260830e4bd262aab2ee8fe2cb2 Mon Sep 17 00:00:00 2001 From: Koichi Sasada <ko1@a...> Date: Fri, 8 Nov 2019 15:29:59 +0900 Subject: forget to add gc.rb diff --git a/gc.rb b/gc.rb new file mode 100644 index 0000000..6329f96 --- /dev/null +++ b/gc.rb @@ -0,0 +1,169 @@ https://github.com/ruby/ruby/blob/trunk/gc.rb#L1 +# for gc.c + +# The GC module provides an interface to Ruby's mark and +# sweep garbage collection mechanism. +# +# Some of the underlying methods are also available via the ObjectSpace +# module. +# +# You may obtain information about the operation of the GC through +# GC::Profiler. +module GC + + # call-seq: + # GC.start -> nil + # ObjectSpace.garbage_collect -> nil + # include GC; garbage_collect -> nil + # GC.start(full_mark: true, immediate_sweep: true) -> nil + # ObjectSpace.garbage_collect(full_mark: true, immediate_sweep: true) -> nil + # include GC; garbage_collect(full_mark: true, immediate_sweep: true) -> nil + # + # Initiates garbage collection, even if manually disabled. + # + # This method is defined with keyword arguments that default to true: + # + # def GC.start(full_mark: true, immediate_sweep: true); end + # + # Use full_mark: false to perform a minor GC. + # Use immediate_sweep: false to defer sweeping (use lazy sweep). + # + # Note: These keyword arguments are implementation and version dependent. They + # are not guaranteed to be future-compatible, and may be ignored if the + # underlying implementation does not support them. + def self.start full_mark: true, immediate_mark: true, immediate_sweep: true + __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + end + + def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true + __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + end + + # call-seq: + # GC.enable -> true or false + # + # Enables garbage collection, returning +true+ if garbage + # collection was previously disabled. + # + # GC.disable #=> false + # GC.enable #=> true + # GC.enable #=> false + # + def self.enable + __builtin_gc_enable + end + + # call-seq: + # GC.disable -> true or false + # + # Disables garbage collection, returning +true+ if garbage + # collection was already disabled. + # + # GC.disable #=> false + # GC.disable #=> true + def self.disable + __builtin_gc_disable + end + + # call-seq: + # GC.stress -> integer, true or false + # + # Returns current status of GC stress mode. + def self.stress + __builtin_gc_stress_get + end + + # call-seq: + # GC.stress = flag -> flag + # + # Updates the GC stress mode. + # + # When stress mode is enabled, the GC is invoked at every GC opportunity: + # all memory and object allocations. + # + # Enabling stress mode will degrade performance, it is only for debugging. + # + # flag can be true, false, or an integer bit-ORed following flags. + # 0x01:: no major GC + # 0x02:: no immediate sweep + # 0x04:: full mark after malloc/calloc/realloc + def self.stress=(flag) + __builtin_gc_stress_set_m flag + end + + # call-seq: + # GC.count -> Integer + # + # The number of times GC occurred. + # + # It returns the number of times GC occurred since the process started. + def self.count + __builtin_gc_count + end + + # call-seq: + # GC.stat -> Hash + # GC.stat(hash) -> hash + # GC.stat(:key) -> Numeric + # + # Returns a Hash containing information about the GC. + # + # The hash includes information about internal statistics about GC such as: + # + # { + # :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 + # } + # + # The contents of the hash are implementation specific and may be changed in + # the future. + # + # This method is only expected to work on C Ruby. + def self.stat hash_or_key = nil + __builtin_gc_stat hash_or_key + end + + # call-seq: + # GC.latest_gc_info -> {:gc_by=>:newobj} + # GC.latest_gc_info(hash) -> hash + # GC.latest_gc_info(:major_by) -> :malloc + # + # Returns information about the most recent garbage collection. + def self.latest_gc_info hash_or_key = nil + __builtin_gc_latest_gc_info hash_or_key + end + + def self.compact + __builtin_rb_gc_compact + end +end + +module ObjectSpace + def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true + __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + end + + module_function :garbage_collect +end -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/