javaone_JavaOne 2015:为JDK 9做准备– blog @ CodeFX
javaone
JavaOne 2015看到了Project Jigsaw團隊關(guān)于Java 9中的模塊化的一系列討論 。它們都是非常有趣的,并且充滿了寶貴的信息,我敦促每個Java開發(fā)人員都注意它們。
除此之外,我想給社區(qū)一種搜索和引用它們的方法,因此我在這里總結(jié)一下:
- 準(zhǔn)備JDK 9
- 模塊化開發(fā)簡介(即將出版)
- 先進的模塊化開發(fā)(即將推出)
- 拼圖項目的幕后花絮(即將上映)
我努力鏈接到盡可能多的外部資源,以使各個帖子簡短。 播放圖標(biāo)將帶您直接進入Oracle每天為每個房間在線播放的長達(dá)十小時的視頻流中的相應(yīng)點。 (很棒的格式,伙計們!)(到目前為止)他們不僅弄亂了聲音,而且似乎還訴諸于低音量的單聲道聲音,因此請確保提高音量。
讓我們開始為JDK 9做準(zhǔn)備!
總覽
- 內(nèi)容 :從JDK 8遷移到JDK 9時的期望
- 演講者 :艾倫·貝特曼
- 鏈接 : 視頻和幻燈片
背景
艾倫·貝特曼(Alan Bateman)通過提供一些背景信息來開始演講。
JDK 9和項目拼圖目標(biāo)
快速回顧拼圖的目標(biāo)。 有關(guān)更多詳細(xì)信息,請參閱我關(guān)于它們的文章 。
模塊化景觀
簡要介紹了Jigsaw項目的各種Java規(guī)范請求 (JSR)和JDK增強建議 (JEP)。
兼容性
Bateman對JDK公開的API進行了分類:
- 受支持并打算供外部使用:
- JCP標(biāo)準(zhǔn):java。*,javax。*
- 不適用于外部使用:sun。*,rest com.sun。*,rest jdk。*
他指出,如果應(yīng)用程序僅使用受支持的API并在Java N上運行,則它也應(yīng)在Java N + 1上運行。 Java 9將利用此功能并更改/刪除Java 8中內(nèi)部或已棄用的API。
然后,他開始管理兼容性,并提到了約瑟夫·達(dá)西(Joseph Darcy)撰寫的一本帖子,他建議閱讀“兼容性的種類:源,二進制和行為” 。 它揭示了兼容性的各個方面,并因此擴展了Java的復(fù)雜性。
JDK 9中不兼容的更改
本講的大部分內(nèi)容涵蓋了Java 9會引起的各種不兼容性。 我的有關(guān)Java 9如何破壞您的代碼的文章在很大程度上覆蓋了這一點。
封裝JDK內(nèi)部API
Bateman首先介紹有關(guān)內(nèi)部API使用的一些數(shù)據(jù)。 可以在幻燈片16上找到詳細(xì)信息,但要點是,僅經(jīng)常使用幾個API。
不在野外使用或僅用于方便的API是非關(guān)鍵的。 默認(rèn)情況下,這些將封裝在Java 9中。那些在實際使用中很難或不可能在JDK之外創(chuàng)建實現(xiàn)的應(yīng)用被視為關(guān)鍵。 如果存在替代方案,它們也將被封裝。
在Java 9中將棄用沒有替代方法的關(guān)鍵API,并計劃在10中刪除它們。JEP260為此提出了以下API:
- sun.misc.Unsafe
- sun.misc。{Signal,SignalHandler}
- 太陽雜色清潔劑
- sun.reflect.Reflection :: getCallerClass
- sun.reflect.ReflectionFactory
如果您錯過了清單中的某些內(nèi)容,請與拼圖團隊聯(lián)系并為您的案件辯護(并提供數(shù)據(jù)支持)。
然后 ,他探討了如何使用jdeps查找內(nèi)部API的用法。 本部分還包含一些示例,這些示例說明了如果在JDK 9上運行有問題的代碼(從此處開始)會發(fā)生什么,以及如何解決此類問題(從此處開始)。
刪除API
很快 以下6種方法在Java 9中將不存在:
- java.util.logging.LogManager :: addPropertyChangeListener
- java.util.logging.LogManager :: removePropertyChangeListener
- java.util.jar.Pack200.Packer :: addPropertyChangeListener
- java.util.jar.Pack200.Packer :: removePropertyChangeListener
- java.util.jar.Pack200.Unpacker :: addPropertyChangeListener
- java.util.jar.Pack200.Unpacker :: removePropertyChangeListener
JDK / JRE二進制結(jié)構(gòu)的更改
通過將JDK和JRE合并到一個通用結(jié)構(gòu)中,一些現(xiàn)有的實踐將停止工作。
Bateman描述了舊的運行時映像目錄布局的一些問題,并介紹了新的外觀。 幻燈片29和30將兩種布局并列:
版權(quán)所有?2015,Oracle和/或其分支機構(gòu)。 版權(quán)所有。
從Java 7開始,有了一個API,無論物理布局如何,工具都可以與這些文件進行交互。 這也意味著版本N可以訪問版本N + 1文件。
刪除的機制
如前所述 , 認(rèn)可的標(biāo)準(zhǔn)覆蓋機制和擴展機制將被刪除。 它們將由可升級模塊取代。
其他變化
有關(guān)更改的完整列表,請參見JEP 261 (風(fēng)險和假設(shè)部分)。 貝特曼列舉了幾個:
- 應(yīng)用程序和擴展類加載器不再是java.net.URLClassLoader的實例。
- 命令行參數(shù)-Xbootclasspath和-Xbootclasspath / p被刪除。
- 系統(tǒng)屬性sun.boot.class.path已刪除。
Java 9中的非拼圖不兼容性
Bateman還簡短地解決了兩個與Project Jigsaw不相關(guān)但將在Java 9中顯示并可能破壞某些代碼的問題:
- 版本字符串架構(gòu)會更改。 有關(guān)詳細(xì)信息,請參見JEP 223-它也可以很好地比較當(dāng)前和將來的版本字符串。
- 下劃線不再允許作為一個字符的標(biāo)識符。
發(fā)布時間由里卡多·比利亞爾下, CC-BY-NC 2.0 。
您可以為Java 9做哪些準(zhǔn)備?
您可以執(zhí)行幾個準(zhǔn)備步驟:
- 檢查代碼是否使用jdeps的JDK內(nèi)部API。
- 檢查可能對版本字符串架構(gòu)更改敏感的代碼。
- 檢查代碼是否使用下劃線作為標(biāo)識符。
- 如果您開發(fā)工具,則通常檢查代碼是否依賴于rt.jar , tools.jar或運行時映像布局。
- 測試JDK 9 EA構(gòu)建和Project Jigsaw EA構(gòu)建。
確保將任何意外或過分有問題的發(fā)現(xiàn)報告給Jigsaw郵件列表 。
問題
有幾個問題,我選擇了兩個最有趣的問題。
庫如何針對Java 8和Java 9?
JEP 238將引入多版本的JAR,即可以包含特定Java版本的專用代碼的JAR。
對Java 8的支持何時終止?
舞臺上沒人知道確切的答案,所以他們指出了oracle.com上Oracle更新策略的文檔 。 當(dāng)前答案是:不早于2017年9月。
翻譯自: https://www.javacodegeeks.com/2016/01/javaone-2015-prepare-jdk-9-blogcodefx.html
javaone
總結(jié)
以上是生活随笔為你收集整理的javaone_JavaOne 2015:为JDK 9做准备– blog @ CodeFX的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java fastutil_具有Fast
- 下一篇: 正则表达式linux举例(正则表达式li