四虎影视库国产精品一区-四虎影视库-四虎影视久久久免费-四虎影视久久久-四虎影视久久-四虎影视精品永久免费网站

TEL:15195455103

Java培訓(xùn) > Java知識 >

java的變化有哪些

作者:南京????來源:南京????發(fā)布時(shí)間:2019-12-28 09:34????瀏覽量:86

  我們在《2018 編程語言流行度大調(diào)查》中談到,在用戶喜愛和關(guān)注的編程語言中,Java獨(dú)領(lǐng)風(fēng)騷。其中,Java 9關(guān)注度不斷上升,62% 的人希望在 2018 年更多地關(guān)注 Java 9,此外有三分之一的參與者表示對即將到來的Java 10 和 11版本很感興趣。

  在過去的一年中Java經(jīng)歷了一段時(shí)間的動蕩,今年Java又有什么新進(jìn)展呢?本文讓我們一起來看看Java的狀況吧。

  2017年是Java界動蕩的一年。期待已久的Java 9帶來了許多的變化和有趣的新功能,同時(shí)Oracle也宣布了JDK新的發(fā)布時(shí)間表。而這一切只是個(gè)開始。過去開發(fā)人員常常抱怨Java的發(fā)展速度不夠快。我認(rèn)為這些抱怨將在不久的將來消失,甚至有可能帶來意外的驚喜。

  從2018年開始,JDK建立了全新的發(fā)布時(shí)間表。以前一次大的版本升級需要等好幾年,現(xiàn)在則縮短為每隔6個(gè)月發(fā)布一次小版本。繼2017年9月Java 9發(fā)布之后,Java 10將在2018年3月發(fā)布,以及之后更多的新版本都將很快到來。

  歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流:611481448

  群內(nèi)提供mf的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代!

企業(yè)技術(shù)棧概覽

  大多數(shù)企業(yè)項(xiàng)目不僅使用JDK,還依賴一系列的企業(yè)級函數(shù)庫,如Spring Boot、Java EE等,而這些函數(shù)庫也將在接下來幾個(gè)月中得到升級。我將在本文中重點(diǎn)討論JDK,但是首先讓我們來看看Java界中兩個(gè)主要的企業(yè)技術(shù)棧將有哪些變化。

  Spring開發(fā)團(tuán)隊(duì)正在努力開發(fā)Spring Boot 2,并在今年1月份發(fā)布了第一個(gè)RC版本。該團(tuán)隊(duì)并沒有在API方面做出重大的變化,也不打算在終版本發(fā)布之前添加任何新功能。所以,如果你的項(xiàng)目中用到了Spring Boot,那么好現(xiàn)在仔細(xì)研究新版本,并開始計(jì)劃現(xiàn)有Spring Boot應(yīng)用程序的更新。

  在2017年年底,Oracle將Java EE標(biāo)準(zhǔn)移交給了由Eclipse基金會管理的EE4J項(xiàng)目。正如大家所料,移交這樣的一個(gè)大項(xiàng)目不可能在幾天內(nèi)完成,其中有很多組織和技術(shù)方面的工作需要完成。Java EE需要一個(gè)新名字并建立全新的開發(fā)流程。另一方面,保存在各種bug跟蹤工具中的源代碼和二進(jìn)制文件的移交仍在進(jìn)行中。開發(fā)者還需要等待很長一段時(shí)間,才能看到此次移交帶來的效果,以及更強(qiáng)大的社區(qū)參與。

縮短JDK的發(fā)布和支持周期

  Oracle去年宣布將在2018年內(nèi)發(fā)布兩個(gè)新的JDK版本。以往Oracle一貫秉承緩慢的版本發(fā)布節(jié)奏,每隔幾年才發(fā)布一個(gè)主版本,其中包含大量的變化,從今年起將改為每6個(gè)月發(fā)布一個(gè)較小的版本。這一變化可以加速Java平臺的創(chuàng)新,還可以降低Java更新帶來的風(fēng)險(xiǎn)。而Java開發(fā)人員可以更加容易地熟悉小版本的新變化,并將其應(yīng)用到項(xiàng)目中。

  我認(rèn)為這對Java界是個(gè)非常積極的改變,它將為Java語言的開發(fā)增添新動力,JDK團(tuán)隊(duì)也可以更快地適應(yīng)和創(chuàng)新。

JDK 10帶來的變化和新功能

  由于發(fā)布周期較短,Java 10只包含少量的變化。請參照OpenJDK網(wǎng)站公布的有關(guān)JDK 10的新消息(http://openjdk.java.net/projects/jdk/10/),其中包含12個(gè)JEP(JDK Enhancement Proposal,JDK改進(jìn)提案)。

  其中值得一提的變化是局部變量的類型推斷(JEP 286,http://openjdk.java.net/jeps/286)。其次你應(yīng)該了解下新增的基于時(shí)間的版本命名方式(JEP 322,http://openjdk.java.net/jeps/322),以及G1(或稱Garbage First垃圾收集器)開始支持并行Full GC(JEP 307,http://openjdk.java.net/jeps/307)。

類型推斷

  JDK 10終于引入了類型推斷。許多其他靜態(tài)類型語言很早就已經(jīng)支持這個(gè)功能了,眾多Java開發(fā)人員一直希望引入這項(xiàng)功能。

  JEP 286引入了關(guān)鍵字var,簡化了局部變量的聲明,并由編譯器根據(jù)初始化代碼推斷變量的類型。以往我們必須寫:

  List paramNames = List.of("host.name","host.port");Configuration config = initializeConfig(paramNames);

現(xiàn)在可以簡化為:

  var paramNames = List.of("host.name","host.port");var config = initializeConfig(paramNames);

  以上代碼中,關(guān)鍵字var替代了冗長的變量聲明。這可以增加代碼的閱讀性,特別在代碼有合理的變量命名規(guī)則,并且變量僅在聲明后使用幾次的情況下尤為明顯。

  如果想更深入地了解JEP 286以及使用方法,可以參照Nicolai Parlog的這篇文章:https://blog.codefx.org/java/java-10-var-type-inference/。

北大青鳥軟件學(xué)校

基于時(shí)間的版本命名方式

  從Java 10開始,Java的版本號格式將發(fā)生變化,以更好地支持基于時(shí)間的發(fā)布方式。

  新的發(fā)布方式帶來的大難點(diǎn)在于:版本的實(shí)際內(nèi)容可能發(fā)生變化。由于開始時(shí)唯一可以確定的只有新版本的發(fā)布時(shí)間,所以如果新功能的開發(fā)時(shí)間比預(yù)期長,無法在新版本發(fā)布時(shí)完成,就不能進(jìn)入新版本。因此版本號需要以時(shí)間點(diǎn)為準(zhǔn),而非版本內(nèi)包含的變更內(nèi)容。

  JEP 322定義的版本號格式為:$ 功能號.$ 臨時(shí)號.$ 更新號.$ 補(bǔ)丁號,具體使用方法如下:

  開發(fā)團(tuán)隊(duì)將在每6個(gè)月發(fā)布一個(gè)新功能版本,并將版本號的“$ 功能號”加1。

  2018年3月發(fā)布的版本為JDK 10,那么9月份的新版本就是JDK 11。開發(fā)團(tuán)隊(duì)在JEP 223中表示,他們希望每次新功能發(fā)布可以至少包含一到兩個(gè)重要功能。

  “$ 臨時(shí)號”可以靈活使用,目前以6個(gè)月為期的發(fā)布方式中并沒有用到此項(xiàng),所以到目前為止,這個(gè)數(shù)字始終是0。

  開發(fā)團(tuán)隊(duì)還將在功能發(fā)布之間穿插小的升級,這種升級不會包含不兼容的改動。他們可以在功能發(fā)布后的1個(gè)月或3個(gè)月,發(fā)布一次小的升級,屆時(shí)可以將“$ 更新號”加1。

G1的并行Full GC

  對于大多數(shù)開發(fā)者來說,這只是個(gè)很小的變化。有的應(yīng)用程序甚至都不會注意到這個(gè)變化。

  JDK 9中G1成了默認(rèn)的垃圾回收器。G1的設(shè)計(jì)目的旨在避免全面的垃圾回收,但是并不代表這種現(xiàn)象永遠(yuǎn)不會發(fā)生。不幸的是,G1在執(zhí)行全面回收時(shí)僅使用了單線程的“標(biāo)記-清理-壓縮”算法,與之前的并行回收器相比這可能導(dǎo)致性能的下降。

  JEP 307實(shí)現(xiàn)了這一算法的多線程版,從而解決了該問題。從JDK 10開始,它將使用與Young GC和Mixed GC同樣多的線程數(shù)。

  因此,如果應(yīng)用程序需要強(qiáng)制垃圾回收器執(zhí)行全面的回收,那么JDK 10可以提高效率。

有關(guān)JDK 11的計(jì)劃

  JDK 10還沒有正式發(fā)布,而距離JDK 11的發(fā)布只有7個(gè)月了。所以,其開發(fā)團(tuán)隊(duì)已經(jīng)制定了幾個(gè)JEP的計(jì)劃,請參照2018年第二次新功能發(fā)布的信息:http://openjdk.java.net/projects/jdk/11/。

  除了刪除廢棄的Java EE和CORBA模型(JEP 320)、以及引入新的垃圾回收器(JEP 318)之外,JDK 11還有可能引入動態(tài)的類文件常量(JEP 309),以及在隱含類型的匿名表達(dá)式中支持關(guān)鍵字var(JEP 323)。

  JDK 11目前的范圍體現(xiàn)了縮短發(fā)布周期所帶來的優(yōu)勢,JEP 309和310引入了新功能,而其他兩個(gè)JEP則負(fù)責(zé)通過迭代方法改進(jìn)已有功能。

  2017年9月JDK 9發(fā)布的時(shí)候,Java EE和CORBA模塊就被廢棄了。一年以后,隨著JDK 11的發(fā)布,JEP 320將把它們從JDK中刪除。所以它們不會在Java中逗留太久,很快就要計(jì)劃刪除了。

  繼JEP 286在JDK 10中引入局部變量的類型推斷后,JEP 323將進(jìn)一步提升這一功能。將來我們可以看到更多關(guān)于這方面的改進(jìn)。發(fā)布周期縮短后,團(tuán)隊(duì)可以分步在一次或多次功能發(fā)布中完成一個(gè)大功能,從而降低發(fā)布的難度。

縮短支持周期需要快速適應(yīng)

  Oracle在推出新的發(fā)布方式的同時(shí),也改變了他們的支持方式。這個(gè)新的方式對短期發(fā)布和長期發(fā)布的支持所有不同。

  短期發(fā)布(如Java 9和10等),相關(guān)的面向公眾的支持會在下個(gè)版本發(fā)布時(shí)終止。因此Java 9的支持將于2018年3月停止,而2018年9月后Java 10也無法再獲得支持。

  Java 11是一次長期發(fā)布。Oracle對這類發(fā)布的支持期限更長,但是到目前為止,他們還沒有宣布對Java 11的支持會持續(xù)到什么時(shí)候。

  應(yīng)用程序開發(fā)者需要決定是否要每6個(gè)月更新一次Java版本,還是選擇多等幾年使用長期的發(fā)布版本。另外,Oracle鼓勵所有人使用Java SE的高級產(chǎn)品,它們的每個(gè)長期發(fā)布版都包含至少5年的支持。(相關(guān)推薦:大數(shù)據(jù)程序員工資高嗎

總結(jié)

  過去,大量開發(fā)者抱怨Java的升級太慢,2018年后這種情況將有所改善。全新的、6個(gè)月為期的發(fā)布周期和相應(yīng)的支持模型,可以加速已有應(yīng)用程序的升級,并定期引入新功能。加上Java EE和Spring等已有框架的提升,Java界內(nèi)將出現(xiàn)全新的活力。另一方面,那些若干年才更新一次應(yīng)用程序的各大公司要做好心理準(zhǔn)備哦。


本文內(nèi)容、圖片由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2353260942@qq.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。(如需投稿聯(lián)系管理員開通!)

? CopyRight njjava.com ???? 蘇ICP備14052071號

搶試聽名額

名額僅剩66名

教育改變生活

WE CHANGE LIVES