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/

Search the boards