AsynchronousFileChannel.finalize()? (original) (raw)
Zhong Yu zhong.j.yu at gmail.com
Wed Mar 28 16:34:45 PDT 2012
- Previous message: 6341887: Inflater can't handle ByteBuffer
- Next message: AsynchronousFileChannel.finalize()?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
It appears that if close() is not invoked before an AsynchronousFileChannel becomes unreachable, the file handle remains open, and we get a resource leak.
We can blame the programer for not properly closing the channel. However, would the nio team consider to add a feature anyway that will automatically invoke close() in finalize() (or something like sun.misc.Cleaner)?
I have a use case where this feature could be helpful. A server has a file that's constantly requested by clients. The server opens one AsynchronousFileChannel and caches it. The same channel is used to serve all client requests to the file. When the server evicts the channel from the cache, it cannot immediately close() the channel right away, because the channel could still be referenced by request processors reading the file. The channel should be closed only after nobody references it.
The point is that an AsynchronousFileChannel can be shared and accessed concurrently by multiple users; then it is difficult to pre-assign a user with the responsibility of closing the channel. It should be the last user that uses the channel - which is better handled in JDK.
(In comparison, FileInputStream/FileChannel should have only one user at any given time, therefore it's clear who is responsible to do the close(). I wouldn't request the feature on these two classes.)
Zhong Yu
- Previous message: 6341887: Inflater can't handle ByteBuffer
- Next message: AsynchronousFileChannel.finalize()?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]