一、JRE 11 概述
JRE 11是Java SE平台的一部分,是Java应用程序运行的标准环境,它提供了Java运行时环境,包括Java虚拟机、Java类库、Java组件,以及其他支持Java应用程序的文件。JRE 11是Sun Microsystems和其他合作伙伴共同开发的,现在已经成为Oracle的产品。
JRE 11相对于之前版本进行了性能、功能和安全性的增强,同时还增加了一些新的特性。以往版本的JRE在许多重要的参数设置和管理方面相对繁琐。但是,通过使用JRE 11,对于Java开发者和用户来说,可以大大简化这些任务和功能,更好地管理代码。
下面将重点介绍JRE 11的一些重要特性。
二、模块化架构:Jigsaw
JRE 11引入了模块化系统,也称为Project Jigsaw。在JRE 11之前,JRE是一个单一的、巨大的包含所有类和方法的单个库。这非常笨重,难以维护和部署,也容易引发安全漏洞。
在JRE 11中,代码被分为许多模块,每个模块都有自己的接口和实现。这使得应用程序更加灵活,可以只导入自己需要的模块,节约了内存和磁盘空间。此外,模块也可以指定依赖关系,使程序更加可控和稳定。
module com.example.helloworld { requires org.apache.logging.log4j; requires java.sql; requires java.xml; }
三、HTTP/2 客户端
JRE 11 实现了HTTP/2标准协议,并提供了新的HTTP/2客户端API。HTTP/2是HTTP协议的一个新版本,它支持一些新的优化和特性,如请求的多路复用、头字段压缩等。这些特性可以大大提高网络传输的效率,更快、更稳定地连接到服务器。
JRE 11 通过新增 HttpClient类提供了全新的HTTP/2客户端API。HttpClient提供了基于响应式(Reactive)的API,可以帮助开发者更容易地进行并发请求、流式批处理请求等。HttpClient也集成了WebSockets支持。
HttpClient httpClient = HttpClient.newBuilder() .version(Version.HTTP_2) .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
四、局部变量类型推断
JRE 10引入了var,这是一种能够自动推断变量类型的关键字。而在JRE 11中,var可以用在更多的场景中,特别是在Lambda表达式和匿名内部类中使用。
使用var,可以大大简化代码,使它更易于阅读和理解。同时也避免了因类型声明引起的歧义和错误。
这是一个使用var的例子:
var persons = new ArrayList<String>(); persons.add("Tom"); persons.add("Jerry");
五、多个JDK版本的混合调用
JRE 11为多个JDK版本之间的混合调用提供了一些新的工具和API。这是因为在现实的Java应用程序中,有许多老的API和库依然在使用,而这些API和库往往有依赖于旧版本的JRE。
JRE 11 提供了一些工具和API,使开发者可以在同一个应用程序中使用多个不同版本的JDK。这使得API和依赖库可以更方便、更可靠地进行迁移和升级,也更好地支持混合云场景。
下面是一个使用多个JDK版本的例子:
String str = "Hello, World!"; CharSequence chseq = str.subSequence(0, 5); var chars = chseq.chars(); chars.forEach(System.out::println);
六、总结
JRE 11是Java SE平台的一部分,它具有模块化架构、HTTP/2客户端、局部变量类型推导、多个JDK版本的混合调用等许多新特性和优化。这些特性使Java应用程序更加灵活、稳定和高效。对于Java开发者和用户来说,是一个值得尝试和使用的版本。