[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]