聊聊JDK1.0到JDK20的那些事兒

来源:https://www.cnblogs.com/Jcloud/archive/2023/08/15/17631822.html
-Advertisement-
Play Games

最近小組在開展讀書角活動,我們小組選的是《深入理解JVM虛擬機》,相信這本書對於各位程式猿們都不陌生,我也是之前在學校準備面試期間大致讀過一遍,emm時隔多日,對裡面的知識也就模糊了。這次開始的時候從前面的JDK發展史和JVM虛擬機家族著手,之前都是粗略讀過,這次通過查閱相關資料並收集在每一個JDK... ...


1.前言

最近小組在開展讀書角活動,我們小組選的是《深入理解JVM虛擬機》,相信這本書對於各位程式猿們都不陌生,我也是之前在學校準備面試期間大致讀過一遍,emm時隔多日,對裡面的知識也就模糊了。這次開始的時候從前面的JDK發展史和JVM虛擬機家族著手,之前都是粗略讀過,這次通過查閱相關資料並收集在每一個JDK版本演化期間所發生的的一些趣聞,發現還是比較有意思的,以下是關於有關JDK發展史的總結分享。

2.JDK各版本特性及趣聞

  • JDK版本演變及各版本特性

◦JDK 1.0 (1996):

▪包含Java語言、Java類庫和Java虛擬機。支持圖形用戶界面(GUI)、資料庫連接(JDBC)等功能。

"Oak" 是 Java 語言的前身,由於“Oak”這個名稱已經被其他公司使用了,因此在1995年,Java 的創造者——Sun 公司決定將其改名為“Java”。 據說,這個名稱是來自於一家咖啡店。當時,在設計 Java 語言的時候,創始團隊成員到一家咖啡店買咖啡時,發現這家咖啡店的名字叫做“Java Coffee”,於是決定以“Java”作為新的名稱。

◦JDK 1.1 (1997-2):

▪增加了內部類、JavaBeans、遠程方法調用(RMI)等功能。

JDK 1.2 / Java 2 (1998-12):

▪引入了Swing組件、反射機制和動態代理、集合框架、Java 2D和Java 3D圖形等特性。

這是Java SE第一個真正具有商業價值的版本。該版本引入了Java命名空間(namespace)等特性,使得Java應用程式能夠更好地組織和管理。在此階段並存過三個虛擬機,Classic VM、HotSpot VM和Exact VM,其中HotSpot在1999年4月誕生。

◦JDK 1.3 (2000-5):

▪增加了Java平臺的功能、底層類庫、增強了AWT和Swing用戶界面等。

當時Sun公司正在面對來自Microsoft的嚴峻挑戰,後者推出了.NET框架,試圖顛覆Java的地位。因此,Sun公司決定加快Java的開發速度,增強其競爭力。

JDK 1.4LST (2002-2):

▪引入Java管理擴展(JMX)、新的I/O API,稱為NIO(New I/O)、斷言、內置的XML解析器(SAX和DOM)等特性。

這是Java SE中功能最全面的版本之一。該版本引入了NIO和XML解析器等新特性,提高了Java程式的性能和擴展性。

JDK 5.0 / Java 1.5 (2004-9):

▪引入了泛型、枚舉類型、自動裝箱和拆箱、註解、併發編程API等特性。

這是Java SE中功能最豐富的版本之一。該版本引入了泛型、類型安全的枚舉、自動裝箱/拆箱和註解等新特性,使得Java程式的編寫更加簡潔和精簡。

Sun公司從這個版本開始放棄了謙遜的“JDK 1.x”的命名方式,將產品版本號修改成了“JDK x”。Sun 公司這樣做的原因是,從 JDK 5.0 開始,Java 平臺的發佈計劃每年發佈一個版本,為了避免版本號混淆,同時更好地傳達 Java 平臺的快速迭代和更新,採用了新的命名方式。

◦JDK 6 (2006-12):

▪引入了JDBC 4.0 API、Java監視與管理控制台(JConsole)、增加了對動態語言的支持、改進的GUI工具包(Swing)、改進的Java Web Start、改進的性能與安全性等特性。

JDK的更新沒有能夠繼續維持兩年發佈一個主版本的研發速度,這導致了JDK 6的生命周期異常的長。 Java 6 在銀行等體系使用比較多可能有以下幾個原因:

穩定性高:Java 6 是一個相對成熟和穩定的版本,由於經過多年的實踐和測試,已被廣泛認可並得到了驗證,符合金融行業對穩定性的要求。雖然 Java 7 和 Java 8 等新版本帶來了更多的功能和優化,但這些功能並不是每個銀行都需要,而且新版本的穩定性也需要一定時間的驗證和檢驗。

可控性強:銀行等體系對軟體的可控性要求非常高,需要確保軟體能夠穩定運行,並具備良好的可維護性。在這個方面,Java 6 較新的特性和更新也相對較少,使其相對容易維護和掌控。

成本考慮:對於一些大型機構,升級到最新的 Java 版本可能需要付出巨大的成本。例如,需要修改現有的代碼和應用程式、重新測試和審計等。另外,許多舊系統都還在運行 Java 6,升級到新版本需要重新評估風險和效益,這也需要額外的成本和投入。

總之,Java 6 在銀行等體系中使用較多是由於其穩定性、可控性和成本方面的考慮。然而,隨著時間的推移和新版本的推出,銀行等體系也需要逐步升級到更先進的 Java 版本,以滿足業務的需求和提高運行效率。

此外,雖然 Java 7 和 Java 8 帶來了更多的新特性和優化,但是在銀行等體系中升級到新版本需要付出巨大的成本,例如重新編寫和測試代碼、重新評估安全性等,這也是銀行等企業將 Java 6 作為開發平臺的一大原因。

◦JDK 7 (2011-7):

▪引入了switch語句的字元串表達式形式、二進位字面量和下劃線數字表示法、Try with Resources語句等特性。

在JDK 7開發期間,Sun公司相繼在技術競爭和商業競爭中陷入泥潭,公司的股票 市值跌至僅有高峰時期的3%,已無力推動JDK 7的研發工作按計劃繼續進行。為了儘快結束JDK 7長期跳票的問題,Oracle收購Sun公司後隨即宣佈馬上實行“B計劃”,大幅裁剪了JDK 7預定目標,以保證 JDK 7的正式版能夠於2011年7月28日準時發佈。

JDK 8LST (2014-3):

◦引入了Lambda表達式、Stream API、Date/Time API、介面預設方法、方法引用、重覆註解、Optional 類、Nashorn JavaScript 引擎等特性。

這是Java SE中最重要的版本之一,引入了Lambda表達式、Stream API、Default方法、DateTime API等新功能,極大地提高了Java程式的編寫效率和開發效率。 原定於2013年9月發佈,最終還是跳票到了2014年3月18日,從JDK 8開始,Oracle啟用JEP(JDK Enhancement Proposals)來定義和管理納入新版JDK發佈範圍的功能特性。

JDK 9 (2017-9):

◦引入了模塊化系統、JShell、HTTP/2客戶端和伺服器端API等特性。

發版節奏變更:以後JDK將會在每年的3月和9月各發佈一個大版本、每6個JDK大版本中才會被划出一個長期支持(Long Term Support,LTS)版,只有LTS版的JDK能夠獲得為期3年的支持和更新,JDK 8和JDK 11會是LTS版。 再下一個就到2021年發佈的JDK 17 了。

◦JDK 10 (2018-3):

▪引入了局部變數類型推斷、改進了Javadoc等特性。

2018年3月27日,Android的Java侵權案有了最終判決,法庭裁定Google賠償Oracle合計88億美元,要知道2009年Oracle收購Sun也就只花了74億,收購完成後隨即就用Sun的專利把Google告上了法庭,經過Oracle法務部的幾輪神操作,一場官司的賠償讓收購Sun公司等同免費。

JDK 11LST (2018-9):

▪引入了HTTP Client API(HTTP 客戶端API)、Nest-Based Access Control(基於嵌套的訪問控制)、Flight Recorder(飛行記錄器)、Epsilon GC(Epsilon垃圾回收器)改進的ZGC(Z Garbage Collector)等特性。

這是Java SE中長期支持版本中最新的一個版本,引入了HTTP客戶端、Local-Variable Syntax for Lambda Parameters、ZGC等新功能,具有重要的實用價值。 2018年10月,最後一屆JavaOne2018在舊金山舉行,這個1996年伴隨Java一同誕生、成長的開發者年度盛會落下帷幕。此外Java Mission Control(Java Mission Control (JMC)是一個由 Oracle 公司開發的用於監視、管理和分析 Java 應用程式的工具。)開發團隊也於6月被Oracle解散。

◦JDK 12(2019年3月):

▪引入了Switch表達式預覽功能、微基準測試套件等特性。

2019年2月,在JDK 12發佈前夕,Oracle果然如之前宣佈那樣在六個月之後就放棄了對上一個版本OpenJDK的維護,RedHat同時從Oracle手上接過OpenJDK 8和OpenJDK 11的管理權利和維護職責。

◦JDK 13(2019年9月):

▪引入了文本塊預覽功能、動態CDS歸檔等特性。

◦JDK 14LST(2020年3月):

▪引入了實例模式匹配預覽功能、非易失性記憶體支持等特性。

◦JDK 15(2020年9月):

▪引入了密封類預覽功能、Edwards-Curve數字簽名演算法等特性。

◦JDK 16(2021年3月):

▪引入了記錄類預覽功能、向量API等特性。

JDK 17LST(2021年9月):

▪長期支持版本,引入了模式匹配、密封類等正式特性。

◦JDK 18(2022年3月):

▪引入簡單的web伺服器、支持在Java API文檔中加入代碼片段、制定UTF-8作為Java API的預設字元集。

◦JDK 19 (2022年9月):

▪引入結構化併發的API來簡化多線程的編程、支持虛擬線程等。

◦JDK 20LST (2023年3月):

▪引入記錄模式、Switch模式匹配等。

3.當前市面JDK版本使用情況

New Relic近日發佈了一份《2023 年 Java 生態系統狀況報告》,這份報告收集了上百萬份線上的應用程式的數據,統計了目前生產環境中使用最多的JDK版本,最受歡迎的JDK供應商以及容器等的相關數據。

目前市面上有超過56%的應用程式使用了JDK 11,而相比之下,Java 8 的使用從2020年的84%降低到了現在的32%左右,大部分公司在這三年之間都升級到了JDK 11 或者 JDK 17這兩個LTS版本上面。

在JDK 的廠商上面,Amazon這兩年的增長量是比較大的,從22%上升到了31%,是目前市面上的各個JDK廠商中占比最高的。

4.總結

ok,以上就是截止目前所有的JDK版本及有關特性的簡要介紹,原本對各個版本的特性整理了一張腦圖,裡面有詳細的相關介紹,但是這塊如果全部都放到文章裡面會顯得過於冗長,emm,其實目前我們使用的JDK還是JDK8,前段時間通過對JDK的調研還對JDK9中的模塊化和JDK19中的虛擬線程進行了學習並使用實際demo對使用場景進行了驗證,相關分析會在後續文章進行介紹。

ps:文章末尾附錄一張腦圖照片~

作者:京東科技 宋慧超

來源:京東雲開發者社區 轉載請註明出處


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Lua程式設計第四版第二部分編程實操自做練習題答案,帶:star:為重點。 ## 14.1 :star: > 該函數用於兩個稀疏矩陣相加 ```lua function martixAdd(a, b) local c = {} for i = 1, #a, 1 do c[i] = {} for k, ...
  • [TOC] ## 類型的基本歸類 **整形家族:** ```c char unsigned char signed char short unsigned short [int] signed short [int] int unsigned int signed int long unsigned ...
  • 在Python中,列表(list)是一種有序、可變的數據結構,用於存儲多個元素。列表可以包含不同類型的元素,包括整數、浮點數、字元串等。實際上列表有點類似C++語言中的數組,但僅僅只是類似,和數組還是有點不一樣的。列表非常適合利用順序和位置定位某一元素,尤其是當元素的順序或內容經常發生改變時。 在P ...
  • # 1. 回顧 > 1. java實現多線程: [1]繼承Thread類並重寫run方法 [2]實現Runnable介面 > > 2. 線程Thread中常用的方法: setName(): Thread.currentThread().getName(): > > ​ static void sle ...
  • [TOC] # 簡介 ImGui 是一個用於C++的用戶界面庫,跨平臺、無依賴,支持OpenGL、DirectX等多種渲染API,是一種即時UI(Immediate Mode User Interface)庫,保留模式與即時模式的區別參考[**保留模式與即時模式**](https://learn.m ...
  • 利用AI幫你讀文章、利用AI幫你分析非結構化數據,這些最為潮流的AI輔助工具,相信很多讀者都在各種媒體上看到過了。但還是有不少人並沒有真正的使用過,這裡有很多原因導致,具體就不細說了,懂的都懂。 今天TJ就給大家推薦一個你可以線上使用,也可以自己搭建的AI輔助工具:[**Quivr**](https ...
  • Sun公司以及其他虛擬機提供商發佈了許多可以運行在各種不同平臺上的虛擬機,這些虛擬機都可以載入和執行同一種平臺無關的的程式存儲格式——位元組碼(ByteCode),從而實現了程式的“一次編寫,到處運行”。“Class文件”這種特定的二進位文件格式所關聯,Class文件中包含了Java虛擬機指令集和符號... ...
  • [TOC] ## 1. 我以為 我以為 [GoPool](https://github.com/devchat-ai/gopool) 這個項目會曇花一現,從此在 GitHub 上封塵。 > 關於 GoPool 項目誕生的故事:[《僅三天,我用 GPT-4 生成了性能全網第一的 Golang Work ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...