Moving ThreadPoolExecutor from finalization to Cleaner
Finalizable objects on the heap affect garbage collection negatively. ThreadPoolExecutor is always used by some programmers instead of new Thread().start(), via Executors.newSingleThreadExecutor(). I would not be surprised if some applications create thousands of ThreadPoolExecutors. So making ThreadPoolExecutor to use Cleaner instead of finalization should be helpful.