boolean (@NotNull Thread thread, StackTraceElement @NotNull [] stackTrace) { if (!thread.isAlive()) return true; if (isWellKnownOffender(thread.getName())) return true; if (stackTrace.length == 0) { return true; // ignore threads with empty stack traces for now. Seems they are zombies unwilling to die. } return isIdleApplicationPoolThread(stackTrace) || isIdleCommonPoolThread(thread, stackTrace) || isFutureTaskAboutToFinish(stackTrace) || isIdleDefaultCoroutineExecutorThread(thread, stackTrace) || isCoroutineSchedulerPoolThread(thread, stackTrace) || isKotlinCIOSelector(stackTrace) || isStarterTestFramework(stackTrace) || isJMXRemoteCall(stackTrace); }