Even if `Executors.newSingleThreadExecutor()` returns a `FinalizableDelegatedExecutorService`, an instance is kept in the memory until JVM exists. That may lead to memory leak since we have a lot of threads in memory. **Auto-cherry-pick to `6.3.x` & `6.2.x`**