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