Q&A
Q&AWhat usually keeps an undeployed Java class loader alive?
A live root still reaches an object, class, or thread state owned by the old loader.
Read the concise answer
Look for parent-owned registries, executor queues, thread locals, context class loaders, and callbacks. An unreachable cycle can be collected; a path from a long-lived root cannot.