类加载器:
类加载器是一个用于加载类的对象。ClassLoader 是一个抽象类。类加载器通过给定的class 文件名,尝试进行定位或者加载生成构成定义该类的数据。通常的做法是在文件系统中将名称转化为文件名,并从文件系统中根据名称进行读取。
类的卸载:
由Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。(java虚拟机自带的类加载器主要是Bootrap ClassLoder , Extension ClassLoader , Application ClassLoader)
Java 虚拟机本身会始终引用这些类加载器,而这些类加载器则会始终引用它们所加载的类的Class对象,因此这些Class对象始终是可触及的。
由用户自定义的类加载器所加载的类是可以被卸载的(当自定义类加载器的类的实例对象为null后,就可能被gc掉)。
当一个类被加载、连接和初始化后,它的生命周期就开始了。当代表这个类的Class 对象不再被引用(类的实例对象以及 类的Class 对象无引用后),即不可触及时,
类的Class 对象就会结束生命周期,该类在方法区内的数据也会被卸载,从而结束类的生命周期。
总之,一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期。
类的命名空间:
每个类加载器都有自己的命名空间,命名空间由该加载器及所有父加载器所加载的类组成。
特征:
1. 在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类
2. 在不同的命名空间中,有可能会出现类的完整名字(包括类的包名)相同的两个类