1. 談談你對Java平臺的理解。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是解釋執行,這句話正確麼?blog
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工具;