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