java 拼图_功能项目拼图将Java 9引入

java 拼图

因此,拼图项目...我们已经对此颇为了解,但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点,并介绍项目的核心概念和功能。

系列

这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序(不同于发布顺序),它们是:

  • 动机和目标
  • 核心概念和功能(即将推出)
  • 如何破坏您的代码
  • 历史,结构和当前状态(即将发生)
  • 动手指南(即将在EA版本包含JSR 376的情况下发布 )

相应的标记列出了有关该主题的更多文章。

总览

第一部分将介绍Jigsaw项目的核心概念,即模块。 然后,我们将看到它们将具有哪些功能,以及如何计划它们与现有代码和工具进行交互。

本文的主要来源是Jigsaw项目和JSR 376的要求 。 尽管这些文档基于全面的探索阶段,因此非常成熟,但它们仍可能会发生更改。 接下来的事情是一成不变的。

核心概念

有了Project Jigsaw,Java语言将得到扩展以具有模块概念。

[模块]是由代码和数据组成的自描述程序组件。 模块必须能够包含组织成包的Java类和接口,以及动态加载库形式的本机代码。 模块的数据必须能够包含静态资源文件和用户可编辑的配置文件。

Java平台模块系统:要求(草案2)

为了对模块有所了解,您可以将每个Apache Commons (例如Collections或IO), Google Guava或( cough ) LibFX之类的知名库都视为模块。 好吧,根据作者想要拆分的粒度,每个人实际上可能都包含几个模块。

对于应用程序也是如此。 它可能是单个整体模块,但也可能分成多个模块。 我想说一个项目的规模和凝聚力将是决定该项目可组成的模块数量的主要决定因素。 当然,它的实际体系结构和实现是否允许这是另外一个故事。

计划是模块将成为开发人员中用来组织代码的常规工具。

开发人员已经在语言方面考虑了标准种类的程序组件,例如类和接口。 模块应该只是另一种程序组件,像类和接口一样,它们应该在程序开发的所有阶段都具有含义。

Mark Reinholds –拼图项目:聚焦全局

然后可以在开发的所有阶段(即在编译时,构建时,安装时或运行时)将模块组合成各种配置。 它们将对像我们这样的Java用户可用(在这种情况下有时称为开发人员模块 ),但也将用于剖析Java运行时本身(通常称为平台模块 )。

实际上,这是有关如何将JDK模块化的当前计划:

jdk-tr

特征

那么模块如何工作? 查看计划中的功能将有助于我们对它们有所了解。

请注意,即使以下各节将介绍很多功能,也不会在所有可用详细信息中进行讨论,也不会完整列出这些功能。 如果您想了解更多信息,可以从方括号中的链接开始,或者立即查看Jigsaw项目和JSR 376的完整要求 。

依赖管理

为了解决JAR / classpath难题 ,Jigsaw项目实现的核心功能之一是依赖管理。

声明与决议

一个模块将声明编译和运行其所需的其他模块[ 依赖项 ]。 模块系统将使用它来传递性地标识编译或运行初始一个[ 分辨率 ]所需的所有模块。

也有可能不依赖于特定模块而是依赖于一组接口。 然后,模块系统将尝试查找实现这些接口并因此满足依赖项[ services , binding ]的模块。

版本控制

将支持版本控制模块[ 版本控制 ]。 他们将能够指示自己的版本(只要完全排序即可使用几乎任何格式),以及对其依赖项的约束。 在任何阶段都可以覆盖这两条信息。 模块系统将在每个阶段强制配置满足所有约束。

Project Jigsaw不一定会在单个配置中支持模块的多个版本 [ 多个版本 ]。 但是,等等,这如何解决JAR地狱? 好问题。

模块系统也可能未实现版本选择。 因此,当我在上面写道“模块系统[将]识别编译或运行所需的所有模块”时,这是基于每个模块只有一个版本的假设。 如果有多个,则上游步骤(例如,开发人员,或者更可能是他使用的构建工具)必须进行选择,并且系统将仅验证其满足所有约束[ 版本选择 ]。

封装形式

从同一类路径加载的所有其他代码将自动提供JAR中的所有公共类和接口。 对于模块而言,情况将有所不同,在这些模块中,系统将在所有阶段强制执行更强的封装(无论是否存在安全管理器)。

一个模块将声明特定的软件包,并且仅导出其中包含的类型。 这意味着只有它们将对其他模块可见并且可访问。 更严格地说,类型将仅导出到明确依赖于包含它们的模块的那些模块[ export , encapsulation ]。

为了帮助开发人员(尤其是那些模块化JDK的开发人员)保持较小的导出API界面,将存在其他发布机制。 这将允许一个模块指定要导出的其他软件包,但只能导出到一组也指定的模块。 因此,尽管使用“常规”机制,导出模块将不知道(也不关心)谁访问了软件包,但该模块将允许它限制可能的依赖项集合( 合格的出口 )。

模块也可以重新导出其依赖的模块的API(或其部分)。 这将允许在不破坏依赖关系的情况下拆分和合并模块,因为原始模块可以继续存在。 他们将导出与以前完全相同的程序包,即使它们可能不包含所有代码[ 重构 ]。 在极端情况下,所谓的聚合器模块可能根本不包含任何代码,并且只能作为一组模块的抽象。 实际上,来自Java 8的紧凑配置文件就是这样。

不同的模块将能够包含相同名称的程序包,甚至允许它们导出它们[ export , non-interference ]。

Oracle将利用这一机会使所有内部API不可用 。 这将是采用Java 9的最大障碍,但肯定会树立正确的道路。 首先,由于关键代码现在已对攻击者隐藏,因此它将大大提高安全性。 这也将使JDK的可维护性大大提高,从长远来看,这将有回报。

配置,阶段和保真度

如前所述,在开发的所有阶段都可以将模块组合成各种配置。 对于平台模块而言,这是正确的,可用于创建与完整JRE或JDK,Java 8中引入的紧凑配置文件相同的映像,或仅包含一组指定模块(及其传递依赖项)的任何自定义配置[ JEP 200; 目标 ]。 同样,开发人员可以使用该机制来组合自己的模块化应用程序的不同变体。

在编译时,正在编译的代码将仅看到由一组配置的模块[ 编译时配置 ]导出的类型。 在构建时,一个新工具(大概称为JLink )将允许创建二进制运行时映像,该映像包含特定模块及其依赖项[ 构建时配置 ]。 在启动时,可以使图像看起来像仅包含其模块的子集[ 启动时配置 ]。

在每个阶段,都可以用较新的版本替换实现认可标准或独立技术的 模块 [ 可升级模块 ]。 这将替换已弃用的认可标准覆盖机制和扩展机制 。

除非由于特殊原因[ 保真 ]不可能,否则模块系统的所有方面(如依赖管理,封装等)在所有阶段都将以相同的方式工作。

所有模块特定的信息(例如版本,依赖项和包导出)都将在代码文件中表示,而与IDE和构建工具无关。

性能

整个程序优化技术

在具有强封装性的模块系统中,自动推断将要使用特定代码段的所有位置要容易得多。 这使得某些程序分析和优化技术更加可行:

快速查找JDK和应用程序类; 早期字节码验证; 主动内联例如lambda表达式和其他标准编译器优化; 构造特定于JVM的内存映像,该映像可以比类文件更有效地加载; 提前将方法主体编译为本地代码; 并删除未使用的字段,方法和类。

拼图项目:目标与要求(草案3)

这些被标记为整个程序的优化技术 ,并且至少有两种这样的技术将在Java 9中实现。它还将包含一个工具,该工具可以分析给定的一组模块,并应用这些优化来创建性能更高的二进制映像。

注解

自动发现带注释的类(例如Spring允许)目前需要扫描某些指定包中的所有类。 这通常是在程序启动时完成的,可能会大大降低它的速度。

模块将具有一个API,允许调用者使用给定的注释标识所有类。 一种设想的方法是创建此类的索引,该类的索引将在模块编译时创建[ 注解检测 ]。

由droetker0912在CC-BY-NC-SA 2.0下发布。

发布时间由droetker0912下, CC-BY-NC-SA 2.0 。

与现有概念和工具的集成

诊断工具(例如堆栈跟踪)将被升级,以传达有关模块的信息。 此外,它们将被完全集成到反射API中,该反射API可以以与类[ 反射,调试和工具 ]相同的方式来操作它们。 这将包括可以在运行时反映和覆盖的版本信息[ 反射API中的版本字符串 , 可覆盖的版本信息 ]。

该模块的设计将允许“以最小的麻烦”使用构建工具 [ 构建工具 ]。 模块的编译形式可以在类路径上使用,也可以作为模块使用,这样库开发人员就不必为类路径和基于模块的应用程序创建多个工件( 多模式工件 )。

还计划与其他模块系统(尤其是OSGi)进行互操作 [ 互操作 ]。

即使模块可以从其他模块隐藏包,也可以测试所包含的类和接口[ 白盒测试 ]。

特定于操作系统的包装

该模块系统在设计时考虑了软件包管理器文件格式“ RPM,Debian和Solaris IPS”。 开发人员不仅可以使用现有工具从一组模块中创建特定于操作系统的软件包。 这样的模块也将能够调用以相同机制安装的其他模块[ 模块包装 ]。

开发人员还将能够将构成应用程序的一组模块打包到特定于OS的软件包中,“最终用户可以按照目标系统的惯常方式来安装和调用这些软件包”。 在上面的基础上,只需打包目标系统上不存在的那些模块即可[ 应用程序打包 ]。

动态配置

运行中的应用程序可以创建,运行和发布多个隔离的模块配置[ 动态配置 ]。 这些配置可以包含开发人员和平台模块。

这对于诸如IDE,应用程序服务器或Java EE平台的容器体系结构将非常有用。

反射

我们已经看到Project Jigsaw将带给Java 9的大多数功能。它们都围绕新的模块核心语言概念展开。

在日常编程中,最重要的可能是跨不同阶段的依赖关系管理,封装和配置。 改进的性能始终是一个不错的选择。 然后,需要投入与现有工具和概念的合作,例如反射,诊断,构建工具和特定于操作系统的打包。

等不及要尝试了? 我也不行! 但是,我们必须等到JSR 376进一步问世,然后才能将带有Project Jigsaw的JDK9或JDK 9的早期访问版本实际包含模块系统。 当它最终完成时,您将在此处阅读有关内容。

翻译自: https://www.javacodegeeks.com/2015/07/the-features-project-jigsaw-brings-to-java-9.html

java 拼图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7 蓝牙4.0 ble驱动_初识物联网无线通信技术之蓝牙4.0BLE协议栈

[本文属原创,转载请附上原文出处链接。]一、需要的软件工具1、BLE协议栈(BLE-CC254x-1.4.0)2、IAR开发软件(IAR Embedded Workbench8.20.2)注:1.4.0协议栈使用8.20.2的iar版本,1.3.2协议栈等使用的是8.10.4的iar版本。二、BLE协议栈安装目录下…

C语言:谈谈指针!

点击蓝字关注我们指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程…

C/C++ 中的 #pragma once 作用是什么?

点击蓝字关注我们1、#pragma once有什么作用?为了避免同一个头文件被包含(include)多次,C/C中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,…

python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

原文链接:http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上,来自阿里云大数据事业部的秦续业分享了《双剑合壁——Python和大数据计算平台的结合实战》。他主要介绍了数据分析和机器学习的方法、DataFrame整体架构以及基础API、前端、…

武魂觉醒s系列服务器,[多线]星河斗罗——新服开荒丨高程度剧情还原丨3D坐骑丨魂环丨武魂觉醒[1.12.2]...

[服务器介绍]星河斗罗 全新原创开荒斗罗大陆服务器前言:超高还原小说真实性,独特的武魂贴图,魂兽建模,坐骑建模,开放性冒险地图,让您更加体验斗罗大陆的真实性。进服送新手大礼包:装备&#xff…

C++ 的万能头文件,你知道多少?

点击蓝字关注我们C 中万能头文件 bits/stdc.h 的介绍很多小伙伴估计看有的代码会碰见没有多余的其它头文件比如 algorithm、cmath、iostream 而是用了一行 #include<bits/stdc.h> 这样的头文件并感到诧异&#xff0c;想这是什么。其实这是一个包含了 C 所有头文件的一个头…

pytorch dataset读取数据流程_高效 PyTorch :如何消除训练瓶颈

加入极市专业CV交流群&#xff0c;与 10000来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流&#xff01;同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总&#xff0c;行业技术交流。关注 极市平台 公众号 &#xff0c;回复 加群&…

APP 文档服务器,app服务器

app服务器 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。调用接口出错后&#xff0c;将不会返回结果数据。调用方可根据每个接口对…

需求最高的8种编程语言

点击蓝字关注我们在过去的 8 个月时间里&#xff08;从 2021 年 10 月到 2022 年 6 月&#xff09;&#xff0c;DevJobsScanner 分析了超过 700 万份开发者工作需求&#xff0c;得出了目前行业需求量最高的 8 种编程语言。需要注意的是&#xff0c;在这 700 万份工作需求中&…

java面包屑实现_在Java中实现过滤器和面包店锁

java面包屑实现为了了解锁的工作原理&#xff0c;实现自定义锁是一种好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁&#xff08;自旋锁&#xff09;&#xff0c;并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法&…

postman 怎么调试pos_SpringBoot|第十五章:基于Postman的RESTful接口测试

前言从上一章节开始&#xff0c;接下来的几个章节会讲解一些开发过程中配套工具的使用。俗话说的好&#xff0c;工欲善其事&#xff0c;必先利其器。对于开发人员而言&#xff0c;有个好用的工具&#xff0c;也是一件事半功倍的事&#xff0c;而且开发起来也很爽&#xff0c;效…

这几个C语言关键字你真的得懂(深度解剖)

点击蓝字关注我们1、什么是语句&#xff0c;表达式&#xff1f; 在C语言中 &#xff0c;凡是以分号隔开的就是一条语句&#xff1a;printf("hello world\n");a 1 2; ; (空语句)什么是表达式呢&#xff1f;C语言中&#xff0c;用各种操作符把变量连起来&#xff0c;…

aws sqs_JMS和AWS SQS的更多高级内容

aws sqs如您所知&#xff0c; AWS中的SQS SQS代表“简单队列服务”。 最近&#xff0c;在使用它的同时&#xff0c;我发现了将其称为“简单”的原因之一。 在之前的两篇文章&#xff08; 此处和此处 &#xff09;中&#xff0c;我展示了结合Spring Framework将SQS用作JMS队列提…

python 直方图每个bin中的值_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用...

标签&#xff1a; 最近获得了一些四级成绩数据&#xff0c;大概500多个&#xff0c;于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢&#xff1f;说干就干&#xff0c;于是有了这篇文章。 文章顺带介绍了xlrd模块的一些用法和matplotlib画自定义数据的条形图和随…

adf开发_了解ADF生命周期中的ADF绑定

adf开发在这篇文章中&#xff0c;我将重点介绍ADF绑定层&#xff0c;并探讨当最初从浏览器请求带有一些数据的ADF页面时它如何工作。 Oracle ADF提供了自己的JSF生命周期扩展版。 实际上&#xff0c;ADF扩展了标准的JSF生命周期实现类&#xff0c;并提供了ADF阶段侦听器&#…

C语言实现计算器

点击蓝字关注我们1、实现逻辑首先创建菜单(menu)&#xff0c;把我们需要实现的功能打印到运行栏屏幕上。实现加法计算实现减法计算实现除法计算实现乘法计算退出计算器当然以上都是属于最基本的计算&#xff0c;你当然还可以实现一些其它计算。例如&#xff1a;位运算(按位与、…

python怎么创建txt文件啊_python根据txt文本批量创建文件夹

前言 前言&#xff1a;想写这个代码的原因是因为实习的时候需要根据表格名创建对应的文件夹&#xff0c;如果只是很少个数文件夹的话&#xff0c;ctrlshiftn还可以接受吧&#xff0c;可是一次就要创建几百个文件夹&#xff0c;这就有点方方了。所以我写了一些代码解决实际的问题…

十道题带你手撕二叉树

点击蓝字关注我们1、单值二叉树题目&#xff1a;思路一&#xff1a;&#xff08;遍历的方法&#xff09;将根节点的值与二叉树中的每一个节点存储的val值进行比较&#xff0c;如果不同就返回false&#xff0c;如果全部相同&#xff0c;就返回true。代码&#xff1a;bool _isUni…

C语言实现面向对象编程 : 封装、继承、多态

点击蓝字关注我们不知道有多少人去了解过语言的发展史&#xff0c;早期C语言的语法功能其实比较简单。随着应用需求和场景的变化&#xff0c;C语言的语法功能在不断升级变化。虽然我们的教材有这么一个结论&#xff1a;C语言是面向过程的语言&#xff0c;C是面向对象的编程语言…

图解python pdf_Python合并同一个文件夹下所有PDF文件的方法

一、需求说明 下载了网易云课堂的吴恩达免费的深度学习的pdf文档&#xff0c;但是每一节是一个pdf&#xff0c;我把这些PDF文档放在一个文件夹下&#xff0c;希望合并成一个PDF文件。于是写了一个python程序&#xff0c;很好的解决了这个问题。 二、数据形式三、合并效果四、py…