Up
On Sat, Jun 5, 2010 at 4:30 PM, Anty <[email protected]> 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
>