參考官方release note,主要摘取各版本比較重要的特性,翻譯水平有限,如有紕漏歡迎指出。
JDK6
- 語法部分
- 實現接口方法時,可以加@override註解了,JDK5會報錯
- JVM部分
- Parallel Compaction 並行壓縮(ParallelOld收集器),新的老年代收集器,啓用參數:-XX:+UseParallelOldGC
- CMS優化:新提出併發System.gc()的概念,避免顯式調用System.gc()的長停頓(和CMS的原則衝突),讓CMS收集器來控制FullGc
-XX:+ExplicitGCInvokesConcurrent- 最小新生代空間從4M提升爲16M
JDK7
- 語法部分
- 字符串可作爲switch表達式條件
- diamond:實例化時構造方法泛型參數可留空不必填寫,編譯器會自動推斷。<>雙尖括號戲稱“鑽石”
- JVM部分
- 新的G1垃圾收集器(試驗中),計劃替代CMS
JDK8 大版本
- 語法部分
- Lambda表達式,簡化文法
- 接口加入default方法,新的default關鍵字
- Stream API ,處理集合很方便
- 提升HashMap查找性能:老版本,衝突鍵位置的節點均形成鏈表,查找複雜度爲O(N),JDK8後,節點達到8個(TREEIFY_THRESHOLD)後轉紅黑樹,查找效率是O(logN)
- 數組排序的sort方法
- 新的Base64工具包:
Base64.Encoder base64Encoder = Base64.getEncoder();
String encodedStr = base64Encoder.encodeToString(buffer);
- 併發包中加入多個新方法
- JVM部分
- 移除永久代PermGen,以MetaSpace代替(JVM自動管理)
- 新的字節碼指令,以支持接口default方法
JDK9
- 模塊系統:jar包改爲jmod文件,module-info.class文件放在每個模塊根目錄,來註明依賴關係,rt.jar和tools.jar移除,拆分到了新的模塊中。
- 進一步改進G1收集器性能,G1作爲默認收集器
- 以下GC的搭配被廢棄了,已不可用
- DefNew + CMS
- ParNew + SerialOld
- Incremental CMS
- 開始廢棄CMS收集器,繼續使用會有警告
- 集合創建時使用of工廠方法,更方便
- Deprecated註解現在可標註起始版本,@Deprecated(since=“9”, forRemoval=true)
- 接口中可添加private方法了,實現類無法實現,可供同接口的default方法調用。
JDK10
- G1性能增強:支持並行FullGc(與JDK6時CMS支持此特性類似)
- 提升Java在Docker容器的性能,更好的支持Docker環境運行
- var關鍵字,自動推斷類型
JDK11 LTS版本
- 支持Unicode 10
- HTTP Client 標準化收錄
- Collection接口加入默認方法toArray
- (試驗)新的ZGC收集器,可控、低延遲:用戶線程暫停不超10毫秒
- (試驗)Epsilon收集器,(只管內存分配?我還不瞭解)
- Lambda表達式支持var關鍵字
- 移除Thread類的destroy() 和 stop() 方法
JDK12
- 支持Unicode 11
- ZGC支持類卸載
JDK13
- 支持Unicode 12.1
- ZGC支持退還未用堆內存給操作系統
- ZGC最大支持16TB的堆內存