二、JVM的类加载子系统
类加载子系统的总体架构:
1.类加载子系统的作用
2.类的加载过程
一个简单的包含main方法的类的字节码文件加载过程:
2.1 加载阶段
2.2 链接阶段
2.3 初始化阶段
一个类加载过程的案例分析:首先JVM要调用main方法,就会先加载ClinitTest1这个类,执行打印的方法时,发现需要使用到Son这个类,就会去加载Son这个类,加载Son这个类的时候,会去加载Son的父类Father类,在加载Father这个类的时候,在链接的准备阶段将A初始化为0,在初始化阶段赋值为1再赋值为2。所以回到Son这类的时候,A=2.
**注意:**在JVM进行类加载的时候,是线程安全的,也就是一个类在进行加载的时候,其他线程也想加载该类就会被阻塞,并且加载之后不会重复加载,也就是只会加载一次。
3、类加载器的分类
3.1引导类加载器(启动类加载器,BootStrap)
加载的范围:java的核心类库都是使用引导类进行加载的。例如:String类、Object类、HashMap类等等。
引导类加载器能够加载的包:
3.2 扩展类加载器
扩展类加载器能够加载的路径:
3.3 应用程序类加载器(系统类加载器)
3.4 用户自定义类加载器
3.5 ClassLoader抽象类的说明
4、双亲委派机制
5、沙箱安全机制
6、其他