Java6至Java13重要特性摘錄

參考官方release note,主要摘取各版本比較重要的特性,翻譯水平有限,如有紕漏歡迎指出。

JDK6

  • 語法部分
  1. 實現接口方法時,可以加@override註解了,JDK5會報錯
  • JVM部分
  1. Parallel Compaction 並行壓縮(ParallelOld收集器),新的老年代收集器,啓用參數:-XX:+UseParallelOldGC
  2. CMS優化:新提出併發System.gc()的概念,避免顯式調用System.gc()的長停頓(和CMS的原則衝突),讓CMS收集器來控制FullGc
    -XX:+ExplicitGCInvokesConcurrent
  3. 最小新生代空間從4M提升爲16M

JDK7

  • 語法部分
  1. 字符串可作爲switch表達式條件
  2. diamond:實例化時構造方法泛型參數可留空不必填寫,編譯器會自動推斷。<>雙尖括號戲稱“鑽石”
  • JVM部分
  1. 新的G1垃圾收集器(試驗中),計劃替代CMS

JDK8 大版本

  • 語法部分
  1. Lambda表達式,簡化文法
  2. 接口加入default方法,新的default關鍵字
  3. Stream API ,處理集合很方便
  4. 提升HashMap查找性能:老版本,衝突鍵位置的節點均形成鏈表,查找複雜度爲O(N),JDK8後,節點達到8個(TREEIFY_THRESHOLD)後轉紅黑樹,查找效率是O(logN)
  5. 數組排序的sort方法
  6. 新的Base64工具包:
  Base64.Encoder base64Encoder = Base64.getEncoder(); 
   String encodedStr = base64Encoder.encodeToString(buffer);
  1. 併發包中加入多個新方法
  • JVM部分
  1. 移除永久代PermGen,以MetaSpace代替(JVM自動管理)
  2. 新的字節碼指令,以支持接口default方法

JDK9

  1. 模塊系統:jar包改爲jmod文件,module-info.class文件放在每個模塊根目錄,來註明依賴關係,rt.jar和tools.jar移除,拆分到了新的模塊中。
  2. 進一步改進G1收集器性能,G1作爲默認收集器
  3. 以下GC的搭配被廢棄了,已不可用
  • DefNew + CMS
  • ParNew + SerialOld
  • Incremental CMS
  1. 開始廢棄CMS收集器,繼續使用會有警告
  2. 集合創建時使用of工廠方法,更方便
  3. Deprecated註解現在可標註起始版本,@Deprecated(since=“9”, forRemoval=true)
  4. 接口中可添加private方法了,實現類無法實現,可供同接口的default方法調用。

JDK10

  1. G1性能增強:支持並行FullGc(與JDK6時CMS支持此特性類似)
  2. 提升Java在Docker容器的性能,更好的支持Docker環境運行
  3. var關鍵字,自動推斷類型

JDK11 LTS版本

  1. 支持Unicode 10
  2. HTTP Client 標準化收錄
  3. Collection接口加入默認方法toArray
  4. (試驗)新的ZGC收集器,可控、低延遲:用戶線程暫停不超10毫秒
  5. (試驗)Epsilon收集器,(只管內存分配?我還不瞭解)
  6. Lambda表達式支持var關鍵字
  7. 移除Thread類的destroy() 和 stop() 方法

JDK12

  1. 支持Unicode 11
  2. ZGC支持類卸載

JDK13

  1. 支持Unicode 12.1
  2. ZGC支持退還未用堆內存給操作系統
  3. ZGC最大支持16TB的堆內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章