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的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。...
  • dd864140130
  • dd864140130
  • 2015年10月30日 18:57
  • 8016

JVM - 虚拟机字节码执行过程。

虚拟机字节码执行引擎:概述,执行引擎:是jvm最核心的部分之一。和物理机相对应。物理机是指直接建立在处理器,硬件,指令集,操作系统层面。虚拟机是自己实现的,自己制定结构体系。执行过程: 1. 输入...
  • dashenxueba
  • dashenxueba
  • 2017年10月13日 16:55
  • 85

Java字节码运行浅析

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

JVM、Java编译器和Java解释器

JVM:Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在...
  • u012712087
  • u012712087
  • 2015年06月06日 16:57
  • 9592

java源文件编译后产生byte code (字节码)

Java字节码是Java源文件编译产生的中间文件java虚拟机是可运行java字节码的假想计算机 java的跨平台性也是相对与其他编程语言而言的先介绍一下c语言的编译过程吧先是C语言源程序 也就是c的...
  • luliang6754
  • luliang6754
  • 2017年04月17日 15:26
  • 1101

深入字节码 -- 计算方法执行时间

什么是字节码?java程序通过javac编译之后生成文件.class就是字节码集合,正是有这样一种中间码(字节码),使得scala/groovy/clojure等函数语言只用实现一个编译器即可运行在J...
  • wangpeng198688
  • wangpeng198688
  • 2016年02月29日 15:56
  • 696

java--简单实现代码提交校验

简单实现代码提交校验现在很多面试页面中或者ACM中会有代码提交校验你的结果正确性,因此我也打算自己简单实现一下这样的效果。我简单的讲下我的思路,执行外部传过来的代表一个Java代码,然后通过 进行编...
  • qq_38724295
  • qq_38724295
  • 2017年05月25日 18:55
  • 215

从类文件分析Java类装载过程<clinit>方法的调用和<init>的调用

类的具体加载过程,再到初始化; 从类文件字节码分析,类装载调用,到类员初始化调用,从init中可以看出构造方法总是在最后才调用的...
  • tiancai_lanyangyang
  • tiancai_lanyangyang
  • 2016年07月28日 19:54
  • 1528

深入理解JVM之Java字节码(.class)文件详解

Understanding bytecode makes you a better programmer 前言 作为一个Java开发者,对技术的追求而不仅仅停留在会用API,会写基本功能上,要想在...
  • weelyy
  • weelyy
  • 2018年01月04日 11:52
  • 95

JAVA字节码增强技术之ASM示例

ASM系列之一:初探ASM 一、什么是ASM    ASM是一个JAVA字节码分析、创建和修改的开源应用框架。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的BCEL和SERL...
  • u010039929
  • u010039929
  • 2017年04月11日 16:56
  • 511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java程序执行原理 字节码
举报原因:
原因补充:

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