📜  Java 11 – 特性和比较(1)

📅  最后修改于: 2023-12-03 15:31:28.057000             🧑  作者: Mango

Java 11 – 特性和比较

概述

Java 11 是 Java 开发平台的一个重大版本更新。它在 JDK11/JRE11 之上构建,并包含了许多新的特性和功能。Java 11 的发布还带来了新的改进和增强,使得 Java 11 之前的版本显得过时。本篇文章将为开发人员介绍 Java 11 的新特性和优势。

特性

以下为 Java 11 的新特性:

HTTP客户端

Java 11 中添加了一个新的 HTTP客户端API,该API提供了一种更加现代的方式来处理 HTTP 请求和响应。这个新的 API 显著简化了使用 HTTP 与 RESTful 服务进行交互的编程模型,提供了异步和流式处理的支持,同时还提供了基于 WebSocket 的支持。

以下是一个使用 HTTP 客户端发送 GET 请求的示例:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.example.com"))
        .build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println)
        .join();
打包生成本地可执行文件

Java 11 中添加了一个新的命令行工具 jlink,使得开发人员可以轻松地将 Java 应用程序打包成一个本地可执行文件。由此,用户无需安装并配置 JRE 也可以直接运行该应用程序,这将更加便捷地进行应用程序的交付和部署。

以下是一个使用 jlink 打包的示例:

jlink --module-path $JDK_HOME/jmods --add-modules mymodule --output myapp
本地变量类型推断

Java 11 引入了一项新的语言特性,允许开发人员在声明变量时省略类型名称。这种语法称为本地变量类型推断。这种语法在某些情况下可以帮助代码变得更加简洁和易于阅读。

以下是一个使用本地变量类型推断的示例:

var list = new ArrayList<String>();
list.add("hello");
list.add("world");
System.out.println(list);
ZGC 改进

Java 11 新增了 ZGC 垃圾回收器,允许对大量堆内存进行处理,并且可以做到不中断性。要充分利用这种功能,开发人员需要先配置运行时参数,以允许 ZGC 垃圾回收器将大量的内存用于堆内存。

以下是一个典型的 JVM 配置示例:

java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC myapp.jar
比较

以下是 Java 11 与 Java 8 和 9 的比较:

  1. Java 11 完全支持 HTTP 客户端 API,而早期版本则需要使用第三方库。
  2. Java 11 引入本地变量类型推断,它可以帮助开发人员缩短代码长度,同时更易于阅读和理解,这是早期版本中没有的语言特性。
  3. Java 11 中新增了 ZGC 垃圾回收器,是 Java 的最新垃圾回收器。Java 11 是唯一正式支持 ZGC 的版本,其他版本都需要进行额外的操作。
  4. Java 11 中新增的打包工具 jlink 使得应用程序的部署更加方便,用户可以在没有 JRE 的情况下轻松运行。这种改进在早期版本中也不具备。
结论

Java 11 是 Java 开发平台的一个主要更新,具有许多新的特性和功能优势,包括 HTTP 客户端 API、本地变量类型推断、ZGC 垃圾回收器和 jlink 打包工具。在 Java 11 中新增的 Java 应用程序打包工具 jlink 可以帮助开发人员轻松构建本地可执行文件,并且不需要 JRE 的任何依赖。Java 11 还引入了 ZGC 垃圾回收器,它是一种可以对大量堆内存进行处理的垃圾回收器,并且可以保持不停机运行。在 Java 11 中新增的本地变量类型推断也可以帮助开发人员简化代码,让代码更加容易阅读和理解。