Java虚拟机--类加载基础

 

类加载概念:

虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

类加载时机:

类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Useing)和卸载(Unloading)七个阶段。

类加载过程:

加载:是“类加载”过程的一个阶段。

需要完成三件事:

(1)通过一个类的全限定名来获取定义此类的二进制字节流。

(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。

(3)在Java堆中生成一个java.lang.class对象,作为方法区的数据访问入口。

验证:目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要 求而不会危害虚拟机自身的安全。

需要完成四个阶段:

(1)文件格式的验证

(2)元数据验证

(3)字节码验证

(4)符号引用验证

准备:正式为类变量分配内存并设置类变量初始值的阶段,这些内存将在方法区中分配。

仅分配类变量(static修饰),而且通常情况下是零值(例如:final修饰除外)。

解析:是虚拟机将常量池内的符号引用替换为直接引用的过程。

符号引用:以一组符号来描述所引用目标,与虚拟机实现内存无关,引用目标不一定已经 加载到内存。

直接引用:可以是直接指向目标的指针、相对偏移量或者能间接定位目标的句柄,与虚拟 机的内存布局有关,同一符号引用在不同虚拟机实例翻译直接引用一般不同,有了直接引 用,引用目标必定已经在内存中存在。

解析动作主要针对四类符号引用进行:

(1)类或接口的解析

(2)字段解析

(3)类方法解析

(4)接口方法解析

初始化:类加载过程最后一步,除了类加载过程可以通过自定义类加载器参与,其余动作 完全由虚拟机主导和控制,初始化阶段,才真正开始执行类中定义的Java程序代码。

在准备阶段,变量已经赋值一次系统要求的初始值,初始化阶段,则是根据程序员通过程 序制定机制去初始化类变量和其他资源,可以说:初始化阶段是执行类构造器<clinit>() 法过程。

阅读更多
个人分类: Java虚拟机
想对作者说点什么? 我来说一句

Java虚拟机类加载顺序

2010年03月15日 527KB 下载

Java虚拟机JVM类加载学习笔记

2013年01月16日 264KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭