Skip to content
JavaGuideJavaGuide
面试指南
优质专栏
项目精选
书籍精选
旧版链接open in new window
RSS订阅open in new window
关于作者
github icon
      • Java8 新特性实战
        • 《Java8指南》中文翻译
          • Java 9 新特性概览
            • Java 10 新特性概览
              • Java 11 新特性概览
                • HTTP Client 标准化
                  • String 增强
                    • Optional 增强
                      • ZGC(可伸缩低延迟垃圾收集器)
                        • Lambda 参数的局部变量语法
                          • 启动单文件源代码程序
                            • 其他
                              • 参考
                              • Java 12 ~ 13 新特性概览
                                • Java 14 ~ 15 新特性概览

                              Java 11 新特性概览

                              author iconGuidecategory icon
                              • Java
                              tag icon
                              • Java新特性
                              calendar icon2022年3月1日word icon约 1308 字

                              此页内容
                              • HTTP Client 标准化
                              • String 增强
                              • Optional 增强
                              • ZGC(可伸缩低延迟垃圾收集器)
                              • Lambda 参数的局部变量语法
                              • 启动单文件源代码程序
                              • 其他
                              • 参考

                              Java 11 于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比,其最大的区别就是:在长期支持(Long-Term-Support)方面,Oracle 表示会对 Java 11 提供大力支持,这一支持将会持续至 2026 年 9 月。这是据 Java 8 以后支持的首个长期版本。

                              概览(精选了一部分) :

                              • JEP 321:HTTP Client 标准化open in new window
                              • JEP 333:ZGC(可伸缩低延迟垃圾收集器)open in new window
                              • JEP 323:Lambda 参数的局部变量语法open in new window
                              • JEP 330:启动单文件源代码程序open in new window

                              # HTTP Client 标准化

                              Java 11 对 Java 9 中引入并在 Java 10 中进行了更新的 Http Client API 进行了标准化,在前两个版本中进行孵化的同时,Http Client 几乎被完全重写,并且现在完全支持异步非阻塞。

                              并且,Java 11 中,Http Client 的包名由 jdk.incubator.http 改为java.net.http,该 API 通过 CompleteableFuture 提供非阻塞请求和响应语义。使用起来也很简单,如下:

                              var request = HttpRequest.newBuilder()
                                  .uri(URI.create("https://javastack.cn"))
                                  .GET()
                                  .build();
                              var client = HttpClient.newHttpClient();
                              
                              // 同步
                              HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
                              System.out.println(response.body());
                              
                              // 异步
                              client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                                  .thenApply(HttpResponse::body)
                                  .thenAccept(System.out::println);
                              
                              1
                              2
                              3
                              4
                              5
                              6
                              7
                              8
                              9
                              10
                              11
                              12
                              13
                              14

                              # String 增强

                              Java 11 增加了一系列的字符串处理方法:

                              //判断字符串是否为空
                              " ".isBlank();//true
                              //去除字符串首尾空格
                              " Java ".strip();// "Java"
                              //去除字符串首部空格
                              " Java ".stripLeading();   // "Java "
                              //去除字符串尾部空格
                              " Java ".stripTrailing();  // " Java"
                              //重复字符串多少次
                              "Java".repeat(3);             // "JavaJavaJava"
                              //返回由行终止符分隔的字符串集合。
                              "A\nB\nC".lines().count();    // 3
                              "A\nB\nC".lines().collect(Collectors.toList());
                              
                              1
                              2
                              3
                              4
                              5
                              6
                              7
                              8
                              9
                              10
                              11
                              12
                              13

                              # Optional 增强

                              新增了empty()方法来判断指定的 Optional 对象是否为空。

                              var op = Optional.empty();
                              System.out.println(op.isEmpty());//判断指定的 Optional 对象是否为空
                              
                              1
                              2

                              # ZGC(可伸缩低延迟垃圾收集器)

                              ZGC 即 Z Garbage Collector,是一个可伸缩的、低延迟的垃圾收集器。

                              ZGC 主要为了满足如下目标进行设计:

                              • GC 停顿时间不超过 10ms
                              • 即能处理几百 MB 的小堆,也能处理几个 TB 的大堆
                              • 应用吞吐能力不会下降超过 15%(与 G1 回收算法相比)
                              • 方便在此基础上引入新的 GC 特性和利用 colored 针以及 Load barriers 优化奠定基础
                              • 当前只支持 Linux/x64 位平台

                              ZGC 目前 处在实验阶段,只支持 Linux/x64 平台。

                              与 CMS 中的 ParNew 和 G1 类似,ZGC 也采用标记-复制算法,不过 ZGC 对该算法做了重大改进。

                              在 ZGC 中出现 Stop The World 的情况会更少!

                              详情可以看 : 《新一代垃圾回收器 ZGC 的探索与实践》open in new window

                              # Lambda 参数的局部变量语法

                              从 Java 10 开始,便引入了局部变量类型推断这一关键特性。类型推断允许使用关键字 var 作为局部变量的类型而不是实际类型,编译器根据分配给变量的值推断出类型。

                              Java 10 中对 var 关键字存在几个限制

                              • 只能用于局部变量上
                              • 声明时必须初始化
                              • 不能用作方法参数
                              • 不能在 Lambda 表达式中使用

                              Java11 开始允许开发者在 Lambda 表达式中使用 var 进行参数声明。

                              // 下面两者是等价的
                              Consumer<String> consumer = (var i) -> System.out.println(i);
                              Consumer<String> consumer = (String i) -> System.out.println(i);
                              
                              1
                              2
                              3

                              # 启动单文件源代码程序

                              这意味着我们可以运行单一文件的 Java 源代码。此功能允许使用 Java 解释器直接执行 Java 源代码。源代码在内存中编译,然后由解释器执行,不需要在磁盘上生成 .class 文件了。唯一的约束在于所有相关的类必须定义在同一个 Java 文件中。

                              对于 Java 初学者并希望尝试简单程序的人特别有用,并且能和 jshell 一起使用。一定能程度上增强了使用 Java 来写脚本程序的能力。

                              # 其他

                              • 新的垃圾回收器 Epsilon :一个完全消极的 GC 实现,分配有限的内存资源,最大限度的降低内存占用和内存吞吐延迟时间
                              • 低开销的 Heap Profiling :Java 11 中提供一种低开销的 Java 堆分配采样方法,能够得到堆分配的 Java 对象信息,并且能够通过 JVMTI 访问堆信息
                              • TLS1.3 协议 :Java 11 中包含了传输层安全性(TLS)1.3 规范(RFC 8446)的实现,替换了之前版本中包含的 TLS,包括 TLS 1.2,同时还改进了其他 TLS 功能,例如 OCSP 装订扩展(RFC 6066,RFC 6961),以及会话散列和扩展主密钥扩展(RFC 7627),在安全性和性能方面也做了很多提升
                              • 飞行记录器(Java Flight Recorder) :飞行记录器之前是商业版 JDK 的一项分析工具,但在 Java 11 中,其代码被包含到公开代码库中,这样所有人都能使用该功能了。
                              • ......

                              # 参考

                              • JDK 11 Release Notes:https://www.oracle.com/java/technologies/javase/11-relnote-issues.html
                              • Java 11 – Features and Comparison: https://www.geeksforgeeks.org/java-11-features-and-comparison/open in new window
                              edit icon编辑此页open in new window
                              上次编辑于: 2022/3/1 下午6:16:51
                              贡献者: guide
                              上一页
                              Java 10 新特性概览
                              下一页
                              Java 12 ~ 13 新特性概览
                              鄂ICP备2020015769号-1
                              Copyright © 2022 Guide