Java学习笔记 - JVM加载类纯语言描述
来源:互联网 发布:sql 约束类型 编辑:程序博客网 时间:2024/06/05 23:38
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类。当程序主动使用任何一个类时,系统会保证该类以及所有父类都会被初始化。
- Java学习笔记 - JVM加载类纯语言描述
- JVM类加载学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入Java虚拟机JVM类加载初始化学习笔记
- JVM学习笔记(1)----Java类的加载机制
- JVM学习笔记之-JAVA语言概述.
- jvm学习笔记(6)类加载机制
- JVM类加载初始化学习笔记(转载)
- JVM类加载原理学习笔记
- JVM类加载原理学习笔记
- JVM类加载初始化学习笔记
- JVM类加载原理学习笔记
- JVM类加载原理学习笔记
- uva 1364 - Knights of the Round Table(二分图+强连通)
- 绘图与动画之使用CAKeyframeAnimation实现仿WP水滴加载动画
- 第十一章,图像处理和文本认证
- Hello world!
- void和void*详解
- Java学习笔记 - JVM加载类纯语言描述
- Unity3d触摸屏手势控制镜头旋转卡位到目标对象
- 使用位逻辑运算来实现位向量
- 寓教于乐 11款最适合教儿童编程的学习工具
- iOS-开发日志-UITextView介绍
- hdu2089||hdu3555简单数位DP
- 1030. 完美数列(25)
- jQuery插件开发全解析
- uva 1108 - Mining Your Own Business(强连通)