1.JVM的体系结构概述
Jvm的体系结构由类装载器子系统,方法区,java栈,本地方法栈,堆,程序计数器,执行引擎,本地方法接口以及本地方法库等组成

1.1JVM的位置
JVM是运行在操作系统之上的,它与硬件没有直接的交互.

2.类装载器ClassLoader
负责加载class文件,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine(执行引擎)决定 ,class文件在文件开头有特定的文件标示(32字节用16进制表示是"cafebabe")

2.1类装载器ClassLoader分类
虚拟机自带的加载器分为启动类加载器,扩展类加载器和应用程序类加载器

2.1.2启动类加载器
启动类加载器((Bootstrap)C++)也叫根加载器,是嵌在JVM内核中的加载器,该加载器是用C++语言写的,主要负载加载JAVA_HOME/lib下的类库,启动类加载器无法被应用程序直接使用
2.1.3扩展类加载器
扩展类加载器(ExtensionClassLoader)是用JAVA编写,主要负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目录下的所有jar包或者由java.ext.dirs系统属性指定的jar包.
2.1.3应用程序类加载器
应用程序类加载器(System classLoader):又称为系统类加载器,主要用于加载CLASSPATH路径下我们自己写的类,它的父加载器为Ext ClassLoader
3.类加载器的双亲委派机制
3.1双亲委派机制介绍
当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。
3.2双亲委派机制的加载流程图

3.3双亲委派机制的作用
1.防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全.
2.保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了.
3.不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。
4.类被类装载器加载的过程
从类被加载到虚拟机内存中开始,到卸御出内存为止,它的整个生命周期分为7个阶段,加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸御(Unloading)。其中验证、准备、解析三个部分统称为连接。
