1. 談談你對Java平台的理解。

Java是一種面向對象的語言,最顯著的特性有兩個方面:
一個就是一次編譯,到處運行(Write once, run anywhere),能夠非常容易的獲得跨平台能力;
另一個就是垃圾收集(GC,Garbage Collection),Java通過GC回收分配內存,大部分情況下程序員不需要操心內存的分配和回收;
什么是JRE(Java Runtime Environment)/JDK(Java Development Kit)?
JRE:java運行環境,包含了JVM,Java內褲,以及一些模塊;
JDK:JRE的一個超集,提供了更多工具,比如編輯器、各種診斷工具;
JVM < JRE < JDK
2. Java是解釋執行,這句話正確么?

Java是解釋執行,這個說法不太准確。我們開發java的源代碼,通過Javac編譯成字節碼,然后在運行時通過JVM內嵌的解釋器將字節碼轉換為最終的機器碼。
但是常見的JVM(Oracle JDK 提供的Hotspot JVM),都提供了動態編譯器JIT(Just in Time),JIT能夠在運行時將熱點代碼編譯成機器碼,這種情況下部分熱點代碼就屬於編譯執行,而不是解釋執行。
如圖Java是分為編譯器和運行時。java的編譯生成的是字節碼,而不是可以直接執行的機器碼。Java通過字節碼和JVM這種跨平台的抽象,屏蔽了操作系統和硬件的細節,這也是“一次編譯,到處執行的基礎”。
JVM啟動時可以指定不同的參數對運行模式進行選擇,例如:
-Xmixed:解釋和編譯混合模式;
-Xint:只進行解釋執行,不對代碼進行編譯,拋棄JIT可能帶來的性能優勢;
-Xcomp:關閉解釋器或者叫做最大優化級別。但這種模式並不一定是最高效的,他會導致JVM啟動變慢,同時有些JIT編譯器優化方式,如分支預測,如果不進行profiling,往往不能進行有效優化。
AOT(Ahead-of-Time Compilation):直接將字節碼編譯成機器代碼,避免了JIT預熱等各方面的開銷。在Oracle JDK 9 引入了實驗性的AOT特征,並增加了新的jaotc工具;
