explained GC dispose-finalize pattern