In sun.nio.ch.PendingFuture, there is a static cached Throwable private static final CancellationException CANCELLED = new CancellationException(); Apparently, its Throwable.backtrace field contains an array of all Classes on the call stack. This will prevent the user classes from being garbage collected. Zhong Yu