Java是如何运行一个程序的?

一、Java 程序运行总体流程

(一)启动 JVM 并加载核心库

当在命令行输入 java 命令运行 Java 程序时,操作系统会启动 Java 虚拟机(JVM)。JVM 启动后,利用引导类加载器加载 Java 核心库,像 java.langjava.util 等基础包中的类会在此时被加载。此过程由 JVM 底层机制完成,不依赖 Java 线程。

(二)创建主线程并加载入口类

  1. 主线程创建:JVM 完成初始化操作(包括核心库加载)后,会创建一个名为 main 的主线程,该线程的主要任务是执行程序的入口函数 main 方法。
  2. 入口类加载:主线程会先定位包含 main 方法的类,接着启动该类的加载过程。

(三)执行 main 方法及动态加载其他类

  1. main 方法执行:包含 main 方法的类完成加载和初始化后,主线程开始执行 main 方法中的代码。
  2. 按需加载其他类:在 main 方法代码执行过程中,若遇到对其他类的引用,JVM 采用 “按需加载” 策略。即先检查该类是否已加载到虚拟机中,再根据情况进行处理。

二、类加载过程详细解析

(一)加载(Loading)

  1. 通过类的全限定名查找对应的字节码文件(.class 文件),并将其读取为二进制字节流。
  2. 在堆内存中创建一个代表该类的 java.lang.Class 对象。

(二)验证(Verification)

对加载进来的字节码进行格式、语义等方面的检查,确保其符合 Java 虚拟机规范,避免不安全或错误的代码影响 JVM 正常运行。

(三)准备(Preparation)

为类的静态变量分配内存,并设置初始默认值。例如,int 类型的静态变量会初始化为 0。

(四)解析(Resolution)

将常量池中的符号引用替换为直接引用,使得 JVM 可以直接访问到类、方法、字段等资源。

(五)初始化(Initialization)

执行类的静态代码块和静态变量的显式赋值操作。此阶段会按照代码中定义的顺序依次执行静态代码,完成类的初始化工作。

你可能感兴趣的:(java,开发语言)