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
>

Reply via email to