---------- Forwarded message ----------
From: Anty <anty....@gmail.com>
Date: Sat, Jun 5, 2010 at 4:30 PM
Subject: PhantomReference in Cassandra
To: u...@cassandra.apache.org, chukwa-dev <chukwa-...@hadoop.apache.org>


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



-- 
Best Regards
Anty Rao

Reply via email to