java虚拟机对类型的处理过程
来源:互联网 发布:淘宝服装女新款 编辑:程序博客网 时间:2024/05/22 03:31
当java class文件被编译为标准的二进制class类型之后,这个二进制的类型数据被导入到java虚拟机时,进行了一系列的操作。
1、装载
把二进制形式的java类型读入到java虚拟机中,装载阶段又有三个必须的步骤:
1.1 通过该类型的完全限定名,产生一个代表该数据的二进制数据流。该数据流可能遵守java class文件格式,也可能遵守其它的格式。因为所有的java虚拟机实现必须能识别Java class文件格式,但是个别的实现也可以识别其它的二进制格式。
1.2 解析这个二进制数据流为方法区内的内部数据结构。
1.3 创建一个表示该类型的java.lang.Class类的实例。
有了类型的二进制数据之后,java虚拟机必须对这些数据进行足够的处理,然后才能创建类java.lang.Class的实例对象。因此虚拟机必须把这些二进制数据解析为与实现相关的内部数据结构。
装载步骤的最终产品就是这个class类的实例对象,它成为java程序与内部数据结构之间的接口。
2、连接
该过程分为三个步骤:
2.1 验证
确认类型符合java语言的语义,并且它不会危及虚拟机的完整性。例如:
a.检查final的类不能拥有子类。
b.检查final的方法不会被覆盖。
c.确保在类型和超类型之间没有不兼容的方法声明。
d.检查所有的常量池入口相互之间一致
e.检查常量池中的所有特殊字符串是否符合格式。
f.检查字节码的完整性。
2.2 准备
java虚拟机装载一个类和它的父类,并执行了一些选择性的验证之后,就到了验证阶段。
该阶段主要是java虚拟机为类变量分配内存,设置默认初始值,在初始化之前,类变量都没有被初始化为真正的初始值,因为在准备阶段是不会执行java代码的。在该阶段,虚拟机把给类变量新分配的内存根据类型设置为默认值,也可能为一些数据结构分配内存,这样做,有效地提高了程序运行的性能。
2.3 解析
解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,并把这些符号引用替换成直接引用的过程。这个步骤是可选的,也可能在初始化的时候进行。
3、初始化
该步骤为类变量赋予正确的初始值,也就是程序员希望这个类变量所具备的起始值。在java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化语句给出的。
初始化一个类包含两个步骤:
a.如果类存在直接超类的话,超类还没有被初始化,就先初始化超类。
b.如果类存在一个类初始化方法,就执行此方法。
- java虚拟机对类型的处理过程
- java虚拟机处理new的过程
- java虚拟机对代码的处理方式
- java虚拟机对byte、char和short的处理方式
- java对oracle 的clob类型处理
- java中对Date类型的一些处理
- 对枚举类型的处理
- java编程过程中对处理异常的心得
- java虚拟机类型的生命周期
- Java 虚拟机 GC 的过程
- java虚拟机的运行过程
- vxworks虚拟机的键盘处理函数过程
- Android Java 虚拟机与底层服务通讯过程中字符串的处理
- java虚拟机规范---java虚拟机对class文件的限制
- JDBC 对 oracle 日期类型的处理
- Struts1,ActionForm对Date类型的处理
- SQL对XML类型数据的处理
- Struts2对结果类型的处理
- MFC集合类学习笔记
- 服务器监控
- 大家帮我改正下这个程序吧!
- 利用 Masm 编写 引导盘 Boot Sector 显示 Hello World
- Web 地理定位(Geo-Location)知识大全
- java虚拟机对类型的处理过程
- 他人hibernate笔记
- C#中字节、字符、字符串的区别
- SQL Server 2005 不允许远程连接解决方法
- nor flash
- 用户故事、开发任务与工作流块任务数据模式
- my life will be brillant~
- asp.net缓存管理类
- 我和几个同学编的聊天工具界面(linux下用GTK编的,有几个bug,不能通信)