每个java程序员都是从学习打印Hello,Word!开始的。那么你知道它是怎么跑起来的呢。
如图:
- 我们写的java代码通过javac编译成字节码文件。
- 使用JDK自带的java工具进行字节码文件的执行。
- JVM加载字节码文件,然后按照不同的操作系统将字节码文件解释成响应的机器码。
- 再将机器码交给操作系统,由操作系统进行机器码的执行,最后打印出hello,world!
那为什么相同的代码能在不同的操作系统上能跑起来呢?这就是java跨平台特性决定的。
我们在安装配置java的开发环境的时候,不同的操作系统要下载不同版本的jdk, 也就是不同的操作系统有不同的JVM实现,所以jdk是不夸平台的。
java跨平台的核心在于JVM,JVM对编码和操作环境进行了解耦,通过中间层jvm进行联系。
我们在windows、mac、linux等不同操作系统上写的相同的java源代码,
在不同操作系统上编译后的字节码是一致的,而同一段字节码,
在不同的jvm实现上会映射到不同系统的API调用从而实现代码不修改就可以跨平台运行。
java跨平台本质本质上是class字节码跨平台。
这也就是传说中的——
“Write once, run anywhere”
“一次编写,到处运行”