JDK11 新功能说明与下载安装及环境变量配置

时间:2024-04-12 13:54:52

jdk11是后面几年唯一持续更新修复的版本(LTS)

jdk11使用量将爆发式增长

jdk11新功能

JVM方面:

新垃圾回收器:ZGC: A Scalable Low-Latency Garbage Collector(可伸缩低延迟垃圾收集器)

上一代的垃圾回收器G1已经足够强大,但是,ZGC可能会更加惊艳,ZGC的一个目标是将垃圾回收的暂停时间压缩到10ms之内,这意味着Java可以成为应用到更广泛的领域。官方文档提供了ZGC与G1的benchmarks测试对比,我们看到对比G1的156.806ms平均时间,ZGC的垃圾收集时间低至1.091ms

ZGC
avg: 1.091ms (+/-0.215ms)
95th percentile: 1.380ms
99th percentile: 1.512ms
99.9th percentile: 1.663ms
99.99th percentile: 1.681ms
max: 1.681ms

G1
avg: 156.806ms (+/-71.126ms)
95th percentile: 316.672ms
99th percentile: 428.095ms
99.9th percentile: 543.846ms
99.99th percentile: 543.846ms
max: 543.846ms

面向开发者的新特性:

1、集合加强

所有集合(List/Set/Map)都增加了of和copyOf方法,用来创建不可变集合,即一旦创建就无法再执行添加、删除、替换、排序等操作,否则将报java.lang.UnsupportedOperationException异常。例子如下:

    List strs = List.of("Hello", "World");
    List strsCopy = List. copyOf(strs);
    Set strs = Set.of("Hello", "World");
    Map maps = Map.of("Hello", 1, "World", 2);


2、私有接口方法

jdk8提供了接口的默认方法(default)和静态方法,打破了之前接口只能定义方法而不能存在行为。jdk11则是允许接口定义私有方法,私有方法可以作为通用方法放在默认方法中调用。

3、I/O流加强

java.io.InputStream 中增加了新的方法来读取和复制 InputStream 中包含的数据:

readAllBytes:读取 InputStream 中的所有剩余字节

readNBytes: 从 InputStream 中读取指定数量的字节到数组中

transferTo:读取 InputStream 中的全部字节并写入到指定的 OutputStream 中 

4、局部变量类型推断

局部变量类型推断可以说是jdk11中最值得注意的特性,这是Java语言开发人员为了简化Java应用程序的编写而采取的又一步,举个例子:

原先我们需要这么定义一个list

List<String> list = new ArrayList<>();
使用局部类型推断var关键词定义

var list = new ArrayList<String>();


不过局部变量类型推断仅仅适用在:

有初始化值的局部变量

增强 for 循环中的索引

传统 for 循环中声明的局部变量

Oracle 的 Java 团队申明,以下不支持局部变量类型推断:

方法参数

构造函数参数

方法返回类型

字段

catch 代码块(或任何其他类型的变量声明)

5、字符串加强

lines()

字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行

 

isBlank()

验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)

 

strip()/stripLeading()/stripTrailing()

这三个方法的作用分别是去掉字符串头和尾的空白符、字符串头的空白符、字符串尾的空白符,基本与 trim()/trimLeft()/trimRight() 方法相同,不过它们的空白字符由 Character.isWhiteSpace(int) 验证

toString(int)

JDK 11 使这个过程变得更加方便

6HttClient Api

这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在java.net包中找到这个 Api

 

Oracle JDK迁移指南

官网地址

https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24-4403-8540-CFEA875B994A

 

部分摘录

本指南的目的是帮助您确定潜在的问题,并就如何将现有的Java应用程序迁移到最新的JDK版本提供建议。该指南还重点介绍了对最新版本所做的重大更改和增强。

本指南包含以下部分:

JDK 11版本中的重大更改

为迁移做准备

从JDK 8迁移到更高版本的JDK

JDK 11版本中的重大更改

在将应用程序迁移到JDK 11之前,您应该了解它与JDK 10版本之间的更新和更改。如果要从JDK 8进行迁移,则还应该熟悉JDK 8和更高版本之间的区别,这些区别在从JDK 8迁移到更高版本的JDK版本中进行了描述。

以下是JDK 11中的一些重要更改:

Oracle不再提供JRE和Server JRE下载。因此,自动更新不再可用。

Oracle不再提供32位Windows下载。

JDK中不提供Java Web Start,Java插件和Java控制面板。请参阅卸下部署堆栈。

JavaFX不再包含在JDK中。现在可以从https://openjfx.io/单独下载获得。

JAXB和JAX-WS不再与JDK捆绑在一起。请参阅除去Java EE和CORBA模块。

 

jdk11下载安装及环境变量配置

官网下载地址

https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

 

JDK11 新功能说明与下载安装及环境变量配置

需要注册账号并登陆。往下划动,找到下面这个图的位置,勾选同意,选择你本机系统对应的jdk版本,exe文件为安装,zip为解压模式。在这里选择exe文件下载

JDK11 新功能说明与下载安装及环境变量配置

配置jdk11的环境变量

  路径:“计算机”--》“属性”--》“高级系统设置”--》“高级”--》“环境变量”--》“系统变量”

 如果没有“java_home”,则新建;若有,则点击编辑:

  变量名:java_home

  变量值:D:\jdk11\(jdk11的安装目录)

JDK11 新功能说明与下载安装及环境变量配置

 配置path:如果没有“path”,则新建;若有,则点击编辑:

  变量名:path

  变量值:%JAVA_HOME%\bin;(最后面追加,前面记得加一个英文的“;”号分隔)

JDK11 新功能说明与下载安装及环境变量配置

至此,jdk11的环境变量配置结束,其他无需配置。

创建jre目录

jdk11和jdk12在安装之后是没有jre目录的,如果需要,需自己手动建立。方法如下

  cd到jdk安装目录下,输入命令:jlink.exe --module-path jmods --add-modules java.desktop --output jre     手动生成jre