Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

Oracle于2018年9月发布了Java 11,其前身只有6个月,版本10。

Java 11是Java 8之后的第一个长期支持(LTS)释放。Oracle也停止了支持java.2019年1月8日。因此,我们中的许多人将升级到Java 11。

在本教程中,我们会查看我们选择Java 11 JDK的选项。然后,我们将探讨Java 11中引入的新功能,删除功能和性能增强功能。

2. Oracle与打开JDK

Java 10是我们可以在商业上使用的最后一个免费的Oracle JDK发布。从Java 11开始,Oracle没有免费的长期支持(LTS)。

谢天谢地,Oracle继续提供打开JDK.发布,我们可以无收费下载和使用。

除了Oracle,还有其他公开的JDK提供商我们可能会考虑。

3.开发人员特征

让我们来看看对公共API的更改,以及对开发人员有用的其他一些功能。

3.1。新字符串方法

Java 11增加了一些新方法到了细绳班级isblank.线striplading.镶边,重复

让我们来看看如何使用这些新方法从多行字符串中提取非空的、剥离的行:

字符串Multilinestring =“Baeld金宝搏188体育ung帮助\ n \ n开发人员\ n探索Java。”;list 行= multilinestring.lines().filter(行 - >!line.isblank()).map(string :: strib).collect(collectors.tolist());assertthat(线).Containsexact(“Baeldu金宝搏188体育ng帮助”,“开发人员”,“探索Java”);

这些方法可以减少操纵字符串对象所涉及的样板量,并保存我们必须进口库。

在...的情况下方法,它们为更熟悉的功能提供了类似的功能修剪方法。但是,具有更精细的控制和Unicode支持。

3.2。新文件方法

现在更容易阅读和写作细绳从文件。

我们可以使用新的Readstring.WriteString.来自的静态方法文件班级:

path filepath = files.writeString(files.createTempfile(tempdir,“demo”,“.txt”),“示例文本”);字符串filecontent = files.readstring(filepath);assertthat(filecontent).isequalto(“示例文本”);

3.3。集合到数组

java.util.collection.接口包含一个新的默认值Toarray.方法,其参数为暗圈论点。

这使得从集合中更轻松地创建一个正确类型的数组:

列表Samplelist = arrays.aslist(“java”,“kotlin”);string [] samplearray = samplelist.toArray(String [] :: new);assertthat(samplearray).containsexactly(“java”,“kotlin”);

3.4。不是谓词方法

静止不是方法已被添加到谓词界面。我们可以用它来否定现有的谓词,就像否定方法:

list  samplelist = arrays.aslist(“java”,“\ n \ n”,“kotlin”,“”);没有blanks = samplelist.stream().filter(谓词.not(string :: iSblank)).collect(收集器.Tolist());Assertthat(没有纳入).ContainSexact(“Java”,“Kotlin”);

不是(isblank)读得更自然isblank.。否定(),大的优点是我们也可以使用不是用方法引用,就像不是(字符串:isblank)

3.5。本地变量语法对于λ.

支持使用局部变量语法var.在Java 11中添加了在Lambda参数中的关键字。

我们可以利用这个特性对局部变量应用修饰符,比如定义类型注释:

列表 samplelist = arrays.aslist(“java”,“kotlin”);String结果= samplelist.stream().map((@ nonnull var x) - > x.touppercase()).collect(收集器.joining(“,”));assertthat(结果).isequalto(“Java,Kotlin”);

3.6。HTTP客户端

新的HTTP客户端来自java.net.http.包装在Java 9中引入了包。它现在已成为Java 11中的标准功能。

新的HTTP API提高了整体性能,并为HTTP / 1.1和HTTP / 2提供了支持:

HttpClient = HttpClient. newbuilder () .version(HttpClient .version . http_2) .connectTimeout(Duration.ofSeconds(20)) .build();HttpRequest = HttpRequest. newbuilder () . get () . URI (URI。创建(“http://localhost:”+端口)).构建();HttpResponse = httpClient。发送(httpRequest, HttpResponse.BodyHandlers.ofString ());为了(httpResponse.body())。isEqualTo("Hello from the server!");

3.7。基于嵌套的访问控制

Java 11介绍了概念以及JVM中的相关访问规则。

Java中的类巢暗示外部/主类和所有嵌套类别:

assertthat(mainclass.class.isnestmateof(mainclass.nestedclass.class))。istrue();

嵌套的课程链接到巢家属性,而外部类链接到巢穴属性:

assertthat(mainclass.nestedclass.class.getnesthost())。isequalto(mainclass.class);

JVM Access规则允许访问NestMates之间的私有成员。但是,在以前的Java版本中,反射API拒绝了同样的访问。

Java 11修复了这个问题,并提供了使用反射API查询新的类文件属性的方法:

set  nestedmembers = arrays.tream(mainClass.nestedClass.Class.getnestMembers.Member.Map(class :: getName).collect(collectors.toset());Assertthat(巢德莫伯斯).Contains(MainClass.Class.getName(),mainClass.nestedClass.Class.getName());

3.8。运行java文件

这个版本的一个重大变化是我们不需要编译Java源文件javac.明确地了解

$ javac HelloWorld.java

相反,我们可以直接运行该文件使用java.命令:

$ java helloworld.java hello java 11!

4.性能增强

我们现在看一下几个新功能,其主要目的正在提高性能。

4.1。动态类文件常量

Java类文件格式扩展为支持新的常量池形式,命名constant_dynamic.

加载新的常量池将委派创建到引导方法,就像链接一样Invokedynamic.呼叫站点将链接联动到引导方法。

此功能增强了性能和目标语言设计者和编译器实现者。

4.2。改进的AARCH64内在机构

Java 11在ARM64或AARCH64处理器上优化现有的字符串和数组内部内部。此外,实施了新的内在机构罪,因为,日志的方法java.lang.Math.

我们使用的是任何其他功能的内在函数。但是,内在函数通过编译器以特殊方式处理。它利用CPU架构特定的汇编代码提高性能。

4.3。一种No-Op垃圾收集器

一个名为Epsilon的新的垃圾收集器可以在Java 11中作为一个实验性特性使用。

它被称为no-op(无操作),因为它分配了内存,但实际上没有收集任何垃圾。因此,epsilon适用于模拟内存误差。

显然,epsilon不适合典型的生产Java应用。但是,有一些具体用例可以有用:

  • 性能测试
  • 记忆压力测试
  • VM接口测试和
  • 极度短暂的工作

为了启用它,使用-xx:+ unsockexperishingvmoptions -xx:+ usepsilongc旗帜。

4.4。飞行记录器

Java飞行记录器(JFR)现在是Open JDK的开源,它曾经是Oracle JDK中的商业产品。JFR是一种分析工具,我们可以使用从正在运行的Java应用程序收集诊断和分析数据。

要启动120秒JFR录制,我们可以使用以下参数:

- xx: StartFlightRecording =时间= 120年代,设置=概要文件,文件名= java-demo-app.jfr

我们可以在生产中使用JFR,因为它的性能开销通常低于1%。时间一过,我们就可以访问保存在JFR文件中的记录数据。

但是,为了分析和可视化数据,我们需要利用另一个名为的工具JDK任务控制(JMC)。

5.删除和弃用的模块

随着Java演变,我们无法再使用其任何删除的功能,并应停止使用任何已弃用功能。让我们快速看看最值得注意的。

5.1。Java EE和CORBA

在第三方网站上提供了Java EE技术的独立版本。因此,不需要Java SE将其包含在内。

Java 9已弃用已选择Java EE和CORBA模块。在第11版中,它现在完全删除:

  • 基于XML的Web服务Java APIs (java.xml.ws
  • XML绑定的Java架构(java.xml.bind.bind.
  • javabean激活框架(java.activation.
  • 常见的诠释(java.xml.ws.annotation
  • 通用对象请求代理架构(java.corba)
  • JavaTransaction API(java.transaction

5.2。jmc和javafx

JDK任务控制(JMC)不再包含在JDK中。现在可以作为单独的下载提供jMC的独立版本。

这同样是真的javafx.模块。JavaFX将作为JDK之外的单独模块提供。

5.3。弃用模块

此外,Java 11弃用了以下模块:

  • nash JavaScript引擎,包括JJS工具
  • JAR文件的Pack200压缩方案

6.杂项变化

Java 11引入了一些重要的更改,提及很重要:

  • 新的Chacha20和Chacha20-Poly1305密码实现更换了不安全的RC4流密码
  • 支持Cryptography与Curve25519和Curve448的加密密钥协议替换现有的ECDH方案
  • 将传输层安全(TLS)升级到版本1.3带来了安全性和性能改进
  • 引入了一个低延迟垃圾收集器ZGC,作为一个具有低暂停时间的实验性特性
  • 对Unicode 10的支持带来了更多字符,符号和表情符号

7.结论

在本文中,我们探讨了Java 11的一些新功能。

我们涵盖了Oracle和Open JDK之间的差异。此外,我们审核了API更改,以及其他有用的开发功能,性能增强功能和删除或已弃用的模块。

一如既往,源代码可用在github上

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
1评论
最老的
最新
内联反馈
查看所有评论
评论在本文上关闭!