没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
目 录
1. JVM技术
1.1 深入JVM——类型的生命周期(一) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 深入JVM——类型的生命周期(二) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 深入JVM——方法区 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 深入JVM——常量池 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5 深入JVM——类加载器(一) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.6 深入JVM——类加载器(二) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.7 深入JVM——垃圾收集器(一) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8 深入JVM——垃圾收集器(二) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.9 深入JVM——栈和局部变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
http://xtu-tja-163-com.javaeye.com
第 2 / 35 页
1.1 深入JVM——类型的生命周期(一)
发表时间: 2010-09-21
类型:类的描述信息,如此类有哪些局部变量、方法以及它的父类是什么等
类型存储地址:内存中的方法区
类型的生命周期的简单描述
类型生命周期过程: 装载——>连接——>初始化——>卸载
装载:把二进制的java类型(class文件)读入到java虚拟机中
连接:把读入的类型数据合并到虚拟机运行状态中去,连接包括三个子步骤:验证、准备和解析
初始化:给类型变量赋予适当的初始值
整个过程如下图所示:
下面对类的生命周期作个详细描述
类的装载
http://xtu-tja-163-com.javaeye.com
1.1 深入JVM——类型的生命周期(一)
第 3 / 35 页
如上所说,装载即是读入二进制数据流到内存中的方法区(指定Class文件内容),并形成一定的数据
结构(数据结构可理解为存储类中局部变量、方法等类属性的一种方式)。装载过程主要包括如下三个步
骤:
1.通过该类的完全限定名(全路径类名),到指定目录查找并读取对应的class文件,形成二进制数据流
2.解析读取的二进制数据流,在方法区类形成内部数据结构.(类中局部变量、方法、父类引用存储到方
法区指定地址等)
3.创建一个该类型的java.lang.Class类的实例
补充:1). 装载通过类装载器来完成的。类装载器可以是启动类装载器,也可以是用户自定义的类装载
器。
2). 类装载器并不一定需要等到某个类首次使用时才去装载他们,JVM规范允许类装载器缓存java类
的二进制表现形式,在预料某个类将要被使用时,类装载器可以预先装载它
3). 如果一个类在被预先装载的过程中遇到问题,出现异常,如遇到缺失或错误的class文件等,在装
载时,类装载器不会报告错误,只有等到程序主动使用该类是才会报告错误
连接阶段
连接里有分为三个子步骤,即验证、准备和解析
验证步骤确保了java类型数据格式的正确性,并且适合于JVM使用。不管怎样,JVM实现中的特定类
型检查一般都是在特定时间发生的,也许在验证阶段前作的处理,或在验证阶段后作的处理,但在逻辑
上,我们都把它们归属为验证。类装载时做的验证有以下几种(验证前的处理):
1.比如说,在装载过程中,JVM会解析二进制数据流以构成类型特定的数据结构,在解析期间,JVM
一般会检查二级制数据,以确保二进制数据的初始工作不会导致虚拟机崩溃,或检查二进制数据是否是
预期格式。虽然这些检查都是在装载期间完成,是在正式连接验证之前进行,但逻辑上它们仍属于验证
阶段
2.除了Object以为,每个类都有一个超类,在装载某个类时,它必须确保该类的超类也已经被装载
了。
在大部分JVM实现中,还有一种验证往往发生在正式验证阶段之后,那就是符号引用的验证。符号引
用的验证一般发生在连接的解析阶段,这时的处理大致是JVM通过保存在常量池中的符号来查找引用的
类、接口、字段或方法,把符号换成直接引用。但JVM搜索到一个符号时,必须保证该符号对应的类、
接口、字段或方法等必须存在。
那具体的在连接验证阶段作哪些验证呢?首先,确保各个类之间二进制兼容的检查:
1.检查final类不能拥有子类
2.检查final方法不能被覆盖
3.确保类型和超类型之间没有不兼容的方法声明(如方法名、参数相同,但返回值不同等)
准备阶段负责为装载的类型分配所需的内存,比如说为类变量分配内存,设置默认初始值,如int类型
http://xtu-tja-163-com.javaeye.com
1.1 深入JVM——类型的生命周期(一)
第 4 / 35 页
剩余34页未读,继续阅读
资源评论
- huacheng09022012-07-06讲得很细,对于了解JVM运行机制很有帮助!
唐小新
- 粉丝: 90
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功