1. 程式人生 > >2018年的java變成了什麼樣

2018年的java變成了什麼樣

在過去的 2017 年中,Java 世界中發生了許多前所未有的變化,其部分原因在於 Java 9 的推出,儘管它推後了近一年的時間。

然而,隨著時間的推移人們可能會發現,推出 Java 9 版本的意義,遠沒有隨該新版本一併推出的 Java 版本釋出週期變更為每六個月一次的意義更為重大。Java 版本釋出週期的變更,意味著在 2018 年將會推出兩個 Java 新版本,而非一個。

2018 年將推出的第一個新版本稱為 Java 10,第二個新版本是 Java 11。雖然這一命名方案與現有命名看上去毫無二致,但是新版本只有經過重大公開辯論並達成最終共識後,才能得以推出。

鑑於新版本的推出將切換到這樣一種嚴格按時間點的節奏,預計這將使每個新版本中釋出的 Java 特性,比迄今為止所能看到的範圍更為縮減。就 Java 10 而言,這意味著新特徵的數量將相當之少。

InfoQ 先前曾報道了 Java 10 中的主要特性,一會也會再說。此後,該版本中新增特性的僅是一些細微的(Additional Unicode Extensions)、清理性質的(移除了原生的頭部生成工具,提供預設的 CA 根證書)、實驗性質的(基於 Java 的 JIT 編譯器 Graal),或是當前為利基性質的 (對異構記憶體架構的支援)。

至於 Java 11 中考慮了哪些功能,目前更是雲山霧罩。我們只能確認下列幾個功能在考慮範圍內:

  • Epsilon。一種對 Null 垃圾回收演算法的參考實現。

  • Dynamic Class File Constants 。一種主要針對軟體庫編寫人員及使用動態特性 invokedynamic 高階開發人員的平臺特性。

  • 執行時追蹤 JIT 編譯事件。

一旦釋出日期臨近,該特性列表肯定會被填滿。但是值得注意的是,列表中目前尚未提及 Java 值型別。這也許並不出乎意料,因為實現值型別需要對 Java 語言和執行時做重大更改,並對 Java 型別系統(包括泛型)做完全重構。

儘管當前原型已工作,但是距特性交付尚有很長的路要走。當前狀態只適用於低級別的平臺開發人員,以及那些習慣於使用基於反射(reflective)或 MethodHandle 工具的開發人員。看上去令人不可思議的是,儘管值型別將作為 Java 11 的一部分發布,但是 Oracle 依然尚未對該特性預期於何時釋出公開發表任何評論。

但是,如果值型別並未作為 Java 11 的一部分提供,這將會產生連鎖反應。包含值型別的首個長期支援(LTS)版本將不會在 2021 年 9 月前釋出。

在撰寫本文時,我們尚不清楚已在提案中的資料類(data classes)特性是否會出現在 Java 11 中。正如 Java 語言架構師 Brian Goetz 所介紹的:

資料類將用於解決類的表示與 API 合約間存在的複雜間接關係。通過使用資料類,編譯器可以填入一些常規類成員。

資料類提案與 Scala 的 Case 類具有一些相似之處。但是 Goetz 明確指出,資料類的設計空間中還存在一些可能的變動,該特性的整體語義含義要比目前我們能看到的更為深入。目前的資料類概念是與同處於開發過程中的模式匹配特性深度關聯在一起的。但是,這兩個特性可能會在不同的版本中提供。

與上面兩個特性都相關的是,未來可能對 Switch 形式做改進。Switch 語句塊將可作為表示式或宣告使用。

該特性相對較小,有望在 Java 11 中交付,即便資料類或模式匹配特性尚未實現。但目前情況看,該特性仍然是一個 JEP 草案。

最終將於 9 月釋出的版本,其特性完成日期是 2018 年 6 月。因此,在 Java 11 的整體形態浮出水面之前,我們必須再等待數月時間。

說回到 Java 10,它的新特性還在確認當中,所以從現在到 GA 版中間還是有可能加入重大的變更。不管怎樣,在這四個月裡,開發者還是可以期待一些新的特效能夠被新增到 Java 10 中。

新的特性和增強一般通過 Java Enhancement Process(JEP)或 Java Community Process 標準請求(JSR)進行跟蹤。因為 Java 10 的時間線較短,範圍也相對較小,所以 Java 10 的變更將通過 JEP 進行跟蹤。

有望被包含在 Java 10 中的特性是那些已經處於 Targeted 或 Proposed 狀態的 JEP,它們包括:

  • 286:本地變數型別推斷

  • 296:統一 JDK 倉庫

  • 304:垃圾回收器介面

  • 307:G1 的並行 Full GC

  • 310:應用程式類資料共享

  • 312:ThreadLocal 握手機制

JEP 296 是一次純粹的清理工作,而 JEP 304 加強了不同垃圾回收器的程式碼隔離,併為垃圾回收器引入更簡潔的介面。

JEP 304 意味著廠商可以更自由地選擇特定的 GC 演算法來構建 JDK,因為現在有多種處於開發當中的 GC,如 Shenandoah、ZGC 和 Epsilon,在未來可以使用這些 GC 演算法。社群也在努力棄用甚至移除 Concurrent Mark Sweep(CMS)垃圾回收器,只是目前還沒有可用的替代品。

比較有意思的變更或許是 JEP 286,增強的本地變數型別推斷可以讓開發者免去很多變數申明模板程式碼。也就是說,在下一個版本中,下面的變數宣告是合法的:

var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream();          // infers Stream<String>

這種語法只限於初始化過的本地變數和 for 迴圈中的本地變數。

它其實是個語法糖,在語義上並沒有任何變化。不過,該特性有可能在 Java 開發者當中引起熱議。其他三個變更都將在效能方面帶來一些影響。

JEP 307 解決了 G1 垃圾回收器的一個問題——截止到 Java 9,G1 的 Full GC 採用的是單執行緒演算法。也就是說,G1 在發生 Full GC 時會嚴重影響效能。JEP 307 的目的就是要採用並行 GC 演算法,在發生 Full GC 時可以使用多個執行緒進行並行回收。

JEP 310 對類資料共享(CDS)進行了擴充套件,JVM 可以將一些類記錄到一個共享的壓縮檔案裡,在 JVM 下一次啟動時可以將這個檔案對映到 JVM 程序,以此來減少啟動時間。該檔案也可以在多個 JVM 間共享,在同一個機器上執行多個 JVM 時,這樣做可以減少記憶體佔用。

該功能在 Java 5 中就已存在,但截止到 Java 9,該功能只允許 bootstrap 類載入器載入壓縮的類。JEP 310 的目的是擴充套件該功能,讓應用程式和自定義類載入器也能載入壓縮的類。該特性目前僅在 Oracle JDK 中可用,OpenJDK 並不包含該特性。

JEP 計劃將該特性從 Oracle 私有倉庫中遷移到公共倉庫,從 Java 10 往後,常規版本(非 LTS)將會使用 OpenJDK 的二進位制包。此舉表明有使用者正在使用該特性,所以需要在 OpenJDK 中也支援該特性。

JEP 312 旨在改進虛擬機器效能,在應用程式執行緒上呼叫回撥不再需要執行全域性虛擬機器安全點操作,這意味著 JVM 可以停止單個執行緒。一些底層小改進包括:

  • 降低堆疊跟蹤取樣所帶來的影響(如進行 profiling)。

  • 減少訊號依賴以獲得更好的堆疊取樣。

  • 通過停止單獨執行緒改進偏向鎖。

  • 從 JVM 移除了一些記憶體屏障。

從整體來看,Java 10 似乎並沒有包含重大新特性或效能改進。這是可以理解的,畢竟這是新發布週期下的第一個版本。


在學習java的童鞋,在學習上難免遇到不懂的問題,加java的學習裙,群裡每天大神直播課,如果需要資料的也可以分享給大家(667292192),不管你是小白還是進階,都可以加進來交流學習的。

相關推薦

2018java變成什麼樣

在過去的 2017 年中,Java 世界中發生了許多前所未有的變化,其部分原因在於 Java 9 的推出,儘管它推後了近一年的時間。然而,隨著時間的推移人們可能會發現,推出 Java 9 版本的意義,遠沒有隨該新版本一併推出的 Java 版本釋出週期變更為每六個月一次的意義更

2018Java程式設計師後端學習路線?你只需要這一張圖!

前言 學習路線圖往往是學習一樣技術的入門指南。網上搜到的Java學習路線圖也是一抓一大把。 今天我只選一張圖,僅此一圖,足以包羅Java後端技術的知識點。所謂不求最好,但求最全,學習Java後端的同學完全可以參考這張圖進行學習路線安排。 當然,有一些知識點是可選的,並不是說上面有的

2018Java面試題整理,拿高薪全靠它

面試是我們每個人都要經歷的事情,大部分人且不止一次,這裡給大家總結最新的2018年面試題,讓大家在找工作時候能夠事半功倍。 1. Switch能否用string做引數? a. 在 Java 7 之前, switch 只能支援byte,short,char

2018Java程式設計師的現狀,風光背後的危機!

2018年,Java程式設計師面臨更加激烈的競爭。 不得不承認,經歷過行業的飛速發展期,網際網路的整體發展趨於平穩。為什麼這麼說? 對於進可攻前端,後可守後端大本營的 Java 程式設計師而言,雖然供應逐年上漲,但是市場似乎對他們依然青睞有加。這些承擔著技術招聘市場中高供給高需求的 Java

2018 Java程式設計師學習大資料最佳之路!

隨著大資料時代的到來,有很多Java程式設計師想要轉行大資料。 不得不說,大資料行業可以說是為Java程式設計師量身打造的一個朝陽行業?為什麼要這麼說呢? 因為Java工程師轉型大資料具有天然進階優勢,不僅僅是前景和薪資等。技術層面來說,大資料使用的Hadoop(在分散式伺服

2018Java大企業面試問題

Cvte提前批 阿里內推 便利蜂內推 小米內推 金山wps內推 多益網路 拼多多學霸批 搜狗校招 塗鴉移動 中國電信it研發中心 中興 華為

架構師推薦:2018 Java 程式設計師必讀的十本書推薦

如果你是一名 Java 程式設計師,正在考慮 2018 年讀什麼書,那麼這篇文章正適合你。本文中,我將分享 10 本有關 Java、Spring 及其他相關技術的書籍。 這裡面既有適合經驗豐富的 Java 程式設計師的書,它們介紹了架構、雲開發、微服務、Java 9、Spring 5,以及用於提高生

骨灰級架構師推薦:2018 Java程式設計師必讀的十本書推薦!

大家好,如果你是一名 Java 程式設計師,正在考慮 2018 年讀什麼書,那麼這篇文章正適合你。本文中,我將分享 10 本有關 Java、Spring 及其他相關技術的書籍。 這裡面既有適合經驗豐富的 Java 程式設計師的書,它們介紹了架構、雲開發、微服務、Java 9、Spring 5

2018java面試題總結(附答案)

1.什麼是B/S架構?C/S架構? B/S(Browser/Server),瀏覽器/伺服器程式; C/S(Client/Server),客戶端/服務端,桌面應用程式。 2.網路協議有哪些? HTTP:超文字傳輸協議; SMPT:簡單郵件協議; TELNET:遠端終端

2018java面試題整理

1.什麼是執行緒區域性變數ThreadLocal 執行緒區域性變數是侷限於執行緒內部的變數,屬於執行緒自身所有,不在多個執行緒間共享。Java提供ThreadLocal類來支援執行緒區域性變數,是一種實現執行緒安全的方式。但是在管理環境下(如 web 伺服器)使用執行緒區域性變數的時候要特別

2018Java開發值得學習的10大技術

作為一個開發人員,我們最大的挑戰就是保持自己瞭解新的技術。技術變化很快,你大概每兩年就會看到一個新版本的程式語言和框架。 就拿2017年來說,AR、VR、區塊鏈、人工智慧等等已經撲面而來了。除了這些離我們較遠的,說幾個離我們最近的:JDK 9、 Spring 5

2018 Java面試經歷

Java面試經歷 2018年10月 北京奧科美技術服務有限公司 初試: 1.Java基本資料型別(各自所佔的位

2018 Java 程式設計師必讀的十本書

大家好,如果你是一名 Java 程式設計師,正在考慮 2018 年讀什麼書,那麼這篇文章正適合你。本文中,我將分享 10 本有關 Java、Spring 及其他相關技術的書籍。 這裡面既有適合經驗豐富的 Java 程式設計師的書,它們介紹了架構、雲開發、微服務、Ja

2018JAVA基礎面試題和高階面試題總結

Java面試前需要做足各方面的準備工作,肯定都會瀏覽大量的面試題,本人也不例外,通過瀏覽面試題和以往的面試經歷,總結了從初級到中級以及高階的面試題,供大家學習討論。 更多推薦↓↓↓ Jav

2018JAVA面試題整理(1)--基礎

最近個人也在準備找工作的事情!自己整理了一些JAVA面試題供大家參考,大家一起努力,找到一份好工作!如果大家還有一些基礎的面試題,可以評論給我!我做整理。謝謝大家分享。後續會提供比較難得面試題。Java面向物件的特徵是什麼三大特徵是:封裝、繼承和多型。(問到這些儘量回答出其含

2018人工智慧帶來哪些變化,2019又會發生什麼?

人工智慧(AI)已經持續火熱了幾年,在2018年人工智慧技術讓企業和個人感受到了哪些變化,在發展的過程中我們發現了人工智慧技術的拿些問題?2019年人工智慧又會朝什麼樣的方向發展?一起看一看Red Hat的兩位分析師的觀察和看法。 AI是激發大眾和商業想象力的技術之一,在科幻小說中早已成為最受歡迎的主題,現

2018java架構師分散式效能優化 附帶原始碼

下載地址:百度網盤下載 教程內容:第1章STL實用入門教程第2章C++編碼規範第3章GDIGDI+從入門到精通第4章COM實用入門教程第5章Windows視窗高階程式設計第6章Boost深入剖析之使用技巧第7章VC++實戰除錯技巧第8章靜態庫與動態庫程式設計第9章面向物件實踐程式設計第10章檔案打包技術詳解

"2018Java程式設計師,風光背後的危機"——你知道程式設計師的現狀嗎?

近日網上有一篇關於Java程式設計師職場生存現狀的文章“2018年 Java 程式設計師,風光背後的危機”,在Java程式設計師圈子裡引起了廣泛關注和熱議。 2018年,Java 程式設計師面臨更加激烈的競爭。 不得不承認,經歷過行業的飛速發展期,網際網路的整體發展趨於

2018java軟體工程師就業前景會怎麼樣呢?

關於Java軟體工程師就業前景這個問題,做為從事5年Java開發的小編給大家整理了關於java軟體工程師就業前景的資訊,一起看看吧。   據有關資料顯示,目前,我國對軟體人才的需求已達20萬,並且以每年20%左右的速度增長。在未來5年內,合格軟體人才的需求將遠大於供給。20

2018Java面試題預測整理

面試是我們每個人都要經歷的事情,大部分人且不止一次,這裡給大家總結最新的2016年面試題,讓大家在找工作時候能夠事半功倍。1.Switch能否用string做引數?a.在 Java 7 之前, switch 只能支援byte,short,char,int 或者其