总结:使用JDK(调用JAVA API)开发JAVA程序后,通过JDK中的编译程序(javac)将Java程序编译为Java字节码,在JRE上运行这些字节码,JVM会解析并映射到真实操作系统的CPU指令集和OS的系统调用。

3 JVM原理

Java 体系结构介绍:

Class Loader(类加载器):用于装载.class文件。

Execution Engine(执行引擎):用于执行字节码或者本地方法。

运行时数据区:方法区、堆、java栈、pc寄存器、本地方法栈。

JVM生命周期介绍:

Java实例对应一个独立运行的Java程序(进程级别)

1.启动。启动一个Java程序,一个JVM实例就产生。拥有public static void main(String[] args)函数的class可以作为JVM实例运行的起点。

2.运行。main()作为程序初始线程的起点,任何其他线程均可由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM使用,程序可以指定创建的线程为守护线程。

3.消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出。

JVM执行引擎实例则对应了属于用户运行程序线程它是线程级别的。

Java类加载器:

Java加载类的过程:

1.装载(loading):负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名、ClassLoader完成类的加载。因此,标识一个被加载了的类:类名 + 包名 + ClassLoader实例ID。

2.链接(linking):负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口。