22.类的卸载

  • 当MySample类被加载,连接和初始化后,它的生命周期就开始了。当代表MySample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,MySample类在方法区内的数据也会被卸载,从而结束MySample类的生命周期
  • 一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期
  • Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。前面已经介绍过,Java虚拟机自带的类加载器包括根类加载器,扩展类加载器和系统类加载器。Java虚拟机本身会始终引用这些类加载器,而这些类加载器则会始终引用它们所加载的类的Class对象,因此这些Class对象始终是可触及的
  • 用户自定义的类加载器所加载的类是可以被卸载的
  • 运行以上程序时,Sample类由loader1 加载,在类加载器的内部实现中,用一个Java集合来存放所加载类的引用。另一方面,一个Class对象总是会引用它的类加载器,调用Class对象的getClassLoader() 方法,就能获得它的类加载器。由此可见,代表Sample类的Class实例与loader1之间为双向关联关系
  • 一个类的实例总是引用代表这个类的Class对象。在Object类中定义了getClass() 方法,这个方法返回代表对象所属类的Class对象的引用。此外,所有的Java类都有一个静态属性class, 它引用代表这个类的Class对象

1. 使用VM 参数查看类的卸载信息

22.类的卸载