Программа - ЯПутаница с Руби `GC# start`
p RUBY_VERSION
a = "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}"
Выход:
"1.9.3"
"A"
"B"
"Garbage Count => 1"
"Garbage Count => 1"
"Garbage Count => 2"
"A"
"D"
В Program I
выход p "Garbage Count => #{GC.count}"
заставил меня путать которые 1,1,2
. Путаница была с подсчетом garbage objects
. Поэтому я попробовал модифицированную версию Program-I
, как показано ниже.
Где я закомментировал GC.start
. Теперь, глядя на вывод Program -II
, кажется , как я указал GC.start
в моей первой программе, которая, в свою очередь, уничтожила объект без ссылки "B"
.
Программа - II
p RUBY_VERSION
a = "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}"
Выход:
"1.9.3"
"A"
"B"
"Garbage Count => 1"
"Garbage Count => 1"
"Garbage Count => 1"
"A"
"D"
Заключительные вопросы:
(a) До GC.start
1 объект был удален, что видно на выходе. Что это за объект?
(b) Почему объект без ссылки B
не уничтожается без GC.start
?
EDIT
p GC.count
p GC.disable
p GC.count
Выход
1
false
1
в abive код, который я отключил garbage collection
.Why делает последний GC.count
показывает вывод как 1
?
Может ли кто-нибудь помочь мне понять вопросы, поднятые на мой взгляд, как указано выше.
Просмотреть мой ** EDIT ** –