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