分析java程序的运行过程

来源:互联网 发布:java中cas登录 编辑:程序博客网 时间:2024/05/18 01:08

        Java应用程序开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码(字节码),这一编译过程与c/c++的编译有些不同,当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的;而java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保存在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效的保证了java的可移植性和安全性

那么,一个java程序的运行过程到底是怎样的呢,下面我们来通过一个简单的java程序来说明,

1.首先,先写一个java类为 HelloWorld.java 源文件如下:

public class HelloWorld{

    public static void main(String[] args){

        System.out.println("Hello world!");

    }

}

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

装入代码的工作由“类装载器(class loader)”来完成,类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调用的类。

装入完成之后接下来,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出、非法数据类型转化等多种错误。通过校验之后,代码就开始执行了。

2. 上述代码在经过java编译器编译之后,会得到一个HelloWorld.class的二进制字节码文件,即如图中的 “程序的类文件”,另外在该程序中调用了Java API中的java.lang.System类的静态成员out及其静态方法 public static void println(String string).然后让虚拟机来执行这个HelloWorld,具体过程如下所示。

(1)虚拟机在classpath中找到 HelloWorld.class。

(2)虚拟机中的解释器会把HelloWorld.class解释成机器码。

(3)把解释后的机器码交由 execution engine(执行引擎)执行。

(4)执行引擎调用 native method(本地方法)在Host operating system(宿主操作系统)的显示器的指定位置输出指定的字符串。

(5)此时就可以在控制台中看到输出“Hello World!”的结果。

下图是程序的运行过程:


                                           

                                                                      

0 0
原创粉丝点击