JAVA虚拟机(JVM)的运行过程

JAVA虚拟机(JVM)的运行过程

   讲师:张孝祥  文档整理:符亮

JAVA编译程序(JAVAC.EXE)将JAVA源程序(*.JAVA)翻译为JVM可执行代码-JAVA字节码(JAVA BYTECODE)这一编译过程同C/c++的编译有些不同,当C编译器编译成一个对象的代码时,该代码是为在某一特定硬件平台而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。JAVA编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中(*.class)中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了JAVA的可移植性和安全性。
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(CLASS LOADER)来完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的所继承的类和被调用的类,当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其它办法可以相互影响。在本
地计算机的所有类都在同一地址空间内,而所有从外部引进的类,都有自己独立的一个名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们和外部引进的类不会相互影响。当装入运行程序需要的所有类后,解释器便可以确定整个可执行程序的内存布局,解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,JAVA很好的解决了由超类改变
而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
随后,被装入的代码由字节码校验器进行检查。检验器可发现操作数栈溢出、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。

JAVA字节码的执行请参考本站的JAVA教程:

http://blog.csdn.net/fuliang_itonline/archive/2007/04/11/1559960.aspx 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值