1.談談你對Java平台的了解
Java 本身是一種面向對象的語言,最顯著的特性有兩個方面,一是所謂的“一次編譯,到處運作”(Compile once,run anywhere),能夠非常容易地擷取跨平台能力;另外就是垃圾收集(GC,Garbage Collection),Java 通過垃圾收集器(Garbage Collector)回收配置設定記憶體,大部分情況下,程式員不需要自己操心記憶體的配置設定和回收。
“一次編譯,到處運作”說的是Java語言跨平台的特性,Java的跨平台特性與Java虛拟機的存在密不可分,可在不同的環境中運作。比如說Windows 平台和 Linux 平台都有相應的JDK,安裝好JDK後就有了 Java 語言的運作環境。其實 Java 語言本身與其他的程式設計語言沒有特别大的差異,并不是說 Java 語言可以跨平台而是在不同的平台都有可以讓 Java 語言運作的環境而已,是以才有了 Java 一次編譯,到處運作這樣的效果。
嚴格的講,跨平台的語言不止Java一種,但是Java是較為成熟的一種。“一次編譯,到處運作”這種效果跟編譯器有關。程式設計語言的處理需要編譯器和解釋器。Java虛拟機和DOS類似,相當于一個供程式運作的平台。
程式從源代碼到運作的三個階段:編碼——編譯——運作、調試。Java在編譯階段則展現了跨平台的特性。編譯過程大概是這樣的:首先将Java源代碼轉化成 .class 位元組碼檔案,這是第一次編譯;.class 位元組碼就是可以到處運作的檔案,然後 .class 位元組碼會被轉化成目标機器碼,這是由JVM 來執行的,即Java 的第二次編譯。
“到處運作”的關鍵和前提就是JVM,因為在第二次編譯中 JVM 起着關鍵作用。在可以運作 Java 虛拟機的地方都内含着一個JVM作業系統。進而使 Java 提供了各種不同平台上的虛拟機制,是以實作了“到處運作”的效果。需要強調的一點是,Java并不是編譯機制,而是解釋機制。Java 位元組碼的設計充分考慮了JIT 這一即時編譯方式,可以将位元組碼直接轉化成高性能的本地機器碼,這同樣是虛拟機的一個構成部分。
Java代碼編譯是由Java源碼編譯器來完成,流程圖如下所示:

Java位元組碼的執行是由JVM執行引擎來完成,流程圖如下所示:
(ps: 摘自Java核心技術36講)