您的位置:首页 > 编程语言 > Java开发

Java学习笔记 - JVM加载类纯语言描述

2015-09-02 23:27 495 查看
JVM加载类到内存经过三个步骤,类加载,连接,初始化,这三个步骤统称为类加载或者类初始化。

一、类加载

类加载是指将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就

是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。(所以反射的时候可以先得到Class的一个实例)。

类的加载通过类加载器来完成,类加载器由JVM提供。通过使用不同的类加载器,可以从不同来源加载类的二进制数据:

1、 从本地文件系统来加载class文件

2、 从JAR包中加载class文件(如JDBC连接数据库)

3、 通过网络加载class文件

4、 把一个Java源文件动态编译、并执行加载

注:类加载器通常无须等到“首次”使用该类时才加载该类,Java虚拟机规范允许系统预先加载某些类。

二、类的连接

当类被加载后,系统会为之生成一个对应的Class对象,接着将会进入连接阶段,连接

阶段将会负责把类的二进制数据合并到JRE中。类连接分为下面三个阶段:

1、 验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。

2、 准备:类准备阶段则负责为类的静态属性分配内存,并设置默认初始值。

3、 解析:将类的二进制数据中的符号引用转换为直接引用。

三、类的初始化

类的初始化阶段,虚拟机负责对类进行初始化,主要就是对类的静态属性进行初始化。

在Java类中对静态属性初始化有两种方式:

1、声明静态值时指定初始值

2、使用静态块初始化为静态属性指定的值。

类的初始化一般包含下面几个步骤:

1、假如这个类还没有被加载和连接,程序先加载并连接该类。

2、假如该类的直接父类还没有被初始化,则先初始化其直接父类。

3、假如类中有初始化语句,则系统依次执行这些初始化语句。

注:当执行第二步的时候,系统对其父类的初始化也遵循上面步骤。所以JVM最优先初始化的总是java.lang.Object类。当程序主动使用任何一个类时,系统会保证该类以及所有父类都会被初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: