Citat:
karas:
Bruce Eckel savetuje da sve zavrshne radnje nekog objekta izvedem u finally bloku. Zar nije bilo lakshe tvorcima Jave da omogucce destruktor ili barem da garantuju izvrshavanje finalize() odmah po bacanju objekta u smecce?
pa.. nije to baš tako jednostavno kako ti zamišljaš.. ti nikad objekte ne bacaš u smeće.. pre će biti da ti oni "ispadaju" po ulici dok trčiš, a posle prolazi đubrar i skuplja ih ;))
fazon je što GC nije garantovana i predefinisana operacija. ti nikad ne možeš da predvidiš
kada će neki objekat biti oslobođen, pa čak ni kojim redom, itd..
ako te stvarno zanima teorija iza ove problematike, (i usput imaš šira interesovanja od same jave), evo dva vrlo korisna texta o GC i finalizerima u .NET (znam da nije striktno za ovaj forum -- ali to sam skoro čitao pa sam se setio...)
prvi je više o Delphi .NET implementaciji, a drugi je čisto m$, ali ipak prilično kvalitetan ;) -- principi rada svega ovoga (teorija, iza kulisa) zajednički su sa implementacijom javinih virtuelnih mašina, pa stoji moja preporuka svima!!
http://community.borland.com/article/0,1410,29365,00.html
http://msdn.microsoft.com/msdnmag/issues/1100/GCI/default.aspx
http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/GCI2.asp (drugi deo)