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和/或其分支机构。版权所有。

版权所有©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-它也可以很好地比较当前和将来的版本字符串。
  • 下划线不再是一个字符的标识符。

您可以为Java 9做哪些准备?

您可以执行几个准备步骤:

  • 检查代码是否可以将jdeps与JDK内部API一起使用
  • 检查可能对版本字符串架构更改敏感的代码。
  • 检查代码是否使用下划线作为标识符。
  • 如果您开发工具,则通常检查代码是否依赖于rt.jartools.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值