Java 都已經 25歲了,想必比在座的不少同窗年齡還大吧。java
在 JDK 版本的世界裏,歷來都是 Oracle 發他的新版本,咱們繼續用咱們的老版本。4 年以前用 JDK 7,後來終於升級到了 JDK 8。自從升級了沒多久,JDK 就開始了半年發一個新版本的節奏,陸續發佈了 9 、十、十一、十二、13,彆着急,還有 14,直到前幾天(2020年5月28日) 日,連 JDK 15 的搶先試驗版都出來了,不由要說,Java 你真行。編程
2020年2月,由 Snyk 和 The Java Magazine 聯合推出發佈的 2020 JVM 生態調查報告 顯示有 34% 的用戶使用 Oracle JDK,57% 的用戶使用 OpenJDK。其中 Java 8 的使用者依然維持在 64% 過半數的水平。安全
要知道 2018年,有 70% 的用戶使用 Oracle JDK,21% 的用戶使用 OpenJDK。其中 Java 8 的使用者佔到了 79%。jvm
這都兩年過去了,可見 Oracle 的收費政策嚇走了很多開發者,轉而投向 OpenJDK 的懷抱。而 Java 8 的使用者減小了 15 % ,也不算不少,這 15% 應該是開始使用 JDK 9 或 JDK 11 去了。但 Java 8 依然過半啊,因此說,如今用 Java 8 也不用慌,畢竟大多數人和我同樣也都還在用 Java 8,真香。函數式編程
都已經 JDK 15 了,爲何還有這麼多公司使用舊版本。函數
不瞞各位說,用 Java 8 已經算是很是優秀,很是有上進心的了,有的公司還在使用 7,更有甚者還在用 6,你說是否是很 6。不是道聽途說,我認識的人裏面就有用 JDK 1.6 的,感受不是在同一個世界。工具
之因此會出現這種情況,是由於升級版本耗時費力,最重要的是有可能影響服務的穩定性,雖說 Java 是向後兼容的,可是誰知道是否是有坑在裏面。在沒有重大安全漏洞或重大性能提高的狀況下,大多數公司仍是以穩定性爲主,既然 Java 8 已經能知足業務需求了,那就用它好了。性能
如今又增長了緣由,就是從去年 1 月份開始對 Oracle JDK 的商業用途收費了,用着 Oracle JDK 的廠子更有理由不升級了,爲了節約成本啊,對不對。url
收費是近兩年對 Oracle JDK 的一大改變,還有一個就是發版方式的改變。操作系統
收費
從去年1月份開始,Oracle JDK 開始對 Java SE 8 以後的版本開始進行商用收費,確切的說是 8u201/202 以後的版本。若是你用 Java 開發的功能若是是用做商業用途的,若是還不想花錢購買的話,能無償使用的最新版本是 8u201/202。固然若是是我的客戶端或者我的開發者能夠免費試用 Oracle JDK 全部的版本。
發版方式
在 JDK 9 發佈以前,Oracle 的發版策略是以特性驅動的,只有重大的特性改變纔會發佈大版本,好比 JDK 7 到 JDK 8,中間會發多個更新版本。而從 JDK 9 開始變爲以時間驅動的方式。發佈週期爲6個月一個大版本,好比 JDK 9 到 JDK 10,3個月一次補丁版,3年一個 LTS(長期支持版本)。
發版時間穩定了,使用者就能夠相應的根據發版節奏調整所使用的 Java 版本了。可是付費使用好像又增長了成本,一直無償使用的東西,忽然收費了,好像有點接受不了,尤爲對於小公司而言。
上面所說的都是 Oracle JDK 。那麼若是既想要更新版本又不想花錢怎麼辦呢,固然也是有辦法的。能夠選擇 Open JDK。
Open JDK 是徹底開源免費的,由 Oracle 以及 Redhat 等開源組織維護。Oracle JDK 只是一個 Open JDK 的發行版。他們兩個的關係就好像是原生安卓系統和各個手機廠商定製的操做系統的關係。Oracle JDK 就對應原生安卓系統,好比小米的 MI UI 就對應 Oracle JDK。另外,除了 Oracle JDK,還有其餘的 Open JDK 的發行版,好比 AWS 的 Amazon Corretto,阿里巴巴的 Alibaba Dragonwell 等等。
紅帽將接替 Oracle 維護 JDK 的長期支持版,好比 OpenJDK 8 和 OpenJDK 11,而且它和 Oracle JDK 的差異已經很是小了,能夠放心使用。
然而,對於新版本的新特性,我也只是看一看,學一學,而後專心的用 Java 8 開發。
這就像是一個謎
有些現象就更有意思了,雖然說不少公司都已經在用 JDK 8了,可是呢,不少同窗仍是把它當作 JDK 1.7 來用,爲何這麼說呢,JDK 8 的新特性,對不起,一個不用。
JDK 8 的新特性有以下幾個:
- Lambda 表達式 − Lambda 容許把函數做爲一個方法的參數(函數做爲參數傳遞到方法中)。
- 方法引用 − 方法引用提供了很是有用的語法,能夠直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可使語言的構造更緊湊簡潔,減小冗餘代碼。
- 默認方法 − 默認方法就是一個在接口裏面有了一個實現的方法。
- 新工具 − 新的編譯工具,如:Nashorn引擎 jjs、 類依賴分析器jdeps。
- Stream API −新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。
- Date Time API − 增強對日期與時間的處理。
- Optional 類 − Optional 類已經成爲 Java 8 類庫的一部分,用來解決空指針異常。
就說 Stream API 吧,這麼好用的 API,對集合的過濾、篩選、類型轉換簡直是友好方便到不行,結果呢,仍是不少同窗壓根兒就沒用過。
另外,日期的處理,好比 LocalDate、LocalTime 等,也都比以前的 API 好用不少,但是呢,仍是不少同窗不用,寧願用着以前已經用 @Deprecated 註解爲過時的方法。
最後,祝願
不知道我還要用 Java 多久,也許兩年,也許五年,也許十年,也許是一生吧。祝願 Java 常在常新,幫你漲薪水。