Java中程序的执行过程

转载自:http://www.cnblogs.com/XiHua/p/3521319.html

1、java源文件的编译过程

  java编译程序将java源程序翻译为JVM可执行代码---字节码。java编译器不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了java的可移植性和安全性。

2、java解释器的执行过程

  运行JVM字节码的工作是由解释器来完成的。解释器执行过程分三步:【代码的装入、代码的校验和代码的执行】。

  装入代码的工作由”类装载器“(class loader) 完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类。类之间没有其他办法可以影响其他类。在本台计算机上所有类都在同一地址空间内,而所有从外部引进来的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与外部引进来的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用特定的地址空间建立对应关系以及查询表。通过在这一段确定代码的内存布局,java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。

  随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。

3、java字节码的两种执行方式

(1)即时编译方式(just in time):解释器先将字节码编译成机器码,然后再执行该机器码。

(2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。

  通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将java字节码即时编译为机器码,从而很好地保证了java代码的可移植性和高性能。

【Java代码的可移植性:http://jingyan.baidu.com/article/148a19216eef954d71c3b12a.html

4、JVM规格描述

  JVM 的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对java可执行代码,即字节码(bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及java类文件中java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。java的设计者希望给开发人员以随心所欲使用java的自由。

  JVM是为java字节码定义的一种独立于具体平台的规格描述,是java平台独立性(跨平台)的基础。java平台独立是通过JVM实现的。JVM(java虚拟机)不是跨平台的, sun公司针对不同的平台分别设计不同的JVM。

5、java程序执行与C/C++程序执行的对比、分析

  如果把java源程序想象成我们的C++源程序,java源程序编译后生成的字节码就相当于C++源程序编译后的80x86的机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,java解释器相当于80x86CPU。在80x86CPU上运行的是机器码,在java解释器上运行的是java字节码。

java解释器相当于运行java字节码的”CPU“,但该”CPU“不是通过硬件实现的,而是通过软件实现的。java解释器实际上就是特定平台下的一个应用程序。只要实现了特定平台下的解释器程序,java字节码就能通过解释器程序在该平台下运行,这是java跨平台的根本。

当前,并不是所有的平台下都有相应的java解释器程序,这也是java并不能在所有的平台下都能运行的原因,它只能在已经实现了java解释器程序的平台下运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值