一 概述JDK
1. JDK Java SE Development kit(JDK) java開發工具包
JDK全稱Java SE Development kit(JDK),即java標準版開發包,是Oracle提供的一套用於開發java應用程序的開發包,它提供編譯,運行java程序所需要的各種工具和資源,包括java編譯器,java運行時環境,以及常用的java類庫等。
2. JRE Java Runtime Environment(JRE) Java運行環境
Java運行環境,它的全稱Java Runtime Environment(JRE) ,因此也被稱爲JRE,它是運行java的必需條件。
3. JVM Java Virtual Machine
Java虛擬機,JRE包含JVM。JVM是運行java程序的核心虛擬機,還需要其他的類加載器,字節碼校驗器,以及大量的基礎類庫。JRM除了包含JVM之外,還包含運行java程序的其它環境支持。
Oracle 把java分爲javaSE 、java EE 和java ME三部分,而且分別爲java SE 和javaEE 提供了JDK和Java EE SDK(Soft Development kit) 兩個開發包。
二 JDK的進化演變歷程
JDK1.0
- 初代版本,解釋運行,使用JIT,性能較差,運行速度較慢。
JDK1.1
- JDBC(Java DataBase Connectivity);
- 支持內部類;
- RMI(Remote Method Invocation);
- 反射(反射解析);
- Java Bean。
JDK1.2
- 集合框架;
- JIT(Just In Time)編譯器;
- 打包的java文件進行數字簽名;
- JFC(Java Foundation Classes),包括Swing 1.0,拖放和java2D類庫;
- Java插件;
- JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和用戶定義類型;
- Applet中添加聲音支持。
JDK1.3
- Java Sound API;
- jar文件索引;
- 對Java的各個方面都做了大量優化和增強。
JDK1.4
- XML處理;
- Java打印服務;
- Logging API;
- Java Web Start;
- JDBC 3.0 API;
- 斷言;
- Preferences API;
- 鏈式異常處理;
- 支持IPV6;
- 支持正則表達式;(正則表達式)
- 引入Image I/O API。
JDK1.5
- 泛型(Generics);
- 增強for循環;
- 自動拆裝箱(Autoboxing/unboxing);
- 類型安全的枚舉(Typesafeenums);
- 靜態導入(Static import);
- 元數據(Metadata);
- 線程池。
泛型是JDK1.5中一個最"酷"的特徵,通過引入泛型,將編譯類型和運行時更小的拋出ClassCastException的可能。
線程池的基本是對象池的思想,開闢一塊內存空間,裏面存放了衆多(未死亡)的線程,池中線程執行調度由線程池管理器來處理。當有線程任務時,從池中取出一個,執行完成後線程對象回到線程池,這樣可以避免反覆創建線程對象所帶來的性能開銷,節省了系統的資源。
JDK1.6
- Desktop類和SystemTray類(AWT中新增的兩個類);
- 使用JAXB2來實現對象與XML之間的映射;
- StAX(JDK1.6中除去了DOM和SAX之外的又一種處理XML文檔的API);
- 使用Compiler API(結合反射功能可以實現動態的編譯Java源文件);
- 輕量級Http Server API;
- 插入式註解處理API(Pluggable Annotation Processing API);
- 用Console開發控制檯程序;
- 對腳本語言的支持(如ruby,groovy,javascript);
- Common Annotations。
JDK1.7
- 自動資源管理;
- 改進的通用實例創建類型推斷;
- 數字字面量下劃線支持(如 1_1 = 11);
- switch中使用string;
- 二進制字面量;
- 簡化可變參數方法調用;
- 引入Java NIO.2開發包。
JDK1.8
- 接口的默認方法;
- Lambda 表達式;
- 函數式接口;
- 方法與構造函數引用;
- Lambda 作用域;
- 訪問局部變量;
- 訪問對象字段與靜態變量;
- 訪問接口的默認方法;
- Date API;
- Annotation 註解。
JDK1.9
- 模塊化系統;
- jShell命令;
- 多版本兼容jar包;
- 接口的私有方法;
- 鑽石操作符的使用升級;
- 語法改進:try語句;
- 下劃線使用限制;
- String存儲結構變更;
- 便利的集合特性:of();
- 增強的Stream API;
- 多分辨率圖像 API;
- 全新的HTTP客戶端API;
- Deprecated的相關API;
- 智能Java編譯工具;
- 統一的JVM日誌系統;
- javadoc的HTML 5支持;
- Javascript引擎升級:Nashorn;
- java的動態編譯器。
JDK1.10
- JEP286,var 局部變量類型推斷。
- JEP296,將原來用 Mercurial 管理的衆多 JDK 倉庫代碼,合併到一個倉庫中,簡化開發和管理過程。
- JEP304,統一的垃圾回收接口。
- JEP307,G1 垃圾回收器的並行完整垃圾回收,實現並行性來改善最壞情況下的延遲。
- JEP310,應用程序類數據 (AppCDS) 共享,通過跨進程共享通用類元數據來減少內存佔用空間,和減少啓動時間。
- JEP312,ThreadLocal 握手交互。在不進入到全局 JVM 安全點 (Safepoint) 的情況下,對線程執行回調。優化可以只停止單個線程,而不是停全部線程或一個都不停。
- JEP313,移除 JDK 中附帶的 javah 工具。可以使用 javac -h 代替。
- JEP314,使用附加的 Unicode 語言標記擴展。
- JEP317,能將堆內存佔用分配給用戶指定的備用內存設備。
- JEP317,使用 Graal 基於 Java 的編譯器,可以預先把 Java 代碼編譯成本地代碼來提升效能。
- JEP318,在 OpenJDK 中提供一組默認的根證書頒發機構證書。開源目前 Oracle 提供的的 Java SE 的根證書,這樣 OpenJDK 對開發人員使用起來更方便。
- JEP322,基於時間定義的發佈版本,即上述提到的發佈週期。版本號爲\$FEATURE.\$INTERIM.\$UPDATE.\$PATCH,分別是大版本,中間版本,升級包和補丁版本。
JDK1.11
- 181:Nest-Based訪問控制。
- 309:動態類文件常量。
- 315:改善Aarch64 intrinsic。
- 318:無操作垃圾收集器。
- 320:消除Java EE和CORBA模塊。
- 321:HTTP客戶端(標準)。
- 323:局部變量的語法λ參數。
- 324:Curve25519和Curve448關鍵協議。
- 327:Unicode 10。
- 328:飛行記錄器。
- 329:ChaCha20和Poly1305加密算法。
- 330:發射一列縱隊源代碼程序。
- 331:低開銷堆分析。
- 332:傳輸層安全性(Transport Layer Security,TLS)1.3。
- 333:動作:一個可伸縮的低延遲垃圾收集器 (實驗)。
- 335:反對Nashorn JavaScript引擎。
- 336:反對Pack200工具和API。