博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之深入JVM(4) - 由一个栈溢出的问题看Java类和对象的初始化续
阅读量:7224 次
发布时间:2019-06-29

本文共 731 字,大约阅读时间需要 2 分钟。

 现在我们来研究研究,Java类和对象的初始化,下面是一幅类的生命周期全景图,当然还是比较粗略.

 

从这幅图中,我们可以看出,类的装载到初始化主要分为3个阶段:

(1)类的装载(Load Class):

  • 通过该类型的完全限定名,产生一个代表该类型的二制制数据流。
  • 简单检查二进制数据,确保每一个部分都在正确位置,如魔数,文件不是太长或太短等.
  • 解析这个二进制数据流为方法区内的内部数据结构。
  • 创建一个表示该类型的java.lang.Class类的实例。

 

(2)类的连接(Link):

当类别加载后,就进入连接阶段。连接就是把已经读入到内存的类的二进制数据合并到虚拟机的运行时状态中.

连接有又分为三个阶段:

①验证(Verify):

确保被加载类的正确性。虽然在加载的时候已经验证,但虚拟机并不知道这个class到底是由谁创建的,是程序员还是黑客,经过验证可以保证程序的健壮性和

安全性 .

 

a.检查final的类不能拥有子类.

b.检查final的方法不能被覆盖.

c.确保在类型和超类型之间没有不兼容的方法声明(如两个方法拥有相同的名字,参数在数量,顺序,类型上都相同,但是返回类型不同).

d.检查所有的常量池入口相互之间一致(比如,一个Constant_String_info入口的string_index项目必须是一个Constant_Utf8_info入口的索引)

e.检查常量池中的所有特殊字符串(类名,字段名和方法名,字段描述符和方法描述符)是否符合格式.

f.检查字节码的完整性,防止JVM由于字节码不完整崩溃.

 
 
 

转载于:https://www.cnblogs.com/royi123/archive/2013/06/11/3132310.html

你可能感兴趣的文章
redis系列:通过日志案例学习string命令
查看>>
世界冠军之路:菜鸟车辆路径规划求解引擎研发历程
查看>>
Linux-sendmail
查看>>
关于BSTR的困惑
查看>>
什么时候使用HashMap?它有什么特点?
查看>>
框架名
查看>>
编译安装PHP
查看>>
插入透明背景Flash的HTML代码
查看>>
无标题
查看>>
我的友情链接
查看>>
Web前端入门学习(3)——CSS选择器
查看>>
DNS的搭建
查看>>
Apache/Nginx 访问日志分析脚本
查看>>
Curator的使用
查看>>
第五章 集合类型
查看>>
我的友情链接
查看>>
nagios监控服务出现FLAPPING状态时无法发出邮件报警信息
查看>>
数据库链接字符串方法
查看>>
The DCI Architecture: A New Vision of Object-Oriented Programming(一篇具有里程碑式意义的论文)...
查看>>
RIP路由配置实例V2
查看>>