热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javajigsaw_Java9延迟:为什么Jigsaw尚未准备好

javajigsaw2015年12月1日,星期二,在OpenJDK邮件列表中,MarkReinhold确认了许多人的期望:J

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



推荐阅读
  • Elasticsearch:Pinyin分词器
    Elastic的Medcl提供了一种搜索Pinyin搜索的方法。拼音搜索在很多的应用场景中都有被用到。比如在百度搜索中,我们使用拼音就可以出现汉字:对于我们中国人来说,拼音搜索也是 ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • 外力|通病_普通web项目转为maven项目整理
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了普通web项目转为maven项目整理相关的知识,希望对你有一定的参考价值。   现在越来越多的公司和 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • android ... [详细]
author-avatar
当我繁华尽落_821
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有