Java 11的期望

过去的几年对Java世界一直是动荡不安的,在相当多的发行版中添加了各种各样的功能。

在开发人员社区中,人们逐渐意识到Java的开发速度不够快。 在最初的20年中,Java平台和Java开发工具包(JDK)经历了庞大,不规则且有些不可预测的步骤。 每个功能版本均由一个或多个重要功能驱动。 因此,每次发布的计划都被推迟了多次,以适应这些功能的完成。

这种方法很好地提供了高质量的大型新功能。 但是,较小的功能和应用程序编程接口(API)仅在大型功能就绪时才能交付。 几年前这是可以接受的,但现在已经不行了。 如今,开发人员可以从各种以更快速度发展的平台中进行选择。

Java 11

在Sun Microsystems的领导下,最新版本是Java 1.6(又名Java 6),并且一直是五年来的最后一个主要Java版本。 Sun很快陷入麻烦,并最终被Oracle收购。

Java 7是Oracle领导下的第一个主要版本,其次是Java8。Java平台的演进是从Java 9开始的。就像Java 8都是关于lambda及其后果(功能编程,流和默认方法)一样。 ,Java 9主要涉及模块。

在查看Java 11中将出现哪些令人兴奋的新功能之前,让我们首先看一下自Java 9以来逐渐引入的新功能。

Java 9中引入的功能

在计划延迟后,Java 9于2017年9月21日发布。大多数开发人员认为Java 9主要与模块化有关。

Java 9版本及其功能是Java生态系统中的一个里程碑。 模块是构建和部署软件的新方法。 他们帮助开发人员创建了体积更小的架构更好的软件。 引入的关键功能是Project Jigsaw,JShell和其他一些功能改进。

Jigsaw项目是JDK 9中最大的功能,它为Java平台带来了模块化。 大型代码库通常会导致复杂,纠结的“意大利面条代码”。 封装代码而在系统的各个部分(Java归档文件或JAR文件)之间没有明确的依赖关系是非常具有挑战性的。

Jigsaw项目引入了类似于OSGi的模块化,其中可以使用附加的模块描述符来表达模块之间的依赖关系。 拼图项目是我们设想和开发大型应用程序的方式的一种范式转变。

在Java平台上的20年开发已经付出了巨大的代价。 许多类已经纠缠在一起,没有简单的方法将私有实现类封装在JDK中。 这鼓励了依赖内部细节的外部库的泛滥,同时也阻碍了平台的发展。

有了Project Jigsaw,现在Java 9附带了大约90个不同的模块,这些模块将相关软件包组合在一起。 只有从模块显式导出的软件包才能从其他模块访问。 这使得内部实现类的封装成为现实。

Java 11

此外,模块可以指定对其他模块的依赖关系。 就像JDK已被模块化一样,应用程序也可以使用相同的技术。 您可以创建自己的模块来封装包并指定依赖关系,而不必使用脆弱的类路径(它具有重复的,丢失的或不一致的JAR)。 这将使结构更好,更可靠的应用程序大有帮助。

Java 9还引入了JShell(交互式Java REPL) ,它是Java Shell的缩写,也称为REPL(读取-评估-打印循环) 。 它增加了执行不同Java构造(如类,接口,枚举,对象和语句)的功能。 JShell具有多种用途,最常见的用途是对某些代码执行快速测试以了解其工作方式。 无需先创建一个类,编译它,然后运行它。 只需使用JShell进行快速测试即可。

引入了不同的功能改进,例如升级的网络通信和对具有HTTP / 2.0支持的WebSockets的支持,增强的Process API,以简化对操作系统进程的控制和管理,以及Stream API的改进,以创建对集合的声明性转换管道。

Java 10中引入的功能

Java 10于2018年3月20日发布。由于发布周期很短,因此仅引入了一些功能。 由于它应该是短期发布,因此JDK 10的公共更新计划在六个月内结束。 许多开发人员可能不会迁移到Java 10,因为他们希望等待Java 11。

长期以来,开发人员一直要求类型推断 ,因为许多静态类型语言已经支持此功能。

通过JEP 286,引入了局部变量类型推断 (JDK增强建议),新的关键字var缩短了局部变量的声明。 它指示编译器从其初始化程序中推断局部变量的类型。

在Java 10之前,我们曾经这样声明变量:

URL simpleProgrammer = new URL(http://www.simpleprogrammer.com);
URLConnection connection = simpleProgrammer.openConnection();
Reader reader = new BufferedReader(
New InputStreamReader(connection.getInputStream()));

使用Java 10,我们可以避免显式类型声明并编写如下代码:

var simpleProgrammer = new URL(http://www.simpleprogrammer.com);
var connection = simpleProgrammer.openConnection();
var reader = new BufferedReader(
New InputStreamReader(connection.getInputStream()));

通过从变量声明中删除冗余,关键字var使Java不再那么冗长。 可以根据使用它的上下文隐式确定变量的类型。

通过基于时间的发行版本控制 ,已更改了Java版本号的格式,以改善对基于时间的发行模型的支持。 新发行模型最显着的方面是发行内容可能会更改。

开始时,仅宣布发布日期。 但是,如果此新功能的开发花费的时间比预期的长,则将从发布节奏中删除该功能并将其不包括在内。 因此,需要一种描述时间流逝的版本号,而不是所包括的更改的性质。

G1中的并行完整GC是一个有趣的功能,可能会在大爆炸功能宣布的噪音中迷失。 实际上,许多开发人员甚至可能没有注意到它。

G1 GC是Java 8中引入的,它成为Java 9中的默认垃圾收集器。通过设计,它避免了完整的垃圾收集,但是仍然会发生。

G1仅使用单线程的mark-sweep-compact算法来执行完整收集,这可能会导致性能问题。

Java 10通过使用多个线程执行完整GC来解决此问题。 用于完全收集的线程数与用于年轻和混合收集的线程数相同。 现在,G1收集器的完整GC性能将得到显着改善。

长期发布和支持周期

Java 10刚刚发布,但是我们现在迫切希望在今年晚些时候发布Java 11。 由于Oracle旨在加快发布周期,因此我们将以更快的方式提供更多功能。 与JDK 10不同,Java 11将是一个长期支持版本,并将成为Java Platform Standard Edition(Java SE)11的参考实现。

Java 11

除了新的发行系列,Oracle还更改了其支持模型。 在新的方案中,短期发布和长期发布之间有所不同。 像Java 9和10这样的短期发行版将接受公共更新,直到下一个功能发行版可用为止。 这意味着对Java 9的支持将于2018年3月终止,对Java 10的支持将于2018年9月之后终止。

Java 11有一个独特的区别,那就是它是第一个长期发行版,并且将得到更长时间的支持。 Java 11将在2023年9月之前获得Oracle的首要支持,并将支持扩展到2026年。

Java 11的新增功能?

Java 11可能会推出一些关键功能。 通过删除CORBA (人们仍在使用它), Java EE模块 (最近更名为Jakarta EE)和JavaFX ,Java 11可能还会失去一些功能。

二十多年前,CORBA是创建分布式应用程序的一种流行方式,但我认为现在它仅在旧版应用程序中使用。 Java EE和JavaFX不再完全适合JDK堆栈,现在还有其他第三方库提供这些功能。 让我们详细考虑这些方面。

Java 11计划的新功能

此时,Java 11设置为引入以下功能:

  • JEP 318:Epsilon:任意低开销的垃圾收集器-Epsilon被称为“无操作”收集器,它承诺在不实现任何实际内存回收机制的情况下处理内存分配。 如提案中所述,目标是“以有限的内存分配和内存吞吐量为代价,提供一种有限的分配限制和最低的延迟开销的完全被动的GC实现。” Epsilon的特定用例包括性能测试,内存压力测试和虚拟机(VM)接口测试。 这对于寿命极短的作业,最后一次延迟的延迟或最后一次吞吐量的改善也很有用。
  • JEP 323:Lambda参数的局部变量语法-Java 10中引入了局部变量类型推断,以减少与编写Java代码相关的冗长性。 Java 11通过允许使用var声明隐式类型的lambda表达式的形式参数来向前迈出了一步。

当前,您需要为lambda表达式指定参数,如下所示:

(var a, var b) -> a.process(b)

从Java 11开始,可以通过以下方式对其进行简化:

(a, b) -> a.process(b)

虽然这导致语法的统一,但也可以在不简短的情况下将修饰符应用于局部变量和lambda格式。 不需要多余的语法构造,因为可以从上下文中推断出它们。

  • JEP 309:动态类文件常量-Java类文件格式将得到扩展,以支持新的常量池形式CONSTANT_Dynamic。 这将减少创建新形式的可实现类文件常量的成本并减少创建中断。 当前,链接invokedynamic呼叫站点会将链接委托给引导方法。 这是一条JVM指令,它允许编译器生成代码,该代码以比以前更宽松的规范来调用方法。 它提供了进行动态调用的功能,JVM不仅可以识别它,而且可以像优化普通的老式静态类型调用一样进行优化。 现在,加载CONSTANT_Dynamic会将创建委托到引导方法。 新的常量池形式将为语言设计人员和编译器实施人员提供更广泛的表达方式和性能选择。

更快的JDK发布和更短的支持周期

Oracle旨在加快发布周期,因此,我们将以更快的速度提供更多功能。 甲骨文去年宣布,2018年将发布两个JDK版本,并且JDK 10已经发布。 与缓慢发布周期的时代相比,这是一个可喜的变化,每几年主要发布中都会引入大量功能。

现在,我们可以期待每六个月发布一个较小的功能。 这具有许多好处,包括Java平台的更快创新。 降低了更新Java版本的风险。 较小的功能集使开发人员更容易采用。

更快的发布周期使Java成为一种敏捷而敏捷的语言。 它已成为一种动态语言,可以响应市场力量和开发人员社区的关注。

什么不会使Java 11发挥作用?

Java 11

尽管Java 11可能会提供一些新功能,但它仍会比Java 10更为精简,这主要是因为一些遗留功能将被删除。

JEP 320:删除Java EE和CORBA模块旨在从Java SE平台和JDK中删除Java EE和CORBA模块。 实际上,这些模块在Java 9中已经过时,声明要在将来的版本中删除它们。

随着Java SE 6于2006年12月发布,其中包括了完整的Web服务堆栈。 这包括四种技术:

  • JAX-WS-XML Web服务的Java API
  • JAXB-用于XML绑定的Java体系结构
  • JAF-JavaBeans激活框架
  • Java通用注释

从那时起,Java EE版本不断发展,这使得Java SE难以在两个Java版本中包含无关的技术和繁琐的维护工作。 有第三方站点提供独立版本的Java EE技术,因此Oracle不再感到有义务将它们包含在Java SE或JDK中。

关于删除CORBA,这项技术来自1990年代,如今几乎没有人使用它开发应用程序。 由于CORBA的维护成本远远超过收益,因此Oracle认为Java SE或JDK中没有必要包含它。

准备好使用Java 11

作为Java开发人员,您现在可以选择每六个月更新一次Java版本,也可以选择每隔几年更新一次长期版本。

Oracle还建议每个人都迁移到其Java SE Advanced产品。 对于每个长期版本,它将至少提供五年的支持。 我认为,如果仍使用Java 8或Java 9之类的早期版本,则可以等待更长的时间,然后直接迁移到Java 11。

Java 11将通过令人兴奋的新功能(例如低开销的垃圾收集器),使用具有较少冗长性的lambda表达式以及为语言设计人员和编译器实施人员提供更多选择的新功能,帮助开发人员创建更好的软件。 Java世界的未来看起来令人兴奋。

翻译自: https://www.javacodegeeks.com/2018/06/expect-java-11.html

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

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

相关文章

MATLAB 在一个数组中随机选择n个数

MATLAB 中在一个数组内随机选择n个数。 例如:在 A [10, 50, 80, 100, 130, 260] 中随机选择5个数。 允许重复: n 5; A [10, 50, 80, 100, 130, 260]; random_num A(randi(numel(A),1,n)); random_num sort(random_num);不允许重复: …

【渝粤题库】广东开放大学photoshop图像处理 形成性考核

题目: 使用变换命令中的缩放命令时,按住哪个键可以保证等比例缩放?( ) 题目: 将前景色和背景色恢复为默认颜色的快捷键是()? 题目: Photoshop中“图像尺寸”…

martingale与Markov Process的关系

鞅过程与马尔科夫过程是什么关系? 1.鞅代表的是公平游戏,马尔可夫过程侧重过程无记忆性 总而言之:鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏,而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…

【渝粤题库】陕西师范大学151105 财务管理基础作业(高起专)

《财务管理原理(高起专)》作业 一、单项选择题 1、短期借款较多,流动比率降低,这对一个企业来说一般属于 ( ) A、优势 B、劣势 C、机会 D、威胁 2、影响企业价值的两个最基本因素是 ( &#xff…

【渝粤题库】陕西师范大学163202 管理学原理 作业(高起本 专升本)

《管理学原理(专升本)》作业 一、名词解释 1、管理 2、德尔斐技术 3、目标管理 4、马斯洛的需求层次 5、效价 6、管理方格论 7、公平理论 8、头脑风暴法 9、授权式领导 10、管理幅度 11、泰罗制 12、同期控制 二、判断并说明理由 1、决策遵循的是满意原…

lambda 序列化_Lambda,会序列化吗?

lambda 序列化因此,我一直在思考Tyrus项目所需的增强功能,该功能允许用户广播到跨机器集群连接到URL的客户端子集。 有多种方法可以做到这一点。 但是自从我使用JDK 8以来,这个问题肯定看起来像钉子。 为此,我创建了一个简单的单…

【渝粤题库】陕西师范大学164205 ERP原理及应用 作业(专升本)

ERP原理及应用(专升本) 单项选择题 企业信息化综合运用了现代制造技术、( )、自动化技术、管理技术,将企业各项活动中的人、技术和经营管理,以及信息流、物料流和左流有机集成,实现企业整体优化…

LaTeX双栏模板插入通栏公式(跨栏插图)

1. 利用带星号的浮动体环境 带星号的浮动体figure和table环境可以在双栏模板中使用,例如我们以IEEEtran为例,插入通栏公式 \documentclass{IEEEtran} \usepackage{amsmath,lipsum} \begin{document} \lipsum[1] \begin{figure*} \begin{ali…

JDK 12新闻(2018年9月13日)

随着通用性的JDK 11计划在本月底(2018 9月25日),这是一个好时机,开始在更紧密地看着JDK 12 。 在OpenJDK jdk-dev邮件列表上的标题为“ JDK 12的计划时间表 ”的消息中 , Mark Reinhold宣布:“随着JDK 11即…

【渝粤题库】陕西师范大学165211创新管理 作业(专升本)

一、单选题 1.约瑟夫•熊彼特在1912年出版的《( )》一书中最早提出“创新”一词。 A经济发展理论 B经济分析史 C资本主义、社会主义与民主 D景气循环论 2.约瑟夫•熊彼特的创新理论中,认为创新的主体是( )。 A企业 B市…

[渝粤题库]西北工业大学中国古代法制史

中国古代法制史 1. 明清时期的主审机关是( )。 A.刑部 B.大理寺 C.都察院 2. 唐朝编订的( ),成为后世《宋刑统》的体例渊源。 A.《唐六典》 B.《永徽律疏》 C.《大中刑律统类》 3. 《宋刑统》在内容上沿袭&am…

renew process 更新过程

一个泊松过程可以分解成一系列 i.i.di.i.di.i.d 的指数分布随机变量相加,如果把指数分布换成其他 i.i.di.i.di.i.d 的分布就得到了更新过程。 更新过程本身是泊松过程的一种扩长,同时更新过程也可以发展出一套更新理论,包括更新方程等。 htt…

[渝粤题库]西北工业大学刑法

刑法 一单选题 1.我国刑法的任务是用刑罚同( ) 行为作斗争。 A.危害国家安全犯罪 B.破坏社会主义经济秩序犯罪 C.其他刑事犯罪 D.一切犯罪 2.我国刑法对空间效力的规定,采取的是( )。 A.属地原则 B.属人原则 C.保护原则 D.以属地原则为主,兼采属人原则、…

离散时间信号,连续时间信号,模拟信号,数字信号区别

连续时间信号 : 在时间t 上是连续的值 时间连续, 幅值连续。 定义为模拟信号。时间连续, 幅值离散。 比如脉冲信号。 离散时间信号 : 在时间t上 是离散的值 时间离散, 幅值连续。 (在任意两个离散时间点…

[渝粤题库]西北工业大学复变函数与积分变换

复变函数与积分变换 窗体顶端 1. 下列关于幂级数的叙述,不正确的是( )。 A.在收敛圆内,幂级数绝对收敛 B.在收敛圆外,幂级数发散 C.在收敛圆周上,可能收敛,也可能发散 D.在收敛圆周上,条件收敛 2. 函数在处的导数( ) A.等于0 B.等于1 C.等于-…

java8 javafx_Java8中的外观(JavaFX8)

java8 javafxJavaFX8在外观方面进行了一些更改 ,其中最相关的是新CSS API ,它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以更改控件的很多外观,但是CSS可以实现很多功能,这就是Skin类的用处。从“ UI控件体…

[渝粤题库]西北工业大学材料力学(更新)

材料力学 置于刚性平面上的短粗圆柱体,在上端面中心处受到一刚性圆柱压头的作用,如图所示,若已知压头和圆柱的横截面面积分别为,圆柱的许用压应力,许用挤压应力,则圆柱将( )。 B.发…

如何通俗易懂地解释卷积?

马同学 从数学上讲,卷积就是一种运算。 某种运算,能被定义出来,至少有以下特征: 首先是抽象的、符号化的 其次,在生活、科研中,有着广泛的作用 比如加法: [公式] ,是抽象的&…

[渝粤题库]西北工业大学电工与电子技术

电工与电子技术 1.{ 如图所示电路中,电压U等于( )。} 4V 2.{ 直流电路如图所示,电流I应等于( )。} 7A 3.{ 如图所示电路中,a点电位等于( )。} -1V 4.{ 将…

具有中央异常处理和VO验证的Spring Data JPA –框架

1.简介 一段时间以来,Spring框架已成为事实上的标准,可以创建任何基于REST API的应用程序。 Spring提供了各种现成的组件,以避免编写重复而繁琐的样板代码。 另外,关于Spring的美丽之处在于,如果有现成的解决方案&…