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