Peter Keegan wrote:

There is no 'unmap' method, so my understanding is that the file mapping is
valid until the underlying buffer is garbage-collected. However, forcing the gc doesn't help.

You're half right.

The file mapping is indeed valid until the underlying buffer is garbage collected, but you can't "force" the GC -- there is no API which does that.

Note the wording in the Javadoc for System.gc():

  "Calling the gc method **suggests** that the Java Virtual Machine
   expend effort toward recycling unused objects in order to make the
   memory they currently occupy available for quick reuse. When control
   returns from the method call, the Java Virtual Machine has made a
   best effort to reclaim space from all discarded objects."

The file deletes don't fail on Linux, but I'm wondering if there is still a
memory leak?

Linux allows you to delete a file while someone has the file descriptor open, but the file descriptor will remain valid (i.e. the delete doesn't actually occur) until everyone releases the file descriptor.

I ran into similar issues as these when working on other things, and eventually ended up switching to using a RandomAccessFile, as those can be closed. Otherwise you're right -- the workaround is to routinely try to delete the file.

Daniel

--
Daniel Noll

Nuix Pty Ltd
Suite 79, 89 Jones St, Ultimo NSW 2007, Australia    Ph: +61 2 9280 0699
Web: http://www.nuix.com.au/                        Fax: +61 2 9212 6902

This message is intended only for the named recipient. If you are not
the intended recipient you are notified that disclosing, copying,
distributing or taking any action in reliance on the contents of this
message or attachment is strictly prohibited.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to