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/