一种类型被卸载的前提条件是:加载此类型的类加载器实例变为不可达(unreachable)状态,虚拟机协议中对应描述如下: A class or interface may be unloaded if and only if its class loader is unreachable. The bootstrap class loader is always reachable; as a result, system classes may never be unloaded.
关于实例的*unreachable*状态,大致可以理解为不能通过特定活动线程对应的栈出发通过引用计算来到达对应的实例,虚拟机协议中对应描述如下:
_A reachable object is any object that can be accessed in any potential continuing
computation from any live thread._
结合上面的[虚拟机运行时数据区的介绍|],可以得出结论:类型对应的普通实例、类型对应的java.lang.Class实例、加载此类型的ClassLoader实例,三者中有任何一种或者多种是reachable状态的,那么此类型就不可能被卸载。