21xrx.com
2024-11-22 09:53:15 Friday
登录
文章检索 我的文章 写文章
JAVA程序的执行流程
2023-06-12 01:37:35 深夜i     --     --
编译 加载 解释执行

Java是一种强类型的面向对象编程语言,其程序执行过程可以分为3个阶段: 编译,加载以及运行。本文将详细介绍Java程序的执行流程以及每个阶段之间的关系。

编译过程:将Java源代码转换成字节码

Java程序源文件以.java为拓展名,一般情况下,我们用文本编辑器来编写Java程序源文件。在编写完成Java程序后,需要通过Java编译器(Javac)将Java程序源文件转换成字节码形式的.class文件,以供JVM加载和运行。

下面是样例Java源代码:


public class HelloWorld {

  public static void main(String[] args) {

   System.out.println("Hello, World!");

  }

}

通过以下命令,可以将其编译成字节码文件:

sh

javac HelloWorld.java

执行上述命令会在当前目录下生成HelloWorld.class文件,这个文件包含了Java程序的字节码。

加载过程:将字节码装载到JVM

加载是将字节码文件装载到内存中的一系列操作。在这个过程中,JVM对字节码进行网络传输,解析字节码,并在虚拟机中生成对应的数据结构。在Java中,类的加载是在运行时进行的(即:动态加载)。

Java的类加载器( Class Loader )是Java运行时系统(Runtime System)的一部分,负责查找和加载类定义到虚拟机的内存中。在Java中,类加载器(Class Loader)将字节码转换为Java运行时数据结构。

下面是样例Java程序的加载:


ClassLoader classLoader = HelloWorld.class.getClassLoader();

Class helloWorldClass = classLoader.loadClass("HelloWorld");

以上代码将会装载HelloWorld.class字节码文件并定义一个HelloWorld类的java.lang.Class对象。

运行过程:将字节码送到解释器解释执行

当JVM装载一个类时,它会创建类的实例并为该实例分配空间,接着会执行静态初始化(Static Initialization)方法。在Java程序执行的过程中,当程序遇到用到类时,JVM会检查该类是否已被加载,如果没有,JVM就会加载该类,然后执行该类的代码。

在Java中,字节码被送到解释器进行解释执行,解释器将字节码转换为机器指令执行。Java虚拟机拥有解释执行和即时编译(Just In Time Compilation,JIT)两种执行方式。当Java虚拟机启动一个应用程序时,所有的字节码会被解释器解释执行。在运行时,Java虚拟机会对热点代码采用JIT编译器编译成机器码。

下面是样例Java程序的执行:


helloWorldClass.getMethod("main", String[].class).invoke(null, (Object) new String[0]);

以上代码调用了HelloWorld类的main方法并执行。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复