一 什么是classloader
我们知道我们写好java程序后,都是由若干个.class文件组成的完整的java应用程序,当程序运行的时候,并不是一次性加载所有的.class文件,而是动态加载.也就是后,从一个class文件中调用另一个class文件中的方法,如果另一个文件不存在,那么就要根据需要,通过java的类加载机制来动态加载所需要的class文件,从而>只有加载到jvm内存中才会被其它class文件使用,所以,classLoader就是动态加载class文件到jvm内存中使用的.
我们先回想一下类加载的5个过程:
加载-->验证-->准备-->解析-->初始化 5个阶段.
而加载的过程需要完成3件事:
1)通过一个类的全限定名来获取定义此类的字节流文件
2)将这个字节流文件的静态存储结构转化为方法区的运行时结构
3)在java堆中生成一个相应的类的java.lang.Class对象,作为方法区的数据访问入口.
ClassLoader有三个类加载器:
Bootstrap classloader Entension classLoader App classLoader
当然我们也可以自定义
三 ClassLoader的加载类的原理:
1,当App ClassLoader加载一个class时,他不会首先子集区尝试加载,而是交给他的父类extension classLoader加载
2,当Extension class加载一个class文件时,他也不会首先自己尝试去加载,而是交给父类Brootstrap classLoader去加载
3,当Brootstrap class加载一个class 文件时,如果加载失败,交给extension class加载,extension class加载失败就交给app classLoader去加载
4,当都加载失败的情况下,就会抛出ClassNotFoundException异常
四 优势:
避免重复加载更加安全
五 jvm如何判断两个类是同一个类
类的全限定名是否相同,是否有同一个类加载器加载
我们知道我们写好java程序后,都是由若干个.class文件组成的完整的java应用程序,当程序运行的时候,并不是一次性加载所有的.class文件,而是动态加载.也就是后,从一个class文件中调用另一个class文件中的方法,如果另一个文件不存在,那么就要根据需要,通过java的类加载机制来动态加载所需要的class文件,从而>只有加载到jvm内存中才会被其它class文件使用,所以,classLoader就是动态加载class文件到jvm内存中使用的.
我们先回想一下类加载的5个过程:
加载-->验证-->准备-->解析-->初始化 5个阶段.
而加载的过程需要完成3件事:
1)通过一个类的全限定名来获取定义此类的字节流文件
2)将这个字节流文件的静态存储结构转化为方法区的运行时结构
3)在java堆中生成一个相应的类的java.lang.Class对象,作为方法区的数据访问入口.
ClassLoader有三个类加载器:
Bootstrap classloader Entension classLoader App classLoader
当然我们也可以自定义
三 ClassLoader的加载类的原理:
1,当App ClassLoader加载一个class时,他不会首先子集区尝试加载,而是交给他的父类extension classLoader加载
2,当Extension class加载一个class文件时,他也不会首先自己尝试去加载,而是交给父类Brootstrap classLoader去加载
3,当Brootstrap class加载一个class 文件时,如果加载失败,交给extension class加载,extension class加载失败就交给app classLoader去加载
4,当都加载失败的情况下,就会抛出ClassNotFoundException异常
四 优势:
避免重复加载更加安全
五 jvm如何判断两个类是同一个类
类的全限定名是否相同,是否有同一个类加载器加载