JDK 17、OpenJDK 17、Oracle JDK 17 的說明

Java生態系統的核心概念:

簡單來說:

  • JDK 17?是一個標準規范,定義了Java開發工具包第17個長期支持版應該包含什么功能。

  • openjdk-17-jdk?是一個具體的實現,是遵循上述規范、由OpenJDK社區提供的開源軟件包。

下面我們通過一個表格和詳細解釋來深入理解它們的區別。

核心區別對比

特性JDK 17 (泛指)openjdk-17-jdk (特指)
本質規范 (Specification)實現 (Implementation)
含義Java SE 17平臺的標準,定義了應該有哪些功能和API。遵循JDK 17標準的具體、可安裝運行的開源代碼實現。
來源由JCP(Java社區進程)通過JSR(Java規范請求)定義。OpenJDK社區(由Oracle、Red Hat、IBM、Azul等公司共同維護)構建。
許可證無(因為它是規范,不是代碼)。GPLv2+CPE(開源許可證,可免費商用)。
如何獲取你不能直接獲取“JDK 17”,你獲取的是它的某種實現,比如OpenJDK 17、Oracle JDK 17等。通過Linux發行版(如Ubuntu、銀河麒麟)的包管理器(如?apt)安裝。

詳細解釋與類比

1. JDK 17 - “國家標準”

你可以把?JDK 17?想象成一份?《智能手機國家標準》

  • 這份標準規定了一部合格的智能手機必須能打電話、發短信、上網、運行符合規范的App等。

  • 只要符合這個標準,不管是華為、小米、蘋果還是OPPO生產的手機,都是“智能手機”。

  • 同樣,JDK 17?是一個標準,任何實現了這個標準的產品都可以被稱為“JDK 17兼容的實現”。

2. openjdk-17-jdk - “華為手機”

而?openjdk-17-jdk?就像是?華為公司根據上述國家標準生產的具體一款手機

  • 它是標準的一個具體實現

  • 它是開源的,意味著任何人都可以查看它的源代碼,也可以基于它進行修改和分發。

  • 它通常通過Linux系統的軟件倉庫(如?apt)來分發和安裝,非常方便,與系統集成度高。

3. 其他“手機品牌”

除了?openjdk-17-jdk(華為手機)這個實現,市場上還有其他同樣遵循?JDK 17?標準(國家標準)的實現,它們各有特點:

  • Oracle JDK 17:相當于“蘋果手機”。它曾經與OpenJDK在細節上有所不同(比如更好的飛行模式),但現在兩者代碼庫已基本一致。主要區別在于許可證:Oracle JDK 17+ 用于生產環境可能需要付費訂閱(除非用于個人開發或測試)。

  • Azul Zulu Builds of OpenJDK:相當于“華為手機的官方純凈版”。它提供基于OpenJDK源碼的預構建二進制包,確保經過測試,并支持多種平臺。

  • Eclipse Temurin:相當于“由開源社區大佬監制的華為手機”。由Eclipse基金會下的Adoptium項目組維護,是又一個高質量、經過全面測試的OpenJDK構建版本。

  • Amazon Corretto:相當于“亞馬遜定制的華為手機(深度優化版)”。由亞馬遜提供,自帶一些性能優化和長期支持。

在銀河麒麟系統上對你意味著什么?

對于你使用的銀河麒麟(aarch64架構)系統:

  1. 首選安裝?openjdk-17-jdk
    當你運行?sudo apt install openjdk-17-jdk?時,你安裝的就是由麒麟軟件倉庫提供的、為你的系統架構預編譯好的OpenJDK實現。這是最簡單、最安全、與系統集成度最高的方式,因為它會自動處理所有依賴關系。

  2. 如果需要其他實現
    如果你因為某些原因(例如需要Oracle的特定商業功能、或公司規定)不能使用倉庫版的OpenJDK,你才會需要去手動下載并安裝?Oracle JDK 17?或?Azul Zulu JDK 17?等其他實現。這時,你安裝的仍然是JDK 17的一個實現,只是供應商不同。

總結

你的操作你得到的是什么優點
sudo apt install openjdk-17-jdkJDK 17規范?的?OpenJDK實現?(由系統倉庫提供)安裝簡單、免費、集成度高、更新方便
從Oracle官網下載并安裝?jdk-17_linux-aarch64_bin.tar.gzJDK 17規范?的?Oracle JDK實現可能包含最新的緊急修復(但需注意許可證條款)
從Azul官網下載Zulu的DEB包安裝JDK 17規范?的?Azul Zulu實現?(基于OpenJDK)經過額外測試,提供多平臺支持

所以,結論是:對于絕大多數用戶,在銀河麒麟上直接使用?apt install openjdk-17-jdk?就是安裝JDK 17的最佳實踐。?你得到的是一個完全符合標準、免費且易于管理的JDK。

如何區分安裝的是 OpenJDK 17 還是 Oracle JDK 17?

最直接的方法:使用?java -version?命令

  1. 打開終端。

  2. 輸入以下命令并回車:

    bash

    java -version
  3. 觀察輸出的第一行信息,這是判斷的核心依據。


結果判斷

根據命令輸出,你會看到以下幾種典型情況:

情況一:安裝的是 OpenJDK

輸出中會明確包含?"OpenJDK"?字樣。

輸出示例:

bash

openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Ubuntu-122.04.1, mixed mode, sharing)

??關鍵標識:出現了?OpenJDK。這清楚地表明你安裝的是 OpenJDK 的實現。后面的?Ubuntu?也暗示了這是通過系統包管理器(如?apt)安裝的版本。

情況二:安裝的是 Oracle JDK

輸出中會包含?"Java(TM) SE Runtime Environment"?字樣,并且通常沒有 "OpenJDK"。

輸出示例:

bash

java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)

??關鍵標識:出現了?Java(TM) SE Runtime Environment?和?Java HotSpot(TM)(TM)?是商標符號,這是 Oracle 官方發行的 JDK 的典型特征。


其他輔助判斷方法

如果?java -version?的輸出信息不夠明確(有些精簡的構建版可能省略了供應商信息),你還可以使用以下命令獲取更詳細的信息:

1. 使用?apt?政策查詢(適用于通過 apt 安裝的包)

如果你是通過?sudo apt install openjdk-17-jdk?安裝的,那么它幾乎100%是 OpenJDK。你可以查詢包的詳細信息來確認:

bash

apt policy openjdk-17-jdk

這個命令會顯示該包的安裝版本和來源,如果是來自系統倉庫,那它就是 OpenJDK。

2. 查看 JAVA_HOME 路徑(適用于手動安裝)

檢查環境變量?JAVA_HOME?指向的路徑,從路徑名有時也能看出端倪。

bash

echo $JAVA_HOME
  • OpenJDK?的典型安裝路徑可能包含?openjdk-17?或類似結構(尤其是在使用包管理器安裝時)。

  • Oracle JDK?如果你手動安裝并解壓,路徑名通常是你自己定義的,可能包含?jdk-17?或?jdk17

3. 列出已安裝的Java相關包

查詢通過包管理器安裝的Java包,它們的名字會明確指示是OpenJDK。

bash

# 查找已安裝的JDK包
dpkg -l | grep openjdk# 或者查找所有包含'jdk'或'java'的包
dpkg -l | grep -E 'jdk|java'

如果你在列表中看到?openjdk-17-jdk?或?openjdk-17-jre,那就證明是 OpenJDK。

總結與結論

特征檢查點OpenJDKOracle JDK
java -version?輸出明確包含?OpenJDK?字樣包含?Java(TM) SE Runtime Environment?字樣
安裝方式通常通過系統包管理器(如?apt)安裝通常從Oracle官網手動下載并安裝
許可證GPLv2+CPE (開源免費)需要關注Oracle的許可條款(可能需付費用于商業生產)

對于你的銀河麒麟系統,如果你是通過?sudo apt install openjdk-17-jdk?命令安裝的,那么你安裝的一定是 OpenJDK 17

現在,你只需要在終端輸入?java -version,根據輸出結果中的關鍵字,就能立刻確認你正在使用的是哪一種JDK了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96463.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手寫MyBatis第58彈:如何優雅輸出可執行的SQL語句--深入理解MyBatis日志機制:

🥂(???)您的點贊👍?評論📝?收藏?是作者創作的最大動力🤞 💖📕🎉🔥 支持我:點贊👍收藏??留言📝歡迎留言討論 🔥🔥&…

Spring Boot 監控實戰:集成 Prometheus 與 Grafana,打造全方位監控體系

前言 在當今微服務架構盛行的時代,應用程序的監控變得尤為重要。Spring Boot 作為廣泛使用的微服務框架,其監控需求也日益增加。Prometheus 和 Grafana 作為開源監控領域的佼佼者,為 Spring Boot 應用提供了強大的監控能力。本文將詳細介紹如…

JS中的多線程——Web Worker

眾所周知,JavaScript 是單線程運行的(至于為什么是單線程可以看一下這篇文章——事件循環機制),當瀏覽器主線程被大量計算任務阻塞時,頁面就會出現明顯的卡頓現象。Web Worker 提供了在獨立線程中運行 JavaScript 的能…

【SQL注入】延時盲注

sleep(n)??: 核心延時函數。使數據庫程序暫停 n秒。??if(condition, true_expr, false_expr)??: 條件判斷函數。如果 condition為真,執行 true_expr,否則執行 false_expr。??用于將延時與判斷條件綁定??。??mid(a, b, c)??: 字符串截取函數…

IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南

1. 功能概覽 Java Stream Debugger 提供 Trace Current Stream Chain 功能,用來在調試時分析和可視化 Stream 操作鏈。 主要用途: 在運行時查看流操作鏈的每一步輸出找出 map/filter 等操作的問題避免手動加 peek() 打印調試2. 使用入口 在 IDEA 2025.1 …

ARM-指令集全解析:從基礎到高階應用

一、ARM 指令集體系結構版本ARM 公司定義了多個指令集版本:ARMv1:原型機 ARM1,沒有用于商業產品。ARMv2:擴展 V1,包含 32 位乘法指令和協處理器指令。ARMv3:第一個微處理器 ARM6 核心,支持 Cach…

第3講 機器學習入門指南

近年來,隨著企業和個人生成的數據量呈指數級增長,機器學習已成為日益重要的技術領域。從自動駕駛汽車到流媒體平臺的個性化推薦,機器學習算法已廣泛應用于各個場景。讓我們深入解析機器學習的核心要義。3.1 機器學習定義機器學習是人工智能的…

深入理解跳表:多層索引加速查找的經典實現

跳表(Skip List)是一種多層有序鏈表結構,通過引入多級索引加速查找,其核心設計類似于“立體高速公路系統”,底層是原始鏈表,上面有各種高度的"高架橋"。 高層道路跨度大,連接遠方節點…

Flutter 視頻播放器——flick_video_player 介紹與使用

在移動端應用中,視頻播放是一個常見的功能場景,例如短視頻、直播、課程、廣告展示等。 Flutter 本身并沒有直接提供視頻播放器組件,而是依賴第三方庫來實現。 今天要介紹的庫是 flick_video_player,它基于 video_player 封裝&…

編寫cmakelists文件常用語句

cmake_minimum_required (VERSION 3.10) 指定最小版本project(XXXX) 指定項目名字 ---------------set(MAIN_EXEC_NAME dwarf_parser) 定義變量${ MAIN_EXEC_NAME } 變量取值set(CMAKE_CXX_STANDARD 14) 指定c14標準,還有11、17、20等標準…

麒麟桌面系統找不到mbr啟動,并重新安裝grub

根據你提供的情況,“麒麟桌面系統找不到MBR啟動”,這通常是由于GRUB引導損壞、MBR記錄丟失或分區表異常導致的。你可以按照以下步驟重新安裝GRUB并修復MBR啟動: ? 步驟一:準備工具 使用銀河麒麟LiveCD或U盤啟動盤(可用Ventoy制作); 啟動電腦,選擇從U盤或光盤進入Live環…

【音頻字幕】構建一個離線視頻字幕生成系統:使用 WhisperX 和 Faster-Whisper 的 Python 實現

一、背景介紹 對于一端沒有字幕外國視頻、字幕,在不懂外語的情況下,怎么獲取相關內容?作為技術宅,怎么自建搭建一個語音轉文字的環境當前AI技術這么發達? 試試 二、系統設計 音頻提取(僅僅是視頻需要該邏輯、本身就是音…

Linux ALSA架構:PCM_OPEN流程 (二)

一 應用端源碼路徑: external\tinyalsa\pcm.c external\tinyalsa\pcm_hw.cstruct pcm *pcm_open(unsigned int card, unsigned int device,unsigned int flags, struct pcm_config *config) {...pcm->ops &hw_ops;pcm->fd pcm->ops->open(card, device,…

tp5的tbmember表閉包查詢 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)

閉包查詢 tbmember表閉包查詢查詢 openid‘abc并且islose0并且islogout0并且(wx_unionidnull或者wx_unionid’) Db::table(tbmember)->where([openid>abc,islose>0,islogout>0])->where(function ($query){$query->where(wx_unioni…

邪修實戰系列(3)

1、第一階段邪修實戰總覽(9.1-9.30) 把第一階段(基礎夯實期)的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢,強調“用輸出倒逼輸入”,確保每一分鐘的學習都直接服務…

【GD32】ROM Bootloader、自定義Bootloader區別

Bootloader是應用程序跑起來之前,用于初始化的一段程序,它分為兩種,ROM Bootloader、自定義Bootloader。GD32芯片出廠時預燒錄在ROM中的Bootloader(以下簡稱ROM Bootloader)和自己編寫的Bootloader(以下簡稱…

Linux防火墻-Firewalld

一、 概述 按表現形式劃分: 軟件防火墻: 集成在系統內部,Linux系統: iptables、firewalld、ufw; windows系統下: windows defender 硬件防火墻: 華為防火墻、思科防火墻、奇安信防火墻、深信服防…

【Qt】PyQt、原生QT、PySide6三者的多方面比較

目錄 引言 一、基本定義 二、核心對比維度 1. 編程語言與開發效率 2. 功能與 API 兼容性 3. 性能表現 4. 許可證與商業使用 5. 社區與文檔支持 三、遷移與兼容性 四、適用場景推薦 五、總結對比表 總結 引言 PySide6、PyQt(通常指 PyQt5/PyQt6&#xf…

JavaWeb站內信系統 - 技術設計文檔

1. 系統概述1.1 項目背景本系統旨在為企業或社區平臺提供一套完整的站內信解決方案,支持用戶之間的消息發送、接收、管理等功能,提升用戶間的溝通效率。1.2 設計目標實現用戶間消息發送和接收支持一對一和一對多消息發送提供消息狀態跟蹤(已讀…

Java基礎 9.10

1.System類常見方法和案例exit:退出當前程序arraycopy:復制數組元素,比較適合底層調用,一般使用 Arrays.copyOf 完成復制數組int[] src{1,2,3};int[] dest new int[3]; System.arraycopy(src, 0, dest, 0, 3);currentTimeMilens&…