Java程序执行原理 字节码

转载 2015年11月18日 16:34:51

http://www.cnblogs.com/royi123/tag/Java-%E5%AD%97%E8%8A%82%E7%A0%81/

Java程序执行原理


<o:p> </o:p>首先了解一下什么是计算机程序。计算机的作用在于它可以帮助人类完成计算功能,它由硬件和软件两部分组成,硬件包括中央处理器(CPU)、存储器、输入输出设备等,软件包括计算机程序、相关文档及数据。而计算机程序可以看作整个计算机系统的灵魂,它向计算机发出指令,指挥数据的输入、运算和输出,由于计算机程序的作用太重要了,因此好多人把软件和程序看成是一回事。

计算机程序是由一条条的指令组成的,但计算机所能接受的指令是由0和1构成的二进制数据,这叫做机器指令。让计算机算一下1+2等于几怎么办呢?只能向计算机输入类似于下面的代码了:

0011111 0000000 0000001 000000 00000010

当然了,具我的老师说,他的老师编写过这样机器指令程序,当时还没有键盘这种东西,首先根据程序中0、1的位置在纸带上打孔,然后把纸带送到机器上进行读入,然后……,试想一下,如果使用机器指令编写一个企业管理信息系统的话,得浪费多少木材资源啊,估计要毁坏一个大兴安岭。

好在对于我们来说噩梦已经结束了,如今编程语言已经从机器语言、汇编语言发展成接近人类语言的高级语言,Java也正是一种优秀的高级程序设计语言。

我们利用Java语言编写程序,实际上是编写程序的源代码(source code),程序设计者能看懂这些源代码,但计算机是不懂的,50多年来它们一直顽固不化,仍然只认得机器指令。

怎么才能让Java编写的程序能够在计算机上执行呢?

首先要利用Java编译器(JDK自带的工具)把它转换成一种叫做Java字节码(Byte Code)的东西,这个过程叫做编译,它可以检查程序中的错误。

Java字节码可以在计算机上运行了吗?还是不行,这种字节码只有Java虚拟机(JVM)才能读懂,也就是说一台计算机如果想运行Java程序的话,安装Java虚拟机是必不可少的。Java虚拟机连同一些必要的Java核心类库一起称作Java运行时环境,这是执行Java程序必不可少的工具,可以免费获得并安装。

运行Java程序时,Java虚拟机首先读入字节码、对节码进行正确性,针对客户计算机平台生成对应的机器指令,由客户机器执行机器指令。

<o:p> </o:p>
    好了,我们回顾一下Java程序开发及运行的过程。

现在假如你是一个优秀的Java程序设计师,老板交给你一个非常重要的任务:为客户编写一个Java应用系统,这个系统具有一项高级功能——计算两个数相加的和!

你该怎么办呢?

<!--[if !supportLists]-->1.              <!--[endif]-->编写满足需求的Java源程序,将源程序保存为以.java为扩展名的文件。例如Add.java。

<!--[if !supportLists]-->2.              <!--[endif]-->利用JDK提供的javac命令将源文件编译为字节码文件,例如输入:

javac Add.java

java编译器可以生成名称为Add.class的字节码文件。

<!--[if !supportLists]-->3.              <!--[endif]-->在装有Java运行环境的机器上执行Add.class,例如输入:

java Add

其他的工作交给Java虚拟机完成。

<!--[if !supportLists]-->4.              <!--[endif]-->你的心里暗暗想:Java虚拟机者是个好东东。

上面介绍的是手工编译、执行Java程序的过程,目前有很多优秀的开发工具用于开发Java应用程序(如Eclipse、NetBeans、Jbuilder等),编写完代码后可以通过菜单项或快捷按钮进行编译、运行程序。但我们应该了解:在图形化界面的背后还是调用了javac和java命令。



Java字节码的执行需要经过以下3个步骤: 

(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。在此过程需要检验该类文件是否符合类文件规范。 

(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。 

(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。 

注意: 

Java虚拟机采用“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间以外的内存。如果是Applet程序,还不允许访问客户端机器的文件系统。 

相关文章推荐

深入JVM字节码执行引擎

我们都知道,在当前的Java中(1.0)之后,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。...

Java类的加载过程

编译:即javac的过程,即把.java文件编译成.class文件,即编译成字节码文件,同时做一些类型以及格式的检查。      类只有在要运行的时候才会被加载进JVM,即编译后只有需要到这...
  • zcxwww
  • zcxwww
  • 2016年05月06日 12:50
  • 3177

Java学习之动态编译--字节码操作--javassist类库

一、字节码操作 Java动态性的两种常见实现方式: 字节码操作 反射 运行时操作字节码可以让我妈实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改 新的属性/方法) 优势: 比反射...

使用ASM操作Java字节码,实现AOP原理

本文通过一个的例子来实现:使用ASM动态生成Java字节码文件(.class) 或者 加载字节码后动态修改字节码,添加我们需要执行的代码。年底了,也没心情抠字了,把写demo包含的几个类代码直接贴出来...
  • catoop
  • catoop
  • 2016年02月03日 15:54
  • 9446

深入理解JVM-字节码执行引擎

前面我们不止一次的提到,Java是一种跨平台的语言,为什么可以跨平台,因为我们编译的结果是中间代码—字节码,而不是机器码,那字节码在整个Java平台扮演着什么样的角色的呢?JDK1.2之前对应的结构图...

Java字节码运行浅析

明白Java代码是如何编译成字节码并在JVM上运行的非常重要,这有助于理解程序运行的时候到底发生了些什么。理解这点不仅能搞清语言特性是如何实现的,并且在做方案讨论的时候能知道相应的副作用及权衡利弊。 ...

java 程序执行原理

java  应用可以打包成jar 格式, jar格式其实只是一种很普通的压缩格式,与zip格式一样,只不过是它会在压缩文件的目录结构中增加一个META-INF/ MANIFEST.MF 的元文件。  ...

Java字节码---解释执行

Java安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。字节码是一套在Java运行时系统执行的高度优化的指令集,该Java运行时系统称为Java虚拟机...

java为什么可以实现跨平台(即实现一次编译,到处执行,此处的平台主要指不同的操作系统),而C/C++却不行?

对于计算机而言,只认识一种语言,就是由0,1代码组成的机器语言,所以我们使用C/C++编写的程序计算机是看不懂的,因此必须将C/C++高级语言翻译成由0,1代码组成的机器语言,担任翻译工作的就是编译程...

Java虚拟机之字节码执行引擎

1 概述虚拟机执行引擎是Java虚拟机最核心的部分之一,其目的是实现:输入字节码文件,将字节码解析或等效处理后,执行并输出结果。其中两种执行方式:解释执行和编译执行。2 运行时栈帧结构栈帧(Stack...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java程序执行原理 字节码
举报原因:
原因补充:

(最多只允许输入30个字)