JVM与GC 第2章类装载器ClassLoader 、执行引擎ExecutionEngine

第2章 类装载器ClassLoader 、执行引擎ExecutionEngine

1. 定义

负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。

2. 类加载器分类

2.1虚拟机自带的加载器

  • 启动类加载器(Bootstrap)C++
  • 扩展类加载器(Extension)Java
  • 应用程序类加载器(AppClassLoader)Java(也叫系统类加载器,加载当前应用的classpath的所有类)

2.2用户自定义加载器

       jawa.lang.ClassLoader的子类,用户可以定制类的加载方式

         (1)递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

         (2)沙箱安全机制:网络上有个名叫lang.Integer的类,它是某个黑客为了想混进java.lang包所起的名字,实际上里面含有恶意代码,但是这种 伎俩在双亲模式加载体系结构下是行不通的,因为网络类加载器在加载它的时候,它首先调用双亲类加载器,这样一直向上委托,直到启动类加载器,而启动类加载 器在核心Java API里发现了这个名字的类,所以它就直接加载Java核心API的java.lang.Integer类,然后将这个类返回,所以自始自终网络上的 java.lang.Integer的类是不会被加载的。

2.3示例代码

3. 执行引擎ExecutionEngine

执行引擎负责解释命令,提交操作系统执行。