为什么说java程序是边解释边执行的.pdfVIP

为什么说java程序是边解释边执行的.pdf

  1. 1、本文档共1页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为什么说java程序是边解释边执⾏的 java应⽤程序的开发周期包括编译、下载、解释和执⾏⼏个部分。java编译程序将java源程序翻译为jvm可执⾏代码--字节码。这⼀编译过程 同c/c++的编译有些不同。当c编译器编译⽣成⼀个对象的代码时,该代码是为在某⼀特定硬件平台运⾏⽽产⽣的。因此,在编译过程中,编 译程序通过查表将所有对符号的引⽤转换为特定的内存偏移量,以保证程序运⾏。java编译器却不将对变量和⽅法的引⽤编译为数值引⽤, 也不确定程序执⾏过程中的内存布局,⽽是将这些符号引⽤信息保留在字节码中,由解释器在运⾏过程中创⽴内存布局,然后再通过查表来 确定⼀个⽅法所在的地址。这样就有效的保证了java的可移植性和安全性。运⾏jvm字节码的⼯作是由解释器(java命令)来完成的。解释执⾏ 过程分三部进⾏:代码的装⼊、代码的校验和代码的执⾏。装⼊代码的⼯作由类装载器(classloader)完成。类装载器负责装⼊运⾏⼀个 程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调⽤的类。当类装载器装⼊⼀个类时,该类被放在⾃⼰的名字空间中。除 了通过符号引⽤⾃⼰名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同⼀地址空间内,⽽所有从外 部引进的类,都有⼀个⾃⼰独⽴的名字空间。这使得本地类通过共享相同的名字空间获得较⾼的运⾏效率,同时⼜保证它们与从外部引进的 类不会相互影响。当装⼊了运⾏程序需要的所有类后,解释器便可确定整个可执⾏程序的内存布局。解释器为符号引⽤同特定的地址空间建 ⽴对应关系及查询表。通过在这⼀阶段确定代码的内存布局,java很好地解决了由超类改变⽽使⼦类崩溃的问题,同时也防⽌了代码对地址 的⾮法访问。随后,被装⼊的代码由字节码校验器进⾏检查。校验器可发现操作数栈溢出,⾮法数据类型转化等多种错误。通过校验后,代 码便开始执⾏了。java字节码的执⾏有两种⽅式:1.即时编译⽅式:解释器先将字节码编译成机器码,然后再执⾏该机器码。2.解释执⾏⽅ 式:解释器通过每次解释并执⾏⼀⼩段代码来完成java字节码程序的所有操作。通常采⽤的是第⼆种⽅法。由于jvm规格描述具有⾜够的灵 活性,这使得将字节码翻译为机器代码的⼯作具有较⾼的效率。对于那些对运⾏速度要求较⾼的应⽤程序,解释器可将java字节码即时编译 为机器码,从⽽很好地保证了java代码的可移植性和⾼性能。java宣称的⼀处编写随处运⾏就是由jvm来完成.在sun的⽹站上你可以下载到基 于各种cpu和各种操作系统的jdk和jre的下载版本,只要寻找到合适你使⽤的版本,以前你所编写的class⽂件copy到其他的机器上可以直接运⾏ JAVA,不需要再编译.其实j2se是⼀种规范,这种规范约定了其跨平台执⾏的所需要关注很多实现,基于该规范开发⼈员可以任意编写⾃⼰的 java代码⽽不需要关⼼这个程序可能在其他的机器和cpu上⽆法很好运⾏问题.其实你也可以看到ibm和weblogic都有基于j2se规范的⾃⼰实现 的java虚拟机.⽽且sun所宣称的不需要编译⽽可以直接⽤class⽂件在各个jvm上直接运⾏并不精确,博格曾经遇到过⽤sunjre开发的class⽂件 在ibmjre上有⼀个⾃动转换的过程,然后这个类可以很好的⼯作了,幸好这种情况是⾃动完成,否则我们⼜要陷⼊类似于各种cc++的版本编译器 兼容性问题中.以下下摘录了⼏个主要的概念:jvmjavavirtualmachine(java虚拟机),它是⼀个虚构出来的计算机,是通过在实际的计算机上 仿真模拟各种计算机功能来实现的。java虚拟机有⾃⼰完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。jvm屏蔽了与具 体操作系统平台相关的信息,使得java程序只需⽣成在java虚拟机上运⾏的⽬标代码(字节码),就可以在多种平台上不加修改地运⾏。java虚拟 机在执⾏字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执⾏。jrejavaruntimeenvironment(java运⾏环境),运⾏java程 序所必须的环境的集合,包含jvm标准实现及java核⼼类库。jsdkjavasoftwaredevelopmentkit,和jdk以及j2se等同。 jdkjavadevelopmentkit(java开发⼯具包):包括运⾏环境、编译⼯具及其它⼯具、源代码等,基本上和j2se等同。 j2mejava2microedition(java2精简版)api规格基于j2se,但是被修改为可以适合某种产品的单⼀要求。j2me使java程序可以很⽅便的应⽤ 于电话卡、寻呼机等⼩型设备,它包

文档评论(0)

A13865477551 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档