文章目录序言一、班装载机二、父母委派拓展知识
前言JVM父母委托机制
一、类加载器不同的类加载器负责不同class的加载
因为Bootstrap加载了核心类并由c实现,所以加载器加载的类是nullExtClassLoader扩展类加载器,用于获取类加载器,扩展jar包JRE/lib/ext/ext app类加载器加载类路径的指定内容; Custom ClassLoader自定义类加载器、想加载的位置、想加载的位置2、来自父母的JVM是按需动态加载 采用双亲委派机制。
大致流程如下。
如果某个类需要加载,则从下到上检查是否加载了该类;如果未加载,则询问上层加载器是否加载了该类。 (每个加载器都有自己的加载范围,有自己的管辖内存空间,并维护自己的加载类,因此可以理解为需要在加载器之间进行查询。 )
如果没有加载,从上到下的是搜索和加载,看这个没有加载的游戏属于哪个压扁的小牛管辖
拓展知识为什么要采用父母委托机制呢? 使用单类加载器也不能完成加载吗? 这是为了确保java内部核心类的安全性,防止恶意替换加载到JVM中的核心类。
不同类型的类加载器是什么关系? 有类的继承关系吗? 他们是类加载器的父子关系,没有类的继承关系。 下面是ClassLoader源代码,其中每个类加载器都保留parent属性,属性值指示其父加载器是谁,没有类继承关系。
//theparentclassloaderfordelegation//note : vmhardcodedtheoffsetofthisfield,thusallnewfields//must be added * after