Java中的OpenJDK使用原理
前言:
OpenJDK是Java的開發(fā)工具包,Java有著26年的歷史。從任何標(biāo)準(zhǔn)來看,它都不是一種新的語言,尤其是在行業(yè)中,每隔幾年就會出現(xiàn)新的解決方案,而且通常比以前的解決方案更好。而最流行的Java實例OpenJDK已經(jīng)有14年的歷史了。無論如何,OpenJDK應(yīng)該已經(jīng)被替換了很多次了。但它仍然是世界上最流行的開發(fā)工具之一!這怎么會發(fā)生?
在本文中,我們將嘗試回答這個問題,深入研究OpenJDK的不斷升級過程,討論開源開發(fā)方法,并描述使Java如此獨(dú)特的所有因素。
Java和OpenJDK的特殊之處是什么?
OpenJDK是如何產(chǎn)生的
Java的歷史始于1991年,當(dāng)時Sun Microsystems的工程師對C和C++編程語言的限制和API感到失望。該語言的原型最初命名為“Oak”,后來改名為Java。
它于1994年首次可供下載,1995年首次公開發(fā)布,幾乎立即在當(dāng)時流行的網(wǎng)景瀏覽器中獲得支持。
2006年,Sun根據(jù)GNU通用公共許可證將Java HotSpot虛擬機(jī)和編譯器作為自由軟件發(fā)布,此后OpenJDK的歷史開始于Java 6和7的開源。在2006年至2008年期間,開放的代碼越來越多。
現(xiàn)在,OpenJDK的代碼對任何人都是可用的,并且是由Oracle周圍的一個大型社區(qū)開發(fā)的。有許多OpenJDK發(fā)行版可用,包括BellSoft構(gòu)建的Liberica JDK,任何人都可以根據(jù)開源方法免費(fèi)探索和使用它。
OpenJDK的工作原理和優(yōu)點(diǎn)是什么
Java誕生時形成了幾個目標(biāo),包括:
- Java很簡單,面向?qū)ο螅蠹叶己苁煜ぁ?/li>
- Java是健壯和安全的。
- Java語言與體系結(jié)構(gòu)無關(guān),JVM是可移植的。
- Java能夠以高性能執(zhí)行。
這些原則仍然是OpenJDK流行的原因,因此探索其中每一個原則并了解它們?nèi)绾斡绊戦_發(fā)人員和最終用戶的生活是很重要的。
Java語言與體系結(jié)構(gòu)無關(guān),JVM是可移植的
Java代碼與體系結(jié)構(gòu)無關(guān),這意味著如果編寫正確,它可以在任何設(shè)備上啟動,從PC到現(xiàn)代微波爐。這是通過利用Java最重要的特性實現(xiàn)的一 JVM、Java虛擬機(jī)、用于執(zhí)行應(yīng)用程序的運(yùn)行時。
通常大多數(shù)編程語言都將代碼編譯成機(jī)器代碼,這對于任何平臺都是不同的。Java編譯器的工作方式不同,它創(chuàng)建了特殊的“Java字節(jié)碼”,可以由運(yùn)行在任何系統(tǒng)上的Java虛擬機(jī)執(zhí)行。
JVM反過來使用動態(tài)編譯器,在應(yīng)用程序執(zhí)行期間編譯代碼。
這種方法允許在完全不同的平臺上運(yùn)行相同的代碼,只需很少甚至不需要重寫!沒錯,如果遵循指導(dǎo)原則,您可以編寫一次程序,然后在任何地方執(zhí)行它。所以如果你想用現(xiàn)代微波爐的觸摸屏玩俄羅斯方塊(或統(tǒng)治世界)一 Java是最簡單的語言!
但非常嚴(yán)肅地說,這種稱為“一次編寫,隨處運(yùn)行”的方法允許您不必處理不同的體系結(jié)構(gòu)、操作系統(tǒng)、驅(qū)動程序或硬件。您需要做的唯一一件事就是將虛擬機(jī)用于所選的平臺,支持的虛擬機(jī)有很多,還有更多。
Java很簡單,面向?qū)ο?,大家都很熟?/h3>
現(xiàn)在,Java語法已經(jīng)不再是最簡單的了……至少現(xiàn)在是這樣,因為正在開發(fā)的許多新特性使代碼更易于讀寫。然而,在構(gòu)思之時,它比競爭對手更有組織性。Java語言規(guī)范是一組規(guī)則,確保所有創(chuàng)新遵循相同的邏輯,并按照J(rèn)ava意識形態(tài)創(chuàng)建。所有API都是為了相互兼容和Java規(guī)范而創(chuàng)建的,因此它擁有您所需要的一切,不僅可以有效地編寫代碼,還可以檢查和利用其他人的工作。實現(xiàn)新技術(shù)的新編程方法,如交換機(jī)模式匹配和向量API,正在不斷實現(xiàn)。
Java是健壯和安全的
作為一個開源項目,OpenJDK的代碼可供任何想要檢查或增強(qiáng)其安全性的人使用。這意味著新發(fā)現(xiàn)的漏洞將不斷通過每季度的CPU版本進(jìn)行修補(bǔ),對于Liberica JDK,我們的支持人員將修復(fù)這些漏洞。
而且,有了廣泛的安全工具選擇,如漏洞掃描器,您可以確保破壞應(yīng)用程序和基礎(chǔ)設(shè)施安全的嘗試不會成功。
Java是高性能的
有很多方法可以提升您的OpenJDK應(yīng)用程序。JVM中的編譯器優(yōu)化代碼以獲得最佳性能。如果啟動時間更重要,則可以使用GraalVM本機(jī)映像技術(shù),將應(yīng)用程序與運(yùn)行時打包到單個可執(zhí)行二進(jìn)制文件中。
OpenJDK是如何開發(fā)的
OpenJDK作為太空競賽的基礎(chǔ)
您可以將編程語言與發(fā)射宇宙飛船的太空港進(jìn)行比較。當(dāng)開發(fā)人員構(gòu)建他們的應(yīng)用程序“宇宙飛船”時,他們希望基礎(chǔ)設(shè)施能夠工作并使他們的生活更加輕松。這意味著編程平臺和運(yùn)行時功能上的每一個錯誤都會使他們陷入危險的境地,因為他們做的一切都是對的,但發(fā)射失敗了,造成了時間和金錢的浪費(fèi)。
那么他們?yōu)槭裁催x擇OpenJDK呢?因為它是由一個可靠的大型社區(qū)管理的“太空港”。
讓我們了解一下OpenJDK中的一切工作原理。
OpenJDK的升級過程
OpenJDK的開發(fā)可以分為幾個方向:
- Bug修復(fù);
- 新功能的實施和過時功能的棄用;
- 主要分支機(jī)構(gòu)以外的項目。
讓我們深入討論它們。
錯誤修復(fù)
今天,當(dāng)GitHub用于OpenJDK開發(fā)時,這個過程大部分是自動化的,比以前快了很多。為了報告新發(fā)現(xiàn)的錯誤,開發(fā)人員使用郵件列表來描述錯誤,然后給出一個數(shù)字。。
當(dāng)開發(fā)人員希望修復(fù)bug時,他們會在存儲庫中創(chuàng)建一個fork,它基本上是整個項目的副本。然后在這個fork中,開發(fā)人員編輯代碼的必要部分來修復(fù)bug。測試成功后,他們會發(fā)出將新代碼拉回主分支的請求。然后對代碼進(jìn)行審查,如果符合要求,則將其實現(xiàn)到OpenJDK下一版本的主分支中。該系統(tǒng)允許任何開發(fā)人員嘗試修復(fù)任何發(fā)現(xiàn)的bug。
新功能的實施和過時功能的棄用
新特性通常通過幾個步驟來實現(xiàn)。首先,它是由開發(fā)人員作為概念(草案)提出的。名為OpenJDK lead的管理委員會成員決定該功能是否值得開發(fā)。
批準(zhǔn)后,草案更新了必要的說明和基本實施建議,成為JEP(JDK增強(qiáng)建議)。它在完成之前經(jīng)歷了許多階段。
實現(xiàn)過程本身類似于前面描述的bug修復(fù),是通過GitHub上的fork分支完成的。由于新功能分階段發(fā)布,此過程可能需要很長時間才能完成。預(yù)覽涉及語義和語法,孵化器一 API更改。在該功能的最終實現(xiàn)發(fā)布之前,可能會有多達(dá)3個預(yù)覽或孵化器。這樣做是為了讓開發(fā)人員能夠測試新功能,并查看它與新代碼和現(xiàn)有代碼的配合情況,以免破壞已經(jīng)在工作的應(yīng)用程序。通常在兩次預(yù)覽或孵化器之后,新代碼要么以最終形式添加到版本中,要么在被認(rèn)為不安全或性能不佳時刪除。
主要分支機(jī)構(gòu)以外的項目
一些對Java功能影響很大的項目是在主分支之外開發(fā)的。如果成功的話,他們會徹底改變語言,但他們需要很多時間來完善。如果需要,它們?nèi)匀豢梢栽诋?dāng)前狀態(tài)下實現(xiàn)到OpenJDK中,一些開發(fā)人員通常會這樣做。隨著時間的推移,它們將成為JEP,并成為下一版本的一部分。
規(guī)范變更
以JSR的形式提出并開發(fā)規(guī)范升級一 Java規(guī)范請求。這些都要經(jīng)過由指導(dǎo)Java技術(shù)發(fā)展的公司和人員組成的執(zhí)行委員會的公開審查和投票。BellSoft與阿里巴巴、亞馬遜、IBM、英特爾和甲骨文等公司也是該委員會的一員。
釋放節(jié)奏
OpenJDK有三種類型或版本:
- 之前討論過的季度CPU發(fā)布。它是在考慮安全性的基礎(chǔ)上構(gòu)建的,由漏洞和bug修復(fù)組成。
- 技術(shù)發(fā)布一 帶有新功能的編號版本,主要用于試用。對于開發(fā)人員來說,測試新技術(shù)、讓他們的應(yīng)用程序為舊技術(shù)的棄用做好準(zhǔn)備,以及規(guī)劃他們未來的工作都很有用。
- LTS(長期支持)編號的版本。這些都是經(jīng)過測試的實現(xiàn),將得到供應(yīng)商最長時間的支持。它們是在企業(yè)環(huán)境中開發(fā)和運(yùn)行程序的基礎(chǔ)。
在2017年Java 9發(fā)布之前,可能需要將近5年的時間才能推出新的編號版本。從那以后,Oracle轉(zhuǎn)向了新的發(fā)布cadence,每年發(fā)布兩個編號的版本,每兩年發(fā)布一個新的LTS版本。Java 17是最新的LTS版本,下一個版本將于2023年9月發(fā)布Java 21,以下版本將每兩年發(fā)布一次。
支持本身由許多供應(yīng)商提供,包括BellSoft,新版本的Liberica JDK與其他主要發(fā)行版同時發(fā)布。
為什么開源優(yōu)于閉源
必須記住,OpenJDK是一個開源項目。這很重要,因為所有封閉源代碼的替代方案本質(zhì)上都是黑盒子。理論上他們會更安全嗎?對但從理論上講,它們可能包含大量無人知曉的漏洞……或者可能除了那些已經(jīng)利用這些漏洞與開發(fā)人員竊取資金或信息的數(shù)據(jù)竊賊之外,沒有人知道。
在開源中,這是不可能的。你總是知道什么有效,什么無效,以及為什么。當(dāng)然,惡意參與者可以研究代碼,但大量開發(fā)人員和安全管理人員也可以!所有漏洞都會很快被發(fā)現(xiàn)并修復(fù)。所有加密算法和安全措施都可供測試。
還有一件事一 如果你認(rèn)為你能做得更好一 你可以直接去做!這就引出了下一個問題。
為什么有那么多OpenJDK供應(yīng)商和實現(xiàn)?
除了原始的OpenJDK之外,還有許多供應(yīng)商出售或免費(fèi)提供自己的版本,包括生產(chǎn)Liberica JDK的BellSoft。為什么有這么多可供選擇,有什么區(qū)別?
答案很簡單一 功能、安全和支持。所有Java開發(fā)工具包,包括Oracle Java SE,都基于OpenJDK。它們都可以按預(yù)期的方式運(yùn)行Java代碼,并且在一切正常的情況下,它們是相似的。當(dāng)出現(xiàn)問題時,差異就會出現(xiàn)。
結(jié)論
OpenJDK是一個驚人的應(yīng)用程序開發(fā)平臺,它只會隨著年齡的增長而變得更好!
到此這篇關(guān)于Java中的OpenJDK使用原理的文章就介紹到這了,更多相關(guān) Java OpenJDK 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解java接口(interface)在不同JDK版本中的變化
- Java16 JDK安裝并設(shè)置環(huán)境變量的方法步驟
- 教你用JDK編譯Java文件的方法
- 解決IDEA?JDK9沒有module-info.java的問題
- 關(guān)于java中多個JDK和切換版本介紹
- Java9版本新特性同一個Jar支持多JDK版本運(yùn)行
- java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析
- 2021最新Java?JDK1.8的安裝超詳細(xì)教程
- Tomcat?8.5?+mysql?5.7+jdk1.8開發(fā)JavaSE的金牌榜小項目
- Java?JDK內(nèi)置常用接口和深淺拷貝
相關(guān)文章
解決Mybatis返回update后影響的行數(shù)問題
這篇文章主要介紹了解決Mybatis返回update后影響的行數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Spring注解 TX聲明式事務(wù)實現(xiàn)過程解析
這篇文章主要介紹了Spring注解 - TX 聲明式事務(wù)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04springboot+feign+Hystrix整合(親測有效)
本文主要介紹了springboot+feign+Hystrix整合,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11