Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
GC.config
# File tmp/rubies/ruby-3.4.1/gc.rb, line 318
def self.config hash = nil
return Primitive.gc_config_get unless hash
if(Primitive.cexpr!("RBOOL(RB_TYPE_P(hash, T_HASH))"))
if hash.include?(:implementation)
raise ArgumentError, 'Attempting to set read-only key "Implementation"'
end
Primitive.gc_config_set hash
else
raise ArgumentError
end
end
Sets or gets information about the current GC config.
Configuration parameters are GC implementation-specific and may change without notice.
This method can be called without parameters to retrieve the current config as a Hash with Symbol keys.
This method can also be called with a Hash argument to assign values to valid config keys. Config keys missing from the passed Hash will be left unmodified.
If a key/value pair is passed to this function that does not correspond to a valid config key for the GC implementation being used, no config will be updated, the key will be present in the returned Hash, and its value will be nil. This is to facilitate easy migration between GC implementations.
In both call-seqs, the return value of GC.config will be a Hash containing the most recent full configuration, i.e., all keys and values defined by the specific GC implementation being used. In the case of a config update, the return value will include the new values being updated.
This method is only expected to work on CRuby.
GC Implementation independent values
The GC.config hash can also contain keys that are global and read-only. These keys are not specific to any one GC library implementation and attempting to write to them will raise ArgumentError.
There is currently only one global, read-only key:
- implementation
-
Returns a
Stringcontaining the name of the currently loaded GC library, if one has been loaded usingRUBY_GC_LIBRARY, and “default” in all other cases
GC Implementation specific values
GC libraries are expected to document their own configuration. Valid keys for Ruby’s default GC implementation are:
- rgengc_allow_full_mark
-
Controls whether the GC is allowed to run a full mark (young & old objects).
When
true, GC interleaves major and minor collections. This is the default. GC will function as intended.When
false, the GC will never trigger a full marking cycle unless explicitly requested by user code. Instead, only a minor mark will run—only young objects will be marked. When the heap space is exhausted, new pages will be allocated immediately instead of running a full mark.A flag will be set to notify that a full mark has been requested. This flag is accessible using
GC.latest_gc_info(:needs_major_by)The user can trigger a major collection at any time using
GC.start(full_mark: true)When
false, Young to Old object promotion is disabled. For performance reasons, it is recommended to warm up an application usingProcess.warmupbefore setting this parameter tofalse.
Ruby version changes
-
3.4
-
GC.configadded to allow setting configuration variables on the Garbage Collector. [Feature #20443]
-