# 跨平臺特性
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文件,解釋或者編譯執行)