Up On Sat, Jun 5, 2010 at 4:30 PM, Anty <anty....@gmail.com> wrote:
> Hi:All > in the code of SSTableReader.java > private static final ReferenceQueue<SSTableReader> finalizerQueue = new > ReferenceQueue<SSTableReader>() > {{ > Runnable runnable = new Runnable() > { > public void run() > { > while (true) > { > SSTableDeletingReference r = null; > try > { > r = (SSTableDeletingReference) > finalizerQueue.remove(); > finalizers.remove(r); > } > catch (InterruptedException e) > { > throw new RuntimeException(e); > } > try > { > r.cleanup(); > } > catch (IOException e) > { > logger.error("Error deleting " + r.path, e); > } > } > } > }; > new Thread(runnable, "SSTABLE-DELETER").start(); > }}; > > > the PhantomReference SSTableDeletingReference's cleanup() method doesn't > invoked clear() method inherited from Reference, whichi clear the phantom > reference to the referent. > but,the GC enqueues the PhantomReference onto ReferenceQueue before the > phantom reference clears. Is it necessary to invoke the clear() method after > r.clearup() or add clear() method in cleanup() method to accelerate the GC > process. > try > { > r.cleanup(); > r.clear(); > > } > catch (IOException e) > { > logger.error("Error deleting " + r.path, e); > } > -- > Best Regards > Anty Rao >