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 使这个过程变得更加方便
6、HttClient Api
这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在java.net包中找到这个 Api
Oracle JDK迁移指南
官网地址
本指南的目的是帮助您确定潜在的问题,并就如何将现有的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
需要注册账号并登陆。往下划动,找到下面这个图的位置,勾选同意,选择你本机系统对应的jdk版本,exe文件为安装,zip为解压模式。在这里选择exe文件下载
配置jdk11的环境变量
路径:“计算机”--》“属性”--》“高级系统设置”--》“高级”--》“环境变量”--》“系统变量”
如果没有“java_home”,则新建;若有,则点击编辑:
变量名:java_home
变量值:D:\jdk11\(jdk11的安装目录)
配置path:如果没有“path”,则新建;若有,则点击编辑:
变量名:path
变量值:%JAVA_HOME%\bin;(最后面追加,前面记得加一个英文的“;”号分隔)
至此,jdk11的环境变量配置结束,其他无需配置。
创建jre目录
jdk11和jdk12在安装之后是没有jre目录的,如果需要,需自己手动建立。方法如下
cd到jdk安装目录下,输入命令:jlink.exe --module-path jmods --add-modules java.desktop --output jre 手动生成jre