类加载机制与双亲委派机制简述

java程序运行之前会把编写的类装载到JVM中,分为加载、验证、准备、解析、初始化这五步:

  1. 加载,就是类加载器将类的.class文件的二进制读入到内存中,并且创建一个java.lang.Class对象。这个class对象提供了访问类中数据的接口。
  2. 验证,确保Class文件的字节流符合当前虚拟机的要求。
  3. 准备,给类变量分配内存,并设置初始值。
  4. 解析,把常量池中的符号引用换为直接引用。符号引用只是符合虚拟机规范的格式,直接引用才是指向目标的指针。
  5. 初始化,调用方法给静态变量赋值,执行静态代码块。在此之前会先执行父类的方法。如果类中没有静态变量或静态代码块,编译器可以不生成方法。

上面的第一步,类的加载是通过类加载器来完成的。类加载器包括启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器。他们分别涵盖了各自路径下的类的加载。启动类加载属于最顶层的类加载器。他们的层次关系就是双亲委派模型。双亲委派机制就是当某个类加载器接到加载类的请求的时候,首先会将任务委托给父类加载器,直至顶层类加载器,如果顶层类加载器无法完成此任务时,才由自己去加载此类。这就保证了类的唯一性,因为不同的加载器加载出来的类是不同的。也保证了java的运行机制,因为假如你自己编写了一个java.lang.Object类想要用,这时java程序出现了两个不同的Object类,程序将会混乱。其实这时无论哪个类加载器都会把这个任务交给启动类加载器去完成,然后它加载自己路径下的Object类保证了java程序中只有一个Object类。

你可能感兴趣的:(类加载机制与双亲委派机制简述)