码迷,mamicode.com
首页 > 其他好文 > 详细

《深入理解jvm》笔记---第七章

时间:2016-04-07 07:14:24      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

虚拟机类加载机制

1. 类的生命周期:

  加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析三个阶段统称为连接。

技术分享

其中,解析的阶段的时机并不一定。

2. Java类加载的时机:

 Java类加载的时机Java虚拟机规范并没有强调,但是对于初始化阶段,虚拟机规范则严格限定了有且只有5种情况必须立即对类进行初始化:

技术分享

技术分享

这五种场景的行为称为对一个类进行主动引用。

3. 类加载的过程:

  ①加载:在加载阶段,虚拟机需要做一下三件事情:

技术分享

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

 ⑴

技术分享

技术分享

技术分享

⑶字节码验证:字节码验证是整个验证过程最复杂的阶段,主要目的是通过对数据流和控制流的分析,确定程序语义是否是合法的、符合逻辑的。

技术分享

③准备:

  准备阶段是给类变量分配内存并设置类变量初始值的阶段,这些变量使用的内存都将在方法区中进行分配。首先需要强调的是,这时候进行内存分配的只有类变量(静态变量),不包括实例变量。其次,这里所说的初始值“通常情况”下是该类型数据的零值,假设一个类变量定义为:public static int value=123; ,那么value在准备阶段后的值是0而不是123,把value赋值为123是在类构造器<cinit>()方法中才开始做的,也就是在初始化阶段才开始执行。基本数据类型的零值如下:

技术分享

技术分享

④解析:解析阶段是把常量池内的符号引用替换为直接引用的过程。

⑤初始化:初始化是类加载过程的最后一个阶段,初始化阶段是执行类构造器<cinit>()方法的过程。

技术分享

技术分享

技术分享

技术分享

 技术分享

技术分享

技术分享

技术分享

《深入理解jvm》笔记---第七章

标签:

原文地址:http://blog.csdn.net/nlznlz/article/details/51082249

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!