Aplikacni programator udela nejlepe, kdyz na finalize() zapomene a misto
nej bude pouzivat metodu pro uklid a try + finally:
InputStream is = ...
try {
...
} finally {
is.close();
}
Pokud jde o to, zda ma finalize nekdy smysl, tak ano: muze to byt pojistka
pro pripad, ze programator zapomnel zavolat uklidovou metodu. Programator
by na to ovsem nemel spolehat a mel by se snazit, aby kazdy objekt po sobe
uklidil.
Jinak ten clanek, ktery uvadis, je z roku 98. Takze to asi nebude
nejvhodnejsi zdroj.
Z.T.
--
Zdenek Tronicek
FIT CTU in Prague
Ondra Medek napsal(a):
> Ahoj,
>
> navazuji tak trochu na predchozi thread. Jsem ted zmaten, jesli ma
> Object.finalize() smysl nebo by mel byt @Deprecated. Pokud ma smysl,
> tak kdy ho pouzit?
>
> V JDK 1.6 JavaDoc dokumentaci
> http://java.sun.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29
> stoji:
>
> "For example, the finalize method for an object that represents an
> input/output connection might perform explicit I/O transactions to
> break the connection before the object is permanently discarded."
>
> Clanek ja Javaworld
> http://www.javaworld.com/javaworld/jw-06-1998/jw-06-techniques.html
> tez radi ve finalize() uvolnovat systemove zdroje, ale pouze jako
> "fallback mechanism". (Coz mi presne sedi pro ten java.awt.Window
> problem).
>
> Progrepoval jsem JDK 1.6 zdrojaky a SUN se k finalize() asi stavi
> ambivalentne: nekde ho pouziva, nekde ne. Priklady pouziti:
> java.util.zip.ZipFile - zavira IO stream
> java.io.FileInputStream + java.io.FileOutputStream : zaviraji file
> descriptory
> ... a dalsi
>
> Nejvice je onen ambivalentni pristup videt na ImageInputStreamImpl a
> FileImageOutputStream z baliku javax.imageio.stream:
> ImageInputStreamImpl ma finalize(), ktere v podstate jen nastavi
> priznak isClosed = true
> FileImageOutputStream je potomek ImageInputStreamImpl a prepisuje
> finalize(), ve kterem nedela nic.
>
> Dale jsem nasel treba zakomentovany finalize(), ktery puvodne zavitral
> IO stream, v com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl s
> poznamkou, ze "It affects the performance greatly in multi-thread
> environment. ". Tedy ZipFile vesele IO stream zavira ve finalize(),
> kdezto CoreDocumentImpl to ma zakomentovane.
>
> Diky
> Ondra Medek
>