Finalize is called for reified objects even when they are still reachable. It gets called second time at proper time.
`
user=> (def x (reify Object (finalize [o] (println "OH MY!"))))
'user/x
user=> (System/gc)
nil
OH MY!
user=> x
<user$reify1496 user$reify1496@53fb35af>
user=> (System/gc)
nil
user=> (def x nil)
'user/x
user=> (System/gc)
nilOH MY!
`
Deftype seems to work fine
`
user=> (deftype T [] Object (finalize [o] (println "great success")))
user.T
user=> (def y (->T))
'user/y
user=> (System/gc)
nil
user=> (def y nil)
'user/y
user=> (System/gc)
great success
`