“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
类加载器&加载过程
Java是运行在java虚拟机JVM中,将我们编写后的java文件编译成class文件,类加载器子系统负责从文件系统或者网络中加载class文件进行执行。
类加载器分为:
-
引导类加载器 BootstrapClassLoader
-
扩展类加载器 ExtensionClassLoader
-
系统类加载器 AppClassLoader
加载过程:
1.通过一个类的全限定名获取定义此类的二进制字节流。
2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
双亲委派机制
java虚拟机对class文件采用的是按需加载的方式,也就是说当需要试用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式,即把请求交由父类处理,这是一种任务委派模式。
工作原理
1.如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
2.如果父类加载器还存在其父类加载器,则进一步向上委托,一次递归,请求最终将达到顶层的启动类加载器;
3.如果父类加载器可以完成类加载任务,就成功返回,如果父类加载器无法完成此加载任务,子加载器才会进尝试进行自己去加载,这就是双亲委派模式。
优势:
避免类的重复加载。
保护程序安全,防止核心API被随意篡改。