Objekter fødes, brukes og dør. I Ruby dør objektene når de hentes av søppeltømmeren. (garbage collector)
Når det skjer, er usikkert. Ingen referanser til objektet må eksistere og garbage collectoren må startes eksplisitt eller implisitt, f.eks. når det begynner å bli lite ledig minne.
1| streng = "Hvil i fred." 2| 3| # Vi gir en block som skal kjøres når streng objektet dør. 4| ObjectSpace.define_finalizer(streng){|id| 5| puts "Objektet med ID=#{id} er nå dødt. " 6| puts "Rest in peace." 7| } 8| 9| # Starter søppeltømmeren eksplisitt. 10| puts "Henter søppel!" 11| GC.start 12| # Men ingenting skjer, da det ennå er en referanse til strengen. 13| 14| # Prøver en gang til... 15| streng = nil 16| puts "Henter mer søppel!" 17| GC.start 18| # finalizer blocken blir kjørt. |
Legg merke til at objektet allerede er dødt når finalizer block'en kalles. Ressurser som må lukkes eksplisitt, holdes via bindingen til block'en. (Bare pass på at bindingen ikke også holder en referanse til objektet.)
Flere finalizers kan registreres på et objekt.