上篇《Java平台體系:組成結構 運行機制 JRE/JDK/OpenJDK Java SE/ EE/ ME Java優點》我們對Java平台體系有了一個全面的瞭解。
下面先簡單介紹Java發展曆史,然後在整個的發展史的基礎上,抽取幾個關注點的時間軸,分別介紹各JDK版本的新特性、JVM發展、以及Java技術的應用發展。 1、Java發展曆史簡介
1995年5月23日,互連網興起,Oak改名為Java,Java語言誕生,提出"一次編譯,到處運行";
1996年1月23日,第一個JDK--JDK1.0誕生,技術代表:純解釋執行的Java虛擬機器(Sun Classic VM)、Applet、AWT等;
1996年4月,10個最主要的作業系統供應商申明將在其產品中嵌入Java技術;
1996年9月,約8.3萬個網頁應用了Java技術來製作;
1997年2月19日,JDK1.1發布,技術代表:JAR檔案格式、JDBC、JavaBeans、RMI,Java重要文法:內部類(Inter Class)和反射(Reflection)等;
1997年9月,JavaDeveloperConnection社區成員超過十萬;
1998年2月,JDK1.1被下載超過2,000,000次;
1998年12月4日,JDK1.2發布,拆分三個版本:標準版(J2SE)、企業版(J2EE)和微型版(J2ME),技術代表:EJB、JavaPlug-in、javaIDL、Swing等,JVM內建JIT,Java文法/API:strictft關鍵字、Collections集合類等;
1999年4月27日,HotSpot虛擬機器發布,作為JDK1.2附加程式;
2000年5月8日,JDK1.3發布,內建預設HotSpot虛擬機器,改進主要在一些類庫:JNDI、RMI、Timer API、Java 2D API等;
2001年6月5日,NOKIA宣布,到2003年將出售1億部支援Java的手機;
2002年2月13日,JDK1.4發布,走向成熟的版本,發布新特性:Regex、異常鏈、NIO、日誌類、XML解析器和XSTL轉換器等;
2004年9月30日,JDK1.5(JDK5,公開版本號碼)發布,java文法新特性:自動裝箱、泛型、動態註解、枚舉、可變長參數、遍曆迴圈(foreach迴圈)等,Java API加入:java.util.concurrent並發包等,改進JVM記憶體模型(JMM);
2006年11月13日,SUN開源JDK為OpenJDK,兩者代碼基本相同;
2006年12月11日,JDK6發布,J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME,改進:提供動態語言支援(內建js引擎)、提供編譯API和微型HTTP伺服器API等,JVM改進:鎖與同步、垃圾收集、類載入等演算法;
2009年4月7日Google App Engine開始支援Java;
2009年04月20日,Oracle74億美元收購Sun。取得java的著作權;
2011年7月28日,Oracle發布JDK7的正式版,主要改進:提供新的G1收集器,加強對非Java語言的調用支援、升級載入類架構等;
2014年3月18日,oracle發布JDK8的正式版,主要改進:支援Lambda運算式和虛擬擴充方法、新的日期和時間API、提供NashhornJavaScript引擎、提高安全性;
2017年發布java9.0的正式版(預計)… 2、各JDK版本的新特性 2-1、JDK5(JDK1.5)--2004年9月30日
語言新特性:
1、自動裝箱與拆箱;
2、枚舉;
3、靜態匯入;
4、可變長參數;
5、內省;
6、泛型;
7、動態註解;
8、遍曆迴圈(foreach迴圈);
9、Java API加入:java.util.concurrent並發包;
10、改進JVM記憶體模型(JMM)、自適應垃圾收集配置等; 2-2、JDK6--2006年12月11日
1、Web服務中繼資料;
2.、提供指令碼語言/動態語言支援(內建JS引擎);
3、JTable的排序和過濾;
4、更簡單,更強大的JAX-WS;
5、輕量級Http Server;
6、嵌入式資料庫 Derby;
7、JVM改進:鎖與同步、並發垃圾收集、類載入等演算法; 2-3、JDK7--2011年7月28日
語言改進:
1、switch支援使用字串;
2、運用List<String> tempList = new ArrayList<>(); 即泛型執行個體化類型自動推斷;
3、文法上支援集合,而不一定是數組;
4、新增一些取環境資訊的工具方法;
5、Boolean類型反轉,null 指標安全,參與位元運算;
6、兩個char間的equals;
7、安全的加減乘除;
8、map集合支援並發請求,且可以寫成 Map map = {name:"xxx",age:18};
JVM改進:
9、提供新的G1收集器;
10、加強對動態調用支援;
11、更嚴格的類檔案檢查;
核心基礎(core)改進:
12、升級載入類架構;
13、並發和集合更新;
IO改進:
14、提供全面的new I/O APIs(NIO.2)
更多請參考:《Java SE 7 Features and Enhancements》、《JDK 7 Features》 2-4、JDK8--2014年3月18日
語言改進:
1、允許在介面中有預設方法實現;
2、支援Lambda運算式 & 虛擬擴充方法;
3、內建函數式介面;
4、支援方法和建構函式引用;
5、提供Nashhorn javascript引擎,允許在Java程式中嵌入JS代碼
核心改進:
6、新的日期和時間API;
7、支援多重Annotations註解;
VM改進:
8、減少指定欄位上的緩衝爭用;
9、移除Permanent Generation(永久代);
10、移除一些很少使用的記憶體回收行程組合等;
更多請參考:《What's New in JDK 8》、《JDK 8 Features》 2-5、JDK9—2017年(預計)
1、JDK、源碼模組化;
2.、簡化進程API;
3、輕量級 JSON API;
4、新的 HotSpot 構建系統;
5、改善鎖爭用機制;
6、代碼分段緩衝;
7、智能Java編譯, 第二階段;
8、HTTP 2.0用戶端;
更多請參考:《JDK 9》 3、JVM的發展
我們知道現在JDK1.4後只有HotSpot作為官方提供的JVM,下面我們看下這個局面是怎麼產生的。
1、Sun Classic VM
第一款商用JVM;
JDK1.0/JDK1.1隻內建Classic VM,JDK1.2/JDK1.3與HotSpot並存,JDK1.2預設使用Classic VM,JDK1.3預設使用HotSpot,JDK1.4拋棄Classic VM;
本身只解釋執行,JIT編譯器需要外掛,且解譯器與編譯器不能同時配合工作;
記憶體模型:基於handler的對象尋找方式;
執行效率低;
2、Sun Exact VM
只發布JDK1.2的Solaris平台版本;
被HopSpot取代;
熱點代碼探測、兩級即時編譯器、編譯器與解譯器結合;
記憶體模型:準確式記憶體管理(Exact Memory Management);
執行效能較好;
3、Sun HotSpot VM
目前使用最廣泛的JVM;
1997年Sun收購獲得;
JDK1.2/JDK1.3與HotSpot並存,JDK1.2預設使用Classic VM,JDK1.3預設使用HotSpot,JDK1.4後只有HotSpot;
熱點代碼探測、兩級即時編譯器、編譯器與解譯器結合;
記憶體模型:準確式記憶體管理(Exact Memory Management);
未來結合JRockit VM;
更多HotSpot發展變化情況請參考:《Java Virtual Machine Technology》
4、BEA JRockit VM
號稱"世界上最快的JVM";
專註伺服器硬體與服務端應用;
沒有解譯器,只有即時編譯器編譯執行;
記憶體回收行程和MissionControl服務套件比較優秀;
被Oracle收購,與HopSpot結合;
5、其他
IBM J9 VM:與HotSpot一樣為多用途虛擬機器,主要應用IBM自己產品;
Azul VM:在HotSpot基礎上改進,專有硬體平台Vege上運行;
Liquid VM:JRockit VM的虛擬化版本,內建作業系統;
Apache Harmony:不僅僅是JVM,是一個開源的Java程式運行平台,使用自己的Java類庫;
Dalvik VM:Android平台虛擬機器,運行class轉化的dex檔案,使用寄存器架構,而不是JVM常見的棧架構;
Microsoft JVM:主要在瀏覽器運行Java早期的Applets程式,1997年被Sun控告而終止; 4、Java技術的應用發展
1、AWT/Swing/SWT
開發GUI、C/S傳統型程式,響應較慢,現在很少應用;
2、Applet
開發瀏覽器中啟動並執行網頁小程式,需要使用者安裝JRE外掛程式,響應也慢,現在基本不用;
3、Servlet
程式開發伺服器端啟動並執行程式,構建了"接收請求--調用servlet程式處理--返迴響應"基本模型,屬於java ee重要規範,Tomcat, Jetty, WebLogic , Websphere, JBoss都是實現了Servlet規範的Servlet容器,可以運行Servlet程式;
4、JSP(JavaServer Pages)
可以在HTML頁面中編寫Java,沒有JPS,Servlet只能用代碼一行一行構建響應;
5、MVC
利用SSH/SSM等一些第三架構,編寫Java程式只需要關注商務邏輯的處理;
6、android
開發移動平台應用程式,提供了專為移動平台最佳化的SDK、以及Dalvik VM;
等等...
上面我們對Java發展有了一個全面的認識,後面我們還將全面深入的學習瞭解Java……