JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等
Java 9距離(希望)數(shù)月了,現(xiàn)在該討論一下即將發(fā)生的變化以及您應(yīng)該采取的措施
Java 9即將來(lái)臨(我們正在計(jì)算到達(dá)的日子 ),其中包含一系列新功能和改進(jìn)功能。 這就是為什么我們決定創(chuàng)建一份清單來(lái)準(zhǔn)備自己的事情,以及可能需要我們更改或改編我們代碼的任何事情的原因。
在下面的文章中,我們捆綁了一些您應(yīng)該了解的新功能,并了解它們可能會(huì)(或可能不會(huì))影響我們編寫(xiě)代碼的方式。 系好安全帶,我們將探索一個(gè)新的Java版本。
1.符合默認(rèn)的垃圾收集器
Java 9附帶了Garbage First Garbage Collector(G1 GC)作為其默認(rèn)的垃圾收集器(盡管如果我們確實(shí)愿意的話,我們?nèi)匀豢梢詫?duì)其進(jìn)行切換)。
G1是服務(wù)器樣式的垃圾收集器,設(shè)計(jì)用于具有大內(nèi)存的多處理器計(jì)算機(jī)。 它與其他垃圾收集器之間存在許多差異,包括串行,并行和CMS,我們?cè)谏弦黄恼轮幸呀?jīng)介紹了其中的一些。
為了讓您快速瀏覽,我們將重點(diǎn)介紹收集器之間的主要區(qū)別之一-結(jié)構(gòu)。 從Java 8開(kāi)始,垃圾收集器將堆分為兩部分:
- 年輕一代–分配和老化所有新對(duì)象
- 老一代–用于存儲(chǔ)長(zhǎng)期存在的物體
(直到Java 8,永久生成的第三部分,其中包含JVM所需的元數(shù)據(jù)來(lái)描述應(yīng)用程序中使用的類和方法)。
使用G1,堆被劃分為一組大小相等的堆區(qū)域,每個(gè)堆區(qū)域都是一個(gè)連續(xù)的虛擬內(nèi)存范圍。 G1支持大于4GB的堆,并且是并行,并發(fā)和增量壓縮的低暫停垃圾收集器。
G1已在JDK 7和8中支持,因此您可以立即嘗試并查看它是否適合您的應(yīng)用程序。 如果您不喜歡更改,或者只是喜歡使用舊的垃圾收集器之一,請(qǐng)不要擔(dān)心。 您仍然可以將選擇的垃圾收集器設(shè)置為JVM啟動(dòng)參數(shù)的一部分,因此它不會(huì)受到此更改的影響。
2.拼圖即將來(lái)臨(也許)
拼圖項(xiàng)目感覺(jué)有點(diǎn)像“ 延遲 ”一詞的同義詞。 這個(gè)項(xiàng)目有一個(gè)從Java 7開(kāi)始向Java 8過(guò)渡到Java 8并最終作為Java 9的一部分回退Java版本的歷史。
難怪,由于項(xiàng)目的復(fù)雜性。 Jigsaw旨在使Java模塊化并將JRE分解為可互操作的組件。 這意味著您將能夠創(chuàng)建針對(duì)項(xiàng)目實(shí)際需要的組件定制的按比例縮小的運(yùn)行時(shí)Jar(rt.jar)。
該項(xiàng)目旨在使Java可擴(kuò)展到小型計(jì)算設(shè)備,提高安全性和性能,并使開(kāi)發(fā)人員更輕松地構(gòu)建和維護(hù)庫(kù)。
這是一個(gè)至關(guān)重要的項(xiàng)目,因此必然會(huì)有一些挫折和延誤。 最近的延遲來(lái)自IBM和Red Hat,它們都是Java社區(qū)流程執(zhí)行委員會(huì)(JCP)的成員,他們對(duì)該項(xiàng)目投了反對(duì)票。
兩家公司表示對(duì)當(dāng)前的Jigsaw項(xiàng)目不滿意,當(dāng)時(shí)Red Hat建筑部副總裁Scott Stark 指出: “我們對(duì)Jigsaw的實(shí)施決策以及范圍和共識(shí)提出了許多擔(dān)憂。專家小組的努力”。
斯塔克在電子郵件中表示:“就目前而言,紅帽不會(huì)投票贊成JPMS(Java平臺(tái)模塊系統(tǒng))的公共評(píng)審草案,因?yàn)樗环螶ava社區(qū)的最大利益”。
IBM高級(jí)技術(shù)人員Tim Ellison參加了該決定,并宣布 “ IBM也投票反對(duì)”,這反映了我們的立場(chǎng),即JSR(Java規(guī)范請(qǐng)求)目前尚不準(zhǔn)備超越公開(kāi)審查階段并進(jìn)行最終草案草案”。
看起來(lái),Oracle可能需要重新考慮項(xiàng)目Jigsaw。 但是現(xiàn)在,我們將繼續(xù)追溯到最新的更新發(fā)布日期 。
3. Unsafe現(xiàn)在是Java 9的正式組成部分
從Java 6開(kāi)始,sun.misc.Unsafe是JVM中的關(guān)鍵API之一,但是它僅打算由核心Java類使用,而不能由開(kāi)發(fā)人員自己使用。 我們?cè)趺粗?#xff1f; 由于唯一的構(gòu)造函數(shù)已被私有化,因此其單例實(shí)例也被私有化。
該庫(kù)本身是用于執(zhí)行低級(jí), 不安全操作的方法的集合。 我們知道,標(biāo)題已將其放棄。 該庫(kù)的用途之一是使用allocate Instance方法跳過(guò)對(duì)象初始化階段或繞過(guò)構(gòu)造函數(shù)中的安全檢查。
但是,“下午知道早晨從未懷疑過(guò)的事情。” 許多庫(kù)開(kāi)始使用Unsafe,它成為許多項(xiàng)目的關(guān)鍵庫(kù)。 由于不安全,Oracle計(jì)劃將其完全刪除。
甲骨文產(chǎn)品管理高級(jí)總監(jiān)唐納德·史密斯(Donald Smith) 表示: “ sun.misc.Unsafe必須在火災(zāi)中死亡。 這是-等待-不安全。 它必須去。” 哎喲。 可以想象,Java社區(qū)對(duì)此并不滿意,并對(duì)此決定提出了抗議。
花費(fèi)了一段時(shí)間,但最終社區(qū)贏得了勝利,并且即將Unsafe封裝在Java 9中。為了使其安全起見(jiàn),此類中的許多方法的功能都可以通過(guò)變量handle來(lái)使用。
4. REPL
Java 9即將引入JShell,這是第一個(gè)正式的Java REPL(Read-Eval-Print-Loop)。 到目前為止,在Java中還沒(méi)有“本地”的REPL方法。 這到底是什么意思? 如果我們要運(yùn)行幾行Java來(lái)快速地將它們自己檢出,則必須將它們包裝在單獨(dú)的項(xiàng)目或方法中。
可以通過(guò)替代解決方案(例如Java REPL Web控制臺(tái)就是其中之一)來(lái)評(píng)估代碼段,例如聲明,語(yǔ)句和表達(dá)式,但是JShell補(bǔ)充了本機(jī)和官方支持。
換句話說(shuō),我們現(xiàn)在就可以在編寫(xiě)代碼片段后立即對(duì)其進(jìn)行測(cè)試,而不必完成整個(gè)項(xiàng)目。 如果您想今天嘗試一下,請(qǐng)查看我們的JShell動(dòng)手評(píng)論 。
有趣的事實(shí): Oracle指出JShell是根據(jù)學(xué)術(shù)反饋創(chuàng)建的。 學(xué)校采用具有REPL功能的語(yǔ)言,因?yàn)樗兄诮档途幊痰某跏紝W(xué)習(xí)曲線。
5.有趣的新語(yǔ)言變化
JDK 9中對(duì)核心庫(kù)進(jìn)行了一些增強(qiáng),因此我們決定專注于最重要的更改。 第一個(gè)是Stack-Walking API ,它引入了一種處理堆棧跟蹤的正式方法。 此類包括遍歷堆棧的方法,可在我們感興趣的任何時(shí)候?yàn)槲覀兲峁┊?dāng)前線程的概述。
換句話說(shuō),Stack-Walking API將更改遍歷堆棧跟蹤的方式。 如果您想了解有關(guān)此新功能的更多信息并了解我們的想法,請(qǐng)?jiān)诖颂幉榭次覀兊耐暾攀觥?
Java 9還將引入java.util.concurrent.Flow庫(kù),該庫(kù)將包含嵌套在新類Flow中的支持Reactive Streams發(fā)布-訂閱框架的接口。 查看我們對(duì)該類及其帶來(lái)的變化的更深入的了解。
其他將更新的庫(kù)包括Process API ,它將改進(jìn)對(duì)操作系統(tǒng)進(jìn)程的控制和管理; Compact Strings將為字符串提供更節(jié)省空間的內(nèi)部表示形式; Enhanced Deprecation ;改進(jìn)@Deprecated注釋,以提供有關(guān)規(guī)范中API的狀態(tài)和預(yù)期配置
Java 9還將包括一組小的語(yǔ)言更改集,作為Project Coin的一部分,從合法標(biāo)識(shí)符名稱集中刪除下劃線(從Java 8開(kāi)始),并支持私有接口方法。
這只是即將進(jìn)行的更改的一小部分,您可以在此處查看 Oracle所做的完整正式列表。
最后的想法
Java 9即將搖搖欲墜,對(duì)此我們?cè)僖膊粫?huì)感到興奮。 但是,盡管在正式發(fā)布之日可能會(huì)開(kāi)始使用它,但我們建議您在開(kāi)始使用它之前檢查一下環(huán)境和代碼中需要做的事情。 或就像Ice Cube曾經(jīng)說(shuō)過(guò)的,最好在破壞自己之前先檢查一下自己 。 安全比后悔好,尤其是在代碼方面。
如果您是早期采用者,或者迫不及待想嘗試Java 9,則可以立即進(jìn)行檢查 。
翻譯自: https://www.javacodegeeks.com/2017/05/jdk-9-checklist-project-jigsaw-sun-misc-unsafe-g1-repl.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java更好的语言_Java,如果这是一
- 下一篇: HORI 推出《太鼓之达人》专用太鼓控制