System.gc() to close file descriptors (was RE: status of gcj's bo ehm collector?)
Andrew Haley
aph@cambridge.redhat.com
Tue Dec 11 11:15:00 GMT 2001
Boehm, Hans writes:
> > From: Andrew Haley [mailto:aph@cambridge.redhat.com]
> > Boehm, Hans writes:
> > > Interesting. Unfortunately, I think the standard Java
> > interface isn't quite
> > > sufficient to do that right. I think the logic to do this
> > properly is:
> > >
> > > if (I'm out of file descriptors and need one, but not before) {
> > > for (;;) {
> > > System.gc();
> > > System.runFinalization();
> > > if (the preceding call ran no finalizers || file descriptor is
> > > available) break;
> > > }
> > > }
> > >
> > > The loop is needed because running finalizers may result in
> > > dropping more objects. If finalization dependencies are correctly
> > > enforced (in Java the client code needs to do that), that's even
> > > reasonably likely. I think this mean you really need
> > > runFinalization to return an indication of whether or not it did
> > > anything so that you can avoid a potentially infinite loop here.
> >
> > What I'm wondering is whether this is a real or a theoretical
> > requirement for gcj. So, for our current implementation, is there any
> > chance that calling System.gc() might not call finalizers for files
> > that are garmbge before returing?
I can confirm that this really is broken in the current libgcj.
Here's a test case that I'll commit. I'm working on a fix.
Andrew.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: FileHandleGcTest.java
URL: <http://gcc.gnu.org/pipermail/java/attachments/20011211/ac7bb8af/attachment.ksh>
More information about the Java
mailing list