1、首先说一下JDK、JRE和JVM的关系
JDK(Java Development Kit)是 Java 语言的软件开发工具包,它包含有JRE、编译器和调试器等用于程序开发的文件。抛开JRE不谈,它主要能干编译和调试两件事。
JRE(Java Runtime Environment)即java运行环境,它包含了JVM及java的核心类库。抛开JVM不谈,它主要提供一些必要的运行文件。
JVM(Java Virtual Machine)即Java虚拟机,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java的解释器就包含在JVM中。JVM有自己完善的硬件架构,如处理器、堆栈(Stack)、寄存器等,还具有相应的指令系统(字节码就是一种指令格式)。
它的主要功能是,将字节码文件class文件解释成对应平台机器码并执行。不同的操作系统因为他们的机器码不同所以他们的JVM不同。
所以他们的关系就可以用下图来表示:
2、Java程序运行机制
Java的运行主要分两步:先编译再解释执行
(1)先通过“编译器”将Java源程序(.java)编译成Java字节码文件(.class)(字节码文件采用结构中立的中间文件格式)
(2)通过不同的虚拟机(JVM)将字节码文件解释为机器语言并执行
用图来表示就是:
3、Java跨平台原理
因为程序都需要编译生成字节码文件(.class),而字节码文件生成后是结构中立的中间文件格式,即可看作是无关于源文件(.java)也无关于虚拟机(JVM)的文件,这样在不同机器上执行同一份.class文件他们的执行结果也相同。
用图表示就是: