java jigsaw_Java 9延迟:为什么Jigsaw尚未准备好

java jigsaw

2015年12月1日,星期二,在OpenJDK邮件列表中,Mark Reinhold确认了许多人的期望:Java 9的发布被推迟了六个月。 它尚未正式发布-但如果社区在下周之前不提出异议, 则将采用时间表

根据Mark Reinhold的说法,之所以做出此决定,是因为Java 9的关键功能模块系统Jigsaw尚未准备好发布。 但是为什么呢? 该系统的工作已经进行了多年,甚至应该与Java 8一起发布!

拼图的现状

让我们看一下当前的现状。 Java 9的功能冻结里程碑设置为12月10日,这是添加新功能的最后一天。 但是,拼图拼板化尚未添加到主代码分支中。 为了测试新的模块系统,您不仅可以下载官方的Java 9预览版 ,还必须选择单独的“拼图”版本。 迄今为止,作者无法找到原因。

分离下载位置的原因之一可能是许多流行的开源项目都没有使用Java 9的Jigsaw版本运行。直到最近,它还包含流行的JVM语言Groovy。 其原因与有争议的sun.misc.Unsafe所涉及的原因类似:模块系统将向JDK添加一个额外的(非常受欢迎的)安全层。

通过反射使隐藏的类和方法在JDK中可见是相当容易的(如果适当的权限是Java安全管理器授予的,通常在服务器端应用程序中就是这种情况)。 如果相关代码未列入白名单(包括有争议的sun.misc.Unsafe),则使用反射方法setAccessible()使私有方法和类可见,将会受到新的InaccessibleObjectException惩罚。 因此,此解决方法不再适用。 Java 9禁止使用此功能,无论是否安装了安全管理器。 原因是那些签名通常使用私有接口而不是公共接口,这意味着在模块系统中,要使该接口可访问,该接口必须是公共的。 当您在GitHub上寻找典型的编程模式时,例如众所周知的setAccessible() ,您已经可以知道哪些代码无法在Java 9中运行。不幸的是,这会影响大量代码,甚至是著名的库。

Lucene,Solr,Elasticsearch

对于Apache Lucene,Apache Solr和Elasticsearch,开发人员已经找到了解决方法,只需禁止在源代码中全部使用setAccessible 。 但是,深入研究问题,我们很快就会发现大多数时候并不需要这样做。 Apache Lucene中剩下的唯一可访问的内容是MMapDirectory中的sun.misc.Cleaner。 但这还是被Java 9列入了白名单,因为这是一个已知问题。

无论如何,如果有更多的时间,这可能是在Java 9发行之前要解决的问题之一。 因此,我们可以假设拼图团队还需要更多时间来解决此类难题,并至少制造出最常用的组件和库。

模块文件格式

更详细地讲,您会遇到有关Jigsaw的其他几个未解决的问题,这意味着该模块系统尚未准备好由公众测试。 当前的问题之一是模块的文件格式。 这里尚无决定,但仍在进行大量讨论。 更复杂的是,目前存在两种格式,即JIMAGE和JMOD。

第一种是真正的新格式,可以快速访问其中的类,而无需通过ZIP条目列表执行通常的缓慢搜索。 JDK中使用了这种新格式,以加快类的加载速度。 但是,还有其他新的Jigsaw-JMOD格式,它也基于ZIP(与JAR格式一样),但除了模块特定的元数据外,还提供了平台特定的库,例如DLL或SO文件。 拼图版本以两种格式交付所有模块,而常规的Java 9版本仅支持更快的JIMAGE。 尚不确定 JDK安装的最终布局到底是什么样子。 新的JMOD格式应该替换JAR格式,因此您可以将整个Java应用程序作为模块提供,其中包含有关依赖项和导出的API的所有元数据。 这意味着还可以通过仅包含必要模块的应用程序提供JRE的精简版。

还请参见: Jigsaw为Java 9带来的功能

由于开发的延迟,推迟发布日期似乎是另一个明智的选择。 在发布时,新的Java 9模块系统需要在现有的开发环境(如Eclipse)中可用。 并且由于这方面的情况仍在发生变化,因此也应该给这些工具的开发人员足够的时间进行准备。 OpenJDK Jigsaw邮件列表上有很多关于开发人员如何使用Apache Maven自己构建新模块的争论。 社区已经在忙于提供适合JMOD打包的Maven Mojos。 即使尚未使用,最新的Gradle发行版(2.9)也已经带有Java 9模块的基础结构。

Java 9花费更多时间–新功能花费更多时间

总的来说,我们已经看到许多项目正在为Java 9准备其代码库。Apache Lucene有望在5.4版中完全支持Jigsaw,并将在接下来的几周内发布。 而且Elasticsearch已经在模块系统上平稳运行。 Apache Lucene要求的运行时权限是最小的,因此Java 9不会出现任何问题。

作为Apache Lucene团队的一员,我真的很期待开发周期延长带来的新工具和功能。 我个人希望看到Java 8的MethodHandles周围的功能:Java编译器将源代码中的方法引用(如String::length直接转换MethodHandles (包括相关的静态类型测试)。

翻译自: https://jaxenter.com/java-9-delays-why-jigsaw-isnt-ready-yet-122725.html

java jigsaw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值