Part I: 走進Java
第一章 走進Java
概述
優點:
結構嚴謹,物件導向的程式設計語言;
擺脫硬體平台的束縛,實現了“一次編寫,到處運行”的理想;
提供相對安全的記憶體管理和訪問機制,避免了絕大部分的記憶體流失和指標越界問題;
實現了熱點代碼檢測和運行時編譯及最佳化;
有一套完善的應用介面程式介面以及無數的第三方類庫;
Java技術體系
JDK是用於支援Java開發的最小環境,包含Java程式設計語言、Java虛擬機器、Java API類庫三部分;
JRE是支援Java程式啟動並執行標準環境,包含Java API類庫中的Java SE API 子集和Java虛擬機器兩部分;
按照Java技術關注的重點業務領域來劃分,Java技術體系可分為4個平台:
Java Card:支援Applets(Java小程式)運行在小記憶體裝置(如智慧卡)上的平台;
Java ME(Micro Edition):支援Java運行在移動終端上的平台;(今有Android SDK)
Java SE(Standard Edition):支援面向案頭級應用的Java平台;
Java EE(Enterprise Edition):支援使用多層架構的企業級應用(如ERP、CRM應用)的Java平台;
Java發展史
JDK 1.0:Java虛擬機器、Applet、AWT等;
JDK 1.1:JAR檔案格式、JDBC、JavaBeans、RMI、內部類、反射;
JDK 1.2:拆分為J2SE/J2EE/J2ME、內建JIT編譯器、一系列Collections集合類;
JDK 1.3:JNDI服務、使用CORBA IIOP實現RMI通訊協定、Java 2D改進;
JDK 1.4:Regex、異常鏈、NIO、日誌類、XML解析器和XSLT轉換器;
JDK 1.5:自動裝箱、泛型、動態註解、枚舉、可變參數、遍曆迴圈、改進了Java記憶體模型、提供了java.util.concurrent並發包;
JDK 1.6:提供動態語言支援、提供編譯API和微型HTTP伺服器API、虛擬機器最佳化(鎖與同步、垃圾收集、類載入等);
JDK 1.7:G1收集器、加強對Java語言的調用支援、升級類載入架構;
JDK 1.8:Lambda運算式、函數式介面等;
Java虛擬機器發展史
Sun Classic/Extract VM:Classic VM是第一款商用虛擬機器,純解析器方式來執行Java代碼,如果要使用JIT編譯器就必須進行外掛,解析器和編譯器不能配合工作,編譯器執行效率非常差;Exact VM是Sun虛擬機器團隊曾在Solaris平台發布的虛擬機器,支援兩級即時編譯器、編譯器和解譯器混合工作、使用準確記憶體管理(虛擬機器可以知道記憶體中某個位置的資料具體是什麼類型),但很快就被HotSpot VM所取代;
Sun HotSpot VM:Sun JDK和OpenJDK所帶的虛擬機器,目前使用範圍最廣;繼承了前兩款虛擬機器的優點,還支援熱點代碼探測技術(通過計數器找出最具編譯價值的代碼);2006年Sun公司宣布JDK包括HotSpot VM開源,在此基礎上建立OpenJDK;
Sun Mobile-Embedded VM/Meta-Circular VM:一些Sun開發的面對移動和嵌入式發布的和實驗性質的虛擬機器;
BEA Jrockit/IDM J9 VM:JRockit VM曾經號稱是世界上最快的Java虛擬機器,專註於伺服器端應用,不包含解析器實現,全部靠即時編譯器編譯執行;J9 VM定位於HotSpot比較接近,主要目的是作為IBM公司各種Java產品的執行平台;
Azul VM/BEA Liquid VM:特定硬體平台專有的高效能虛擬機器;
Apache Harmony/Google Android Dalvik VM:Apache Harmony包含自己的虛擬機器和Java庫,但沒有通過TCK認證;Dalvik VM是Android平台的核心組成部分,其並沒有遵循Java虛擬機器規範,不能直接執行Class檔案,使用的是寄存器架構而不是JVM常見的棧架構;
Microsoft JVM及其他:微軟曾經是Java技術的鐵杆支援者,開發過Windows下效能最好的Java虛擬機器,但後來被Sun起訴終止其發展;
展望Java技術的未來
模組化
混合語言:通過特定領域的語言去解決特定領域的問題
多核並行
進一步豐富文法
64位虛擬機器