06_JVM学习笔记_类的命名空间、类的卸载

类的命名空间

  • 每个类加载器都有自己的命名空间,命名空间由该加载器及所有父加载器所加载的类组成。
  • 在同一个命名空间中,不会出现类的完整名字(包括类的包中)相同的两个类。
  • 在不同的命名空间中,有可能会出现类的完整名字(包括类的包名)相同的两个类。

关于命名空间的重要说明
1.子加载器所加载的类能够访问父加载器所加载的类
2.父加载器所加载的类无法访问到子加载器所加载的类

类的卸载

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

你可能感兴趣的:(06_JVM学习笔记_类的命名空间、类的卸载)