Java核心-01談談你對Java平臺的理解
今天我要問你的問題是,談談你對 Java 平臺的理解?“Java 是解釋執行”,這句話正確嗎?
典型回答
Java本身是一種面向對象的語言,最顯著的特性有兩個。一是所謂的“書寫一次,到處運行”,能夠非常容易獲得跨平臺能力;另一個就是垃圾收集,Java通過垃圾收集器回收分配內存,大部分情況下,程序員不需要自己操心內存的分配和回收。
我們日常接觸到 JRE( Java Runtime Environment) 或者 JDK( Java Development Kit)。JRE 也就是 Java 運行環境,包含了 JVM 和 Java 類庫,以及一些模塊等。而 JDK 可以看作是 JRE 的一個超集,提供了更多工具,比如編譯器、各種診斷工具等。
對於 “Java 是解釋執行” 這句話,這個說法不太準確。我們開發的 Java 的源代碼,首先通過 Javac 編譯成字節碼 (bytecode) ,然後,在運行時,通過 JVM 內嵌的解釋器將字節碼轉換為最終的機器碼。但是常見的 JVM,比如我們大多數情況使用的 Oracle JDK 提供的 Hotspot JVM, 都提供了 JIT (Just In Time)編譯器,就是常說的動態編譯器,JIT能夠在運行時將熱點代碼編譯成機器碼,這種情況下熱點代碼就屬於編譯執行,而非解釋執行了。
首先javac編譯器將源代碼編譯成字節碼。 |
然後jvm類加載器加載字節碼文件,然後通過解釋器逐行解釋執行,這種方式的執行速度相對 |
會比較慢。有些方法和代碼塊是高頻率調用的,也就是所謂的熱點代碼,所以引進jit技術, |
提前將這類字節碼直接編譯成本地機器碼。這樣類似於緩存技術,運行時再遇到這類代碼直 |
接可以執行,而不是先解釋後執行。 |
----
回歸正題,對於 Java 平臺的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,
包括泛型、Lambda 等語言特性;基礎類庫,包括集合、IO/NIO、網絡、並發、安全等基礎類
庫。對於我們日常工作應用較多的類庫,面試前可以系統化總結一下,有助於臨場發揮
或者談談 JVM 的一些基礎概念和機制,比如 Java 的類加載機制,常用版本 JDK(如 JDK 8)
致過程:加載、驗證、鏈接、初始化(這裏參考了周誌明的《深入理解 Java 虛擬機》,非常棒
的 JVM 上手書籍);自定義 Class-Loader 等。還有垃圾收集的基本原理,最常見的垃圾收集
器,如 SerialGC、Parallel GC、 CMS、 G1 等,對於適用於什麽樣的工作負載最好也心裏有
數。這些都是可以擴展開的領域,我會在後面的專欄對此進行更系統的介紹
當然還有 JDK 包含哪些工具或者 Java 領域內其他工具等,如編譯器、運行時環境、安全工具、
診斷和監控工具等。這些基本工具是日常工作效率的保證,對於我們工作在其他語言平臺上,同
樣有所幫助,很多都是觸類旁通的。
Java核心-01談談你對Java平臺的理解