Confusion with Ruby's `GC#start` -
program - i
p ruby_version = "a" b = "b" p "#{a}" p "#{b}" p "garbage count => #{gc.count}" b = "d" p "garbage count => #{gc.count}" gc.start p "garbage count => #{gc.count}" p "#{a}" p "#{b}"
output:
"1.9.3" "a" "b" "garbage count => 1" "garbage count => 1" "garbage count => 2" "a" "d"
in program i
output of p "garbage count => #{gc.count}"
made me confused 1,1,2
.confusion garbage objects
count. tried modified version of program-i
as below.
where commented out gc.start
. looking @ output of program -ii
seems strated gc.start
in first program,which in turn destroyed no-reference object "b"
.
program - ii
p ruby_version = "a" b = "b" p "#{a}" p "#{b}" p "garbage count => #{gc.count}" b = "d" p "garbage count => #{gc.count}" #gc.start p "garbage count => #{gc.count}" p "#{a}" p "#{b}"
output:
"1.9.3" "a" "b" "garbage count => 1" "garbage count => 1" "garbage count => 1" "a" "d"
final questions are:
(a) before gc.start
1 object has been destryed clear output. object it?
(b) why no-reference object b
not being destroyed without gc.start
?
edit
p gc.count p gc.disable p gc.count
output
1 false 1
in abive code have disabled garbage collection
.why last gc.count
showing output 1
?
can me understand questions raised on mind stated above.
gc.count doesn't return number of garbage collected objects - returns number of times garbage collector has run, calling gc.start
increment one.
a bunch of code gets executed before code starts run, it's not surprising garbage collection may occur.
disabling gc isn't going undo garbage collections have happened.
Comments
Post a Comment