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

Odpovedet emailem