# 跨平台特性
1. java语言和其他编程语言在本质上没什么区别;
2. java的跨平台特性与Java虚拟机的存在密不可分;
3. Java程序从源代码到运行的三个阶段:编码——编译——运行——调试;
4. Java在编译阶段则体现了跨平台的特点
`并不是说Java语言可以跨平台,而是在不同的平台都有可以让Java语言运行的环境`
> 编译过程大概是这样的:
> 1、首先是javac将Java源代码转化成.CLASS文件字节码,这是第一次编译(.class文件就是可以到处运行的文件);
> 2、然后Java字节码会被转化为目标机器代码,这是由JVM来执行的,即Java的第二次编译。
*****
# 解析和编译运行方式并存
1. 解析:.class文件经过JVM内嵌的解析器解析执行
2. 编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码,并进行各种层次的优化
3. AOT编译器: Java 9提供的直接将所有代码编译成机器码执行
> 在编译时,Java源代码经过Javac编译成.class文件
> 在运行时,经JVM解析或编译运行(JVM 会通过类加载器(Class-Loader)加载.class文件,解释或者编译执行)