日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

我应该采用 Java 12 还是坚持使用 Java 11?

發布時間:2025/7/14 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我应该采用 Java 12 还是坚持使用 Java 11? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編譯自https://blog.joda.org/2018/10/adopt-java-12-or-stick-on-11.html
原文作者?Stephen Colebourne?是一名 Java 開發者,同時也是一位知名的 Java 博主和會議演講者。

距離 Java 11 的正式發布已過去一個多月,而 Java 12 也正在趕來的路上。根據此前開源中國發起的一項關于開發者使用的 Java 版本的調查,Java 8 仍然是開發者的主流選擇,而 Java 11 是 Java 8 之后的首個 LTS 版本,所以有不少開發者表示會選擇升級至 Java 11。按照 Java 的發布計劃,Java 12 將于明年 3 月推出。那么問題來了,我們是應該采用?Java 12,還是堅持使用 Java 11 呢?

可能你會覺得這是一個無關緊要的問題,但對于那些需要在 JVM 中使用 Java 的開發者,或是比較看重 Java 新特性的開發者,這是一項十分重要的決策。這篇文章將和大家就這個問題進行相關的分析。

Java 發布計劃

現在每六個月就會發布一個新的 Java 版本,所以盡管 Java 11 才發布不久,但距離 Java 12 的發布也就剩下不到五個月的時間。作為發布計劃的一部分,某些版本會被指定為長期支持版本(LTS),它們會獲得四年或更長時間的技術支持和安全補丁更新。所以這些版本通常會被稱為“主要版本” —— 不是因為它們擁有更多的功能特性,而是因為它們具有長期的技術支持。

預計 Java 11 的更新補丁(11.0.1, 11.0.2, 11.0.3 等)將比 Java 8 的補丁(8u20, 8u40, 8u60)更小更簡單。因為 Java 11 的更新將更加集中在安全補丁上,不會像 Java 8 的更新那樣帶來內部的功能增強。Oracle 希望將?Java 12, 13, 14 等這些版本當做是小更新版本,類比成 Java 8 的話,即是 Java 11u20, 11u40。

Oracle 高級員工一再認為像 8u20 和 8u40 這樣的更新常常會帶來破壞性的變更,但本文作者表示這不是自己的經歷,他記得的唯一有破壞性的變化是為?Javadoc 添加了?--allow-script-in-comments,但它也不是 Java 的核心部分。因此,他從不擔心升級到最新版本帶來的影響 —— 因為這是 Java 平臺的核心優勢。

下面深入了解一下為什么在舊的發布模式下,升級版本不會導致任何問題。先看一下新舊發布模式之間的差異:

模式升級系列頻率版本語言變化JVM 變化主要的功能增強添加的 classes/methods移除的 classes/methods新的棄用內部功能增強JDK 工具變更Bug 修復Security 補丁
舊的發布模式新的發布模式
Java 主要版本Java 更新版本Java 版本系列Java 補丁版本
每隔3年左右每6個月一次每6個月一次每3個月一次
6 -> 7 -> 88 -> 8u20 -> 8u4011 -> 12 -> 1311 -> 11.0.1 -> 11.0.2

?
?

?
?

?
?

?
?
??
?

?
?



?



?








Oracle 的官方觀點認為:與 Java 7->8->9 相比,Java 9->10->11 的升級和?8->8u20->8u40 更相似。

表格清楚地顯示新模式下的 Java 版本發布都會包含許多變更,包括語言變更和 JVM 變更,這兩者都會對 IDE、字節碼庫和框架產生重大影響。此外,不僅會新增其他 API,還會有 API 被刪除(這在 Java 8 之前沒有發生過)。

Oracle 的觀點是,因為每個版本僅在前一個版本發布后的6個月推出,所以不會有太多新的“東西”,因此升級并不困難。雖然如此,但這不是重點。重要的是升級是否有可能會破壞代碼。很明顯,從 11 -> 12 -> 13?開始,代碼遭受破壞的可能性要大于?8 -> 8u20 -> 8u40。

11 -> 12 -> 13 與 8u20 -> 8u40 等這樣的更新主要區別在于對字節碼版本的更改以及對規范的更改,對字節碼版本的更改往往特別具有破壞性,大多數框架都大量使用與每個字節碼版本密切相關的 ASM 或 ByteBuddy 等庫。而?8u20 -> 8u40 仍然使用相同的 Java SE 規范,具有所有相同的類和方法,不同于從 Java 12 移動到 13。

除此之外,Oracle 的另一個聲明也十分值得我們關注。聲明透露出的消息是,如果堅持使用 Java 11 并計劃在下一個 LTS 版本(即 Java 17)發布時再進行升級,開發者可能會發現自己的項目代碼無法通過編譯。所以請記住,Java 新的開發規則現在聲明可以在一個版本中棄用某個 API 方法,并在下一個版本中刪除它。

采用新版本 Java 的注意事項

在本節中,將概述在采用新版本 Java 之前必須考慮的一些注意事項/風險。

被新版本系列“綁定”

如果采用了 Java 12 并使用新的語言特性或新的 API,這意味著實際上你已將項目綁定到 Java 的新版本系列。接下來你必須采用 Java 13, 14, 15, 16 和 17,并且必須在下一個版本發布后的一個月內采用每個新版本

使用了新版本,每個版本的使用壽命為六個月,并且在發布后僅七個月就過時了。這是因為每個版本只有在六個月內提供安全補丁,發布后1個月的第一個補丁和發布后4個月的第二個補丁。7個月后,下一組安全補丁會發布,但舊版本不能獲取更新。

因此,你要判斷自身的開發流程是否允許升級 Java 版本,時間窗口方面會不會太狹窄?

升級的“絆腳石”

實際使用中有很多阻止我們升級 Java 的因素,下面列出一些常見的:

  • 開發資源不足:你的團隊可能會非常忙碌或規模太小,你能保證兩年后從 Java 15 升級到 16 的開發時間嗎?

  • 構建工具和 IDE:你使用的 IDE 是否會在發布當天支持每個新版本?Maven? Gradle 呢??如果不是,你有后備計劃嗎?請記住,你只有1個月的時間來完成升級、測試并將其發布到生產環境中。此外還包括 Checkstyle,JaCoCo,PMD,SpotBugs 等等其他工具。

  • 依賴關系:你的依賴關系是否都準備好用于每個新版本?請記住,它不僅僅是直接依賴項,而是技術堆棧中的所有內容。字節碼操作庫尤其受到影響,例如 ByteBuddy 和 ASM。

  • 框架:這是另一種依賴,但是一個大而重要的依賴。在一個月的狹窄時間窗口內,Spring 會每六個月發布一個新版本嗎??Jakarta EE(以前的 Java EE)會嗎?如果它們不這樣做會怎么樣?

云 / 托管 / 部署

你是否可以控制代碼在生產環境中的運行位置和方式?例如,如果你在 AWS Lambda 中運行代碼,則無法控制。AWS Lambda 沒有采用 Java 9或10,甚至沒有采用 Java 11。所以除非 AWS 提供公共保證以支持每個新的 Java 版本,否則根本無法采用 Java 12。

如何托管你的 CI 系統?Jenkins, Travis, Circle, Shippable, GitLab 會快速更新嗎?如果不是,你會怎么做?

對未來的預測

如果已經閱讀了上面的列表,并且你的代碼和流程可以應對。這十分好,但更重要的是要明白,你也在限制未來進行改變的能力。例如,你的代碼可能今天不在 AWS Lambda 上運行,但未來三年呢?

為采用新版本進行規劃

如果正在考慮采用新版本的 Java,建議你準備一份現在所依賴的所有內容的清單,或者可能在未來3年內會依賴的。你需要保證該列表中的所有內容都能正常工作,并與新版本一起升級,或者如果該依賴項不再更新,請制定好計劃。作者提供了他的清單:

  • Amazon AWS

  • Eclipse

  • IntelliJ

  • Travis CI

  • Shippable CI

  • Maven

  • Maven plugins (compile, jar, source, javadoc, etc)

  • Checkstyle, 以及相關的 IDE 插件和 maven 插件

  • JaCoCo, 以及相關的 IDE 插件和?maven 插件

  • PMD 和相關的 maven 插件

  • SpotBugs 和相關的 maven 插件

  • OSGi bundle metadata tool

  • Bytecode 工具(Byte buddy / ASM etc)

  • 超過 100 個 jar 包依賴項

說了這么多,作者當然不是鼓勵大家不進行升級,新語言特性帶來的好處以及性能增強會讓開發者受益,但升級背后的風險也應該考慮進去。

其他第三方產商的聲明

Spring 框架已經在視頻中表達了對 Java 12 的策略。關鍵部分是:

“Java 8 和 11 作為 LTS 版本會持續獲得我們的正式支持,對于過渡版本,我們也會盡最大努力支持。如果你升級到 Java 12,我們非常愿意和你合作,但它們不會獲得正式的生產環境支持。因為長期支持版本才是我們關注的重心,但對于 Java 12 及更高版本我們會盡最大的努力。”

作為典型軟件供應商的一個例子,Liferay 聲明如下:

Liferay 已決定不會對 JDK 的每個主要版本進行認證。我們將選擇遵循 Oracle 的主導并僅認證標記為 LTS 的版本。—— Liferay博客

總結

相信肯定已經有開發團隊采用了新版本的 Java,但希望他們是經過思考判斷之后做出的決定。除了文章中提到的問題,還會有很多其他在升級前需要思考的因素,歡迎在評論中留下你的看法。

總結

以上是生活随笔為你收集整理的我应该采用 Java 12 还是坚持使用 Java 11?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。