Skip to content

Instantly share code, notes, and snippets.

@jrafanie
Created March 22, 2017 18:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrafanie/cc911b7351374577a4f829f7bbcede63 to your computer and use it in GitHub Desktop.
Save jrafanie/cc911b7351374577a4f829f7bbcede63 to your computer and use it in GitHub Desktop.
gc-compact branch
# ~/.rubies/ruby-compact/lib/ruby/gems/2.5.0/gems/nakayoshi_fork-0.0.3/lib/nakayoshi_fork.rb
def fork(nakayoshi: true, cow_friendly: true, &b)
if nakayoshi && cow_friendly
h = {}
4.times{ # maximum 4 times
GC.stat(h)
live_slots = h[:heap_live_slots] || h[:heap_live_slot]
old_objects = h[:old_objects] || h[:old_object]
remwb_unprotects = h[:remembered_wb_unprotected_objects] || h[:remembered_shady_object]
young_objects = live_slots - old_objects - remwb_unprotects
# p [[live_slots, old_objects, remwb_unprotects], [young_objects]]
break if young_objects < live_slots / 10
disabled = GC.enable
GC.start(full_mark: false)
GC.disable if disabled
}
# Added this line:
puts GC.compact.inspect if GC.respond_to?(:compact)
end
super(&b)
end if GC.method(:start).arity != 0
# for each fork run:
{:considered=>{:T_NONE=>365779, :T_OBJECT=>30610, :T_CLASS=>2599, :T_MODULE=>390, :T_FLOAT=>5, :T_STRING=>79008, :T_REGEXP=>592, :T_ARRAY=>35831, :T_HASH=>7173, :T_STRUCT=>2355, :T_BIGNUM=>2, :T_FILE=>3, :T_DATA=>6902, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>474, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>56401, :T_NODE=>0, :T_ICLASS=>1240, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>29317, :T_CLASS=>1289, :T_MODULE=>125, :T_FLOAT=>5, :T_STRING=>60436, :T_REGEXP=>141, :T_ARRAY=>25058, :T_HASH=>5714, :T_STRUCT=>2301, :T_BIGNUM=>2, :T_FILE=>2, :T_DATA=>5070, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>140, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>40590, :T_NODE=>0, :T_ICLASS=>1239, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>536312, :T_OBJECT=>1448, :T_CLASS=>1324, :T_MODULE=>265, :T_FLOAT=>5, :T_STRING=>97922, :T_REGEXP=>1042, :T_ARRAY=>46708, :T_HASH=>8674, :T_STRUCT=>2416, :T_BIGNUM=>3, :T_FILE=>4, :T_DATA=>8797, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>814, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>72541, :T_NODE=>0, :T_ICLASS=>1254, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>146, :T_CLASS=>16, :T_MODULE=>0, :T_FLOAT=>5, :T_STRING=>60778, :T_REGEXP=>141, :T_ARRAY=>25147, :T_HASH=>5743, :T_STRUCT=>2308, :T_BIGNUM=>2, :T_FILE=>2, :T_DATA=>5117, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>141, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>40865, :T_NODE=>0, :T_ICLASS=>1252, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>530330, :T_OBJECT=>2700, :T_CLASS=>1316, :T_MODULE=>285, :T_FLOAT=>5, :T_STRING=>117814, :T_REGEXP=>1522, :T_ARRAY=>58576, :T_HASH=>10397, :T_STRUCT=>2590, :T_BIGNUM=>4, :T_FILE=>5, :T_DATA=>10804, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>1129, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>89945, :T_NODE=>0, :T_ICLASS=>1287, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>1373, :T_CLASS=>43, :T_MODULE=>11, :T_FLOAT=>5, :T_STRING=>62257, :T_REGEXP=>148, :T_ARRAY=>26071, :T_HASH=>5976, :T_STRUCT=>2426, :T_BIGNUM=>2, :T_FILE=>2, :T_DATA=>5246, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>145, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>42147, :T_NODE=>0, :T_ICLASS=>1284, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>534553, :T_OBJECT=>1678, :T_CLASS=>1273, :T_MODULE=>272, :T_FLOAT=>5, :T_STRING=>136543, :T_REGEXP=>1999, :T_ARRAY=>69854, :T_HASH=>11935, :T_STRUCT=>2684, :T_BIGNUM=>5, :T_FILE=>6, :T_DATA=>12702, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>1460, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>106276, :T_NODE=>0, :T_ICLASS=>1292, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>354, :T_CLASS=>8, :T_MODULE=>3, :T_FLOAT=>5, :T_STRING=>62571, :T_REGEXP=>151, :T_ARRAY=>26363, :T_HASH=>6027, :T_STRUCT=>2465, :T_BIGNUM=>2, :T_FILE=>2, :T_DATA=>5266, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>145, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>42323, :T_NODE=>0, :T_ICLASS=>1289, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>527991, :T_OBJECT=>2562, :T_CLASS=>1340, :T_MODULE=>273, :T_FLOAT=>5, :T_STRING=>156294, :T_REGEXP=>2480, :T_ARRAY=>82162, :T_HASH=>13697, :T_STRUCT=>2835, :T_BIGNUM=>6, :T_FILE=>11, :T_DATA=>15019, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>1791, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>124311, :T_NODE=>0, :T_ICLASS=>1346, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>1212, :T_CLASS=>57, :T_MODULE=>6, :T_FLOAT=>5, :T_STRING=>64198, :T_REGEXP=>153, :T_ARRAY=>27544, :T_HASH=>6264, :T_STRUCT=>2556, :T_BIGNUM=>2, :T_FILE=>4, :T_DATA=>5670, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>152, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>43970, :T_NODE=>0, :T_ICLASS=>1343, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>508313, :T_OBJECT=>6467, :T_CLASS=>1410, :T_MODULE=>275, :T_FLOAT=>5, :T_STRING=>178330, :T_REGEXP=>2977, :T_ARRAY=>95706, :T_HASH=>15933, :T_STRUCT=>3705, :T_BIGNUM=>8, :T_FILE=>16, :T_DATA=>17309, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>2128, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>143800, :T_NODE=>0, :T_ICLASS=>1397, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>5025, :T_CLASS=>110, :T_MODULE=>17, :T_FLOAT=>5, :T_STRING=>67381, :T_REGEXP=>168, :T_ARRAY=>29484, :T_HASH=>6910, :T_STRUCT=>3370, :T_BIGNUM=>3, :T_FILE=>6, :T_DATA=>6101, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>261, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>156, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>46598, :T_NODE=>0, :T_ICLASS=>1394, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>513296, :T_OBJECT=>3287, :T_CLASS=>1409, :T_MODULE=>284, :T_FLOAT=>6, :T_STRING=>199315, :T_REGEXP=>3496, :T_ARRAY=>108866, :T_HASH=>17935, :T_STRUCT=>3934, :T_BIGNUM=>9, :T_FILE=>19, :T_DATA=>19527, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>2439, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>162712, :T_NODE=>0, :T_ICLASS=>1466, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>1827, :T_CLASS=>80, :T_MODULE=>13, :T_FLOAT=>6, :T_STRING=>69807, :T_REGEXP=>174, :T_ARRAY=>30941, :T_HASH=>7295, :T_STRUCT=>3541, :T_BIGNUM=>3, :T_FILE=>6, :T_DATA=>6406, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>157, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>48449, :T_NODE=>0, :T_ICLASS=>1463, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>519917, :T_OBJECT=>1849, :T_CLASS=>1357, :T_MODULE=>275, :T_FLOAT=>6, :T_STRING=>218303, :T_REGEXP=>4008, :T_ARRAY=>120857, :T_HASH=>19622, :T_STRUCT=>4025, :T_BIGNUM=>10, :T_FILE=>24, :T_DATA=>21555, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>2751, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>180269, :T_NODE=>0, :T_ICLASS=>1488, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>372, :T_CLASS=>15, :T_MODULE=>1, :T_FLOAT=>6, :T_STRING=>70275, :T_REGEXP=>177, :T_ARRAY=>31243, :T_HASH=>7352, :T_STRUCT=>3573, :T_BIGNUM=>3, :T_FILE=>8, :T_DATA=>6523, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>157, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>48935, :T_NODE=>0, :T_ICLASS=>1484, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>487321, :T_OBJECT=>15469, :T_CLASS=>1235, :T_MODULE=>249, :T_FLOAT=>6, :T_STRING=>236354, :T_REGEXP=>4435, :T_ARRAY=>132443, :T_HASH=>21358, :T_STRUCT=>4103, :T_BIGNUM=>10, :T_FILE=>30, :T_DATA=>23612, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>3137, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>196785, :T_NODE=>0, :T_ICLASS=>1492, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>14085, :T_CLASS=>2, :T_MODULE=>2, :T_FLOAT=>6, :T_STRING=>71065, :T_REGEXP=>177, :T_ARRAY=>31836, :T_HASH=>7546, :T_STRUCT=>3593, :T_BIGNUM=>3, :T_FILE=>12, :T_DATA=>6749, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>278, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>49372, :T_NODE=>0, :T_ICLASS=>1488, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>492479, :T_OBJECT=>7914, :T_CLASS=>1215, :T_MODULE=>246, :T_FLOAT=>6, :T_STRING=>254326, :T_REGEXP=>4860, :T_ARRAY=>144211, :T_HASH=>23128, :T_STRUCT=>4241, :T_BIGNUM=>11, :T_FILE=>35, :T_DATA=>25798, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>3462, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>214325, :T_NODE=>0, :T_ICLASS=>1520, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>6488, :T_CLASS=>17, :T_MODULE=>2, :T_FLOAT=>6, :T_STRING=>72085, :T_REGEXP=>178, :T_ARRAY=>32525, :T_HASH=>7729, :T_STRUCT=>3676, :T_BIGNUM=>3, :T_FILE=>14, :T_DATA=>7021, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>332, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>50537, :T_NODE=>0, :T_ICLASS=>1516, :T_ZOMBIE=>0}}
{:considered=>{:T_NONE=>491974, :T_OBJECT=>5393, :T_CLASS=>1236, :T_MODULE=>245, :T_FLOAT=>6, :T_STRING=>273194, :T_REGEXP=>5284, :T_ARRAY=>156412, :T_HASH=>25051, :T_STRUCT=>4428, :T_BIGNUM=>12, :T_FILE=>41, :T_DATA=>27998, :T_MATCH=>0, :T_COMPLEX=>1, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>3752, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>232255, :T_NODE=>0, :T_ICLASS=>1552, :T_ZOMBIE=>0}, :moved=>{:T_NONE=>0, :T_OBJECT=>3950, :T_CLASS=>52, :T_MODULE=>3, :T_FLOAT=>6, :T_STRING=>73967, :T_REGEXP=>178, :T_ARRAY=>33667, :T_HASH=>8027, :T_STRUCT=>3811, :T_BIGNUM=>3, :T_FILE=>16, :T_DATA=>7297, :T_MATCH=>0, :T_COMPLEX=>0, :T_RATIONAL=>276, :unknown=>0, :T_NIL=>0, :T_TRUE=>0, :T_FALSE=>0, :T_SYMBOL=>353, :T_FIXNUM=>0, :T_UNDEF=>0, :T_IMEMO=>51941, :T_NODE=>0, :T_ICLASS=>1548, :T_ZOMBIE=>0}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment