一、描述类加载器的种类
类加载器的种类有3种,分别为启动类加载器,拓展类加载器,应用类加载器。
二、简述双亲委任机制
1、双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载 器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会 尝试自己去加载。
2、双亲委派模型工作流程
1.
当
Application ClassLoader
收到一个类加载请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extension ClassLoader
去完成。
2.
当
Extension ClassLoader
收到一个类加载请求时,他首先也不会自己去尝试加载这个类,而是将请 求委派给父类加载器Bootstrap ClassLoader
去完成。
3.
如果
Bootstrap ClassLoader
加载失败
(
在
<JAVA_HOME>\lib
中未找到所需类
)
,就会让
Extension ClassLoader尝试加载。
4.
如果
Extension ClassLoader
也加载失败,就会使用
Application ClassLoader
加载。
5.
如果
Application ClassLoader
也加载失败,就会使用自定义加载器去尝试加载。
6.
如果均加载失败,就会抛出
ClassNotFoundException
异常
三、字节码验证的时候验证了什么?
1、变量要在使用之前进行初始化
2、程序不能破坏计算机硬件
3、方法调用与对象引用类型之前要匹配
4、访问私有数据和方法的规则没有被违背
6、对本地变量的访问落在运行时堆栈内
7、运行时堆栈没有溢出