Posted By: Rat (prilis mnoho her) on 'CZprogram' Title: Re: garbage collectoryy Date: Wed Nov 3 13:54:58 2004 > > > GC nevi, jestli dany objekt drzi nudny retezec a nebo pripojeni k > databazi > > > a neda niceni takovehoto objektu prioritu. Takze se ti behem marneho > > > cekani na zasah GC mohou "drahe" objekty nahromadit. > > > > Jak nevi? V okamziku, kdy neni nikde referencovan, je mozne object > znicit, > > ne?? At je to konexe na databasi ci cokoliv jineho. > > Konkretni priklad: > > public class Test { > private Object mrkev; > } > > Predstav si, ze mas dve instance tridy Test. Zadna neni referencovana, > jsou tedy kandidaty na zniceni. Jedna ovsem ma v promenne mrkev databazovou > konekci, druha String. > > Jak jsem psal - "GC nevi, jestli dany objekt drzi nudny retezec a nebo > pripojeni k databazi" (tj. co je v promenne Mrkev). > > Jiste se shodneme na tom, ze je kravina zadratovat to jadra JVM kvanta > kontrol typu "jestli je promenna instanci javax.sql.Connection, tak to > zahod, jak jen je mozne" ;) > > Pak tedy je patrne, ze se nesmis spolehat na to, ze GC zacne nejak > rychle nicit instanci tridy Test, ktera ma v promenne "mrkev" pripojeni > k databazi. Tudiz uzavirani tohoto pripojeni az v "destruktoru" tridy > Test (jak bylo navrhovano v predchozi debate) je nesmysl. > > Verim, ze tohle je ti vsechno jasne - mozna nepozornost pri cteni? Mno... spis spatne vyjadrovani z me strany nebo i castecne nepochopeni v ramci debaty - pochopitelne nevi, co ten object drzi, nicmene nechapu duvod, proc by to mel nejakym zpusobem rozlisovat - nereferencovany objekt -> zahod ho, at je to cokoliv. ... s tim, ze to je/neni patrne - v pripade crossreferenci nelze poradi predpokladat, nicmene v pripade grafu bez orientovaneho cyklu nevidim duvod, proc by implementace nemohla vypadat ala Quasimodo. Tzn., v okamziku dereference na nulu se objekt znici okamzite a neceka se na GC. (mozna jsem ted uplne mimo debatu ;) ). Dokazu si predstavit, ze presunuti vsech finalizeru do jedineho threadu muze mit jiste vyhody, ale to stejne neni u Javy uplne pravda, ne? > > > Proto je lepsi, neni-li zadny "destruktor" poskytovan (v Jave sice neco > > > takoveho je ci bylo, ale z vyse uvedenych duvodu se to doporucuje > > > ignorovat), > > > aspon to programatory nesvadi k chybnemu spolehani na GC. > > > > Tahle veta nedava smysl > > Smysl mi dava. Vynecham-li zavorku a preformuluju-li ji, dostanu treba > "Z vyse uvedenych duvodu je lepsi, kdyz neni zadny 'destruktor' > [jazykem] poskytovan, nebot to programatory nesvadi k chybnemu spolehani > se na GC". Je to tak lepsi? :-) Jasne, sorry, ja vzal to neni-li, jako zacatek dalsiho podmineneho souveti ;) > Pavel Krysa rat@atrey.karlin.mff.cuni.cz Jsem Krysa http://atrey.karlin.mff.cuni.cz/~rat/