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,一经查实,立即删除!

相关文章

martingale与Markov Process的关系

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

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

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

renew process 更新过程

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

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

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

java8 javafx_Java8中的外观(JavaFX8)

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

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

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

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

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

初识斯蒂尔杰斯积分(Stieltjes integral)

https://blog.csdn.net/Northernland/article/details/83051415

drools6.5_使用Drools 6.0进行部署

drools6.5KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上部署,也可以在运行时动…

双子(Dioid)

双子代数是若其对任意无限多元的 “和”封闭且乘法对此无限和具分配律。 https://baike.baidu.com/item/%E5%8F%8C%E5%AD%90%E4%BB%A3%E6%95%B0

具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置

SOLR是最流行且高度可扩展的搜索引擎之一,它基于分布式索引技术运行。 Solr索引几乎可以基于任何类型的数据源(CSV数据或XML数据或从RDBMS数据库或标准文件系统中提取的数据)构建。 对于以RDBMS数据库作为后端构建的任何Web应用程序&#xf…

随机过程及其稳态stability

1. 为什么要研究随机过程? 人类认识世界的历史,就是一认识和描绘各种运动的历史,从宏观的天体运动到分子的运动,到人心理的运动-我们通称为变化,就是一个东西随时间的改变。 人们最成功的描绘运动的模型是牛顿的天体…

求离散马尔科夫链的平稳分布+按照一定概率分布生成想要的样本

1. 求离散马尔科夫链的平稳分布的两种解法 假设离散马尔科夫链的转移矩阵为P PP,平稳分布为π \piπ,则平稳分布满足: PππP \pi \piPππ 1.1 迭代法 求平稳分布的一种简单方法是迭代法,即随机初始化初始分布π 0 \pi_0π 0 …

MCMC 和 Gibbs采样

0. MCMC 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。 Monte Carlo (蒙特卡罗&#x…

使用Java流和In-JVM-Memory的超低延迟查询

自然界的基本规则(例如光速和通用信息论)对我们可以从传统系统体系结构中获得的最大性能设置了明显的限制。 了解您作为Java开发人员如何使用JVM技术和Java流将性能提高几个数量级。 例如,如果应用程序服务器和数据库服务器相距100 m&#…

信道接入技术及协议

1. 信道共享方式 在普通的通信系统中,信道共享方式有3种:点对点、点对多点和多点共享。 1.1 点对点 点对点是最简单的信道共享方式。其特点是只有两个节点共享无线信道。在单信道时,两个节点可以通过半双工方式实现共享,在双信…

MATLAB | 解决打开延迟的情况

问题 最近打开matlab,一直没有反应,大概几分钟后,才开始有反应。 网上关于matlab启动出现延迟的方法有很多种解决方法。但都是针对破解版的,而装正版matlab2020b,缺少license文件。对于此,我们尝试用另外一…

50 个具有挑战性的概率问题 [01/50]:袜子抽屉

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒(Frederick Mosteller)的《概率论中的五十个具有挑战性的问题与解决方案》(Fifty Challenge Problems in Probability with Solutions)一书。我认为…

制作程序化装饰花纹图案_装饰图案

制作程序化装饰花纹图案装饰图案 我不经常使用的一种设计模式是Decorator 。 我不确定为什么这种模式不受欢迎,因为它很方便。 装饰器模式允许以受控方式向对象添加功能。 即使在使用静态类型的语言时,也可以在运行时运行! 装饰器模式是子类的…

6个您需要了解的日志管理工具(以及如何使用它们)

如果没有正确的工具来汇总和解析日志数据,则几乎不可能找到并了解您正在寻找的信息。 日志有无穷无尽的用途,因为日志本身是无止境的。 应用程序日志,安全日志,BI日志, 林肯日志 (好吧,也许不是…