File Manager
# The ObjectSpace module contains a number of routines that interact with the
# garbage collection facility and allow you to traverse all living objects with
# an iterator.
#
# ObjectSpace also provides support for object finalizers, procs that will be
# called when a specific object is about to be destroyed by garbage collection.
#
# require 'objspace'
#
# a = "A"
# b = "B"
#
# ObjectSpace.define_finalizer(a, proc {|id| puts "Finalizer one on #{id}" })
# ObjectSpace.define_finalizer(b, proc {|id| puts "Finalizer two on #{id}" })
#
# *produces:*
#
# Finalizer two on 537763470
# Finalizer one on 537763480
module ObjectSpace
def self._id2ref: (Integer id) -> untyped
# Counts all objects grouped by type.
#
# It returns a hash, such as:
# {
# :TOTAL=>10000,
# :FREE=>3011,
# :T_OBJECT=>6,
# :T_CLASS=>404,
# # ...
# }
#
# The contents of the returned hash are implementation specific. It may be
# changed in future.
#
# The keys starting with `:T_` means live objects. For example, `:T_ARRAY` is
# the number of arrays. `:FREE` means object slots which is not used now.
# `:TOTAL` means sum of above.
#
# If the optional argument `result_hash` is given, it is overwritten and
# returned. This is intended to avoid probe effect.
#
# h = {}
# ObjectSpace.count_objects(h)
# puts h
# # => { :TOTAL=>10000, :T_CLASS=>158280, :T_MODULE=>20672, :T_STRING=>527249 }
#
# This method is only expected to work on C Ruby.
#
def self.count_objects: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
# Adds *aProc* as a finalizer, to be called after *obj* was destroyed. The
# object ID of the *obj* will be passed as an argument to *aProc*. If *aProc* is
# a lambda or method, make sure it can be called with a single argument.
#
def self.define_finalizer: (untyped obj, ^(Integer id) -> void aProc) -> [ Integer, Proc ]
| (untyped obj) { (Integer id) -> void } -> [ Integer, Proc ]
# Calls the block once for each living, nonimmediate object in this Ruby
# process. If *module* is specified, calls the block for only those classes or
# modules that match (or are a subclass of) *module*. Returns the number of
# objects found. Immediate objects (`Fixnum`s, `Symbol`s `true`, `false`, and
# `nil`) are never returned. In the example below, #each_object returns both the
# numbers we defined and several constants defined in the Math module.
#
# If no block is given, an enumerator is returned instead.
#
# a = 102.7
# b = 95 # Won't be returned
# c = 12345678987654321
# count = ObjectSpace.each_object(Numeric) {|x| p x }
# puts "Total count: #{count}"
#
# *produces:*
#
# 12345678987654321
# 102.7
# 2.71828182845905
# 3.14159265358979
# 2.22044604925031e-16
# 1.7976931348623157e+308
# 2.2250738585072e-308
# Total count: 7
#
def self.each_object: (?Module `module`) -> Enumerator[untyped, Integer]
| (?Module `module`) { (untyped obj) -> void } -> Integer
def self.garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
# Removes all finalizers for *obj*.
#
def self.undefine_finalizer: [X] (X obj) -> X
private
def garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
end
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com