Java中的类加载机制

目录

    • 类加载器介绍
    • JVM类加载过程

类加载器介绍

 

首先类的加载是由类加载器完成的,类加载器包括:根加载器(Bootstrap)、拓展加载器(Extension)、系统加载器(System)和用户自定义类加载器。

从JDK1.2开始,类加载的过程就采用了双亲委派机制(PDM),双亲委派机制更好了保证了Java平台的安全性,所谓的双亲委派机制是指,JVM自带的Bootstrap是根加载器,其他加载器有且仅有一个父加载器。类的加载首先请求父类加载器进行加载,当父类加载器无能为力时才由其子类加载器进行加载。 下面说一下几个类加载器的作用。

Bootstrap:一般用native代码实现,负责加载JVM基础核心类库,也就是rt.jar。
Extension:它的父类加载器是Bootstrap,Extension类加载器的作用是从java.ext.dirs系统属性所指定的目录中加载类库。
System:System的父类加载器是Extension,它是应用最为广泛的类加载器,是用户自定义加载器的默认父类加载器。它的作用是从classpath环境变量或者是java.class.path系统属性所指定的目录中加载类。

 
 

JVM类加载过程

 

JVM类的加载是由类加载器和它的子类来实现的,类加载器是一个重要的Java运行时组件,它负责在运行时查找和装入类文件中的类。

由于Java的跨平台性,经过编译的Java程序并不是一个可执行文件,而是一个或者多个class文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备、解析)和初始化

类的加载是指把类的class文件读取到内存中,通常会创建一个字节数组读入class文件,然后产生与所加载类对应的Class反射对象。

加载完成后,这个Class反射对象还不完整,所以此时的类还不能使用。当类被加载后就进入了连接阶段,这一个阶段包括验证、为静态变量分配内存并设置默认的初始值的准备阶段和将符号引用替换为直接引用的解析阶段三个步骤。

最后JVM对类进行初始化。其他初始化阶段包括:
1、如果类存在直接父类并且这个父类还没有被初始化,那么就先初始化父类。
2、如果类中存在初始化语句,就依次执行这些初始化语句。

这就是Java类加载机制的全过程。

你可能感兴趣的:(JVM,Java,JVM,类加载机制)