专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 一文读懂JDK10新特性

一文读懂JDK10新特性

更新时间:2022-11-15 09:26:39 来源:赢咖4 浏览752次

1.局部变量类型推断

2.不可修改的集合

(1)备份()

java.util.List、java.util.Map 和java.util.Set 每个都有一个新的静态方法copyOf(Collection)。

它返回给定集合的不可修改的副本:

@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
    List<Integer> copyList = List.copyOf(someIntList);
    copyList.add(4);
}

任何修改此类集合的尝试都将导致java.lang.UnsupportedOperationException运行时异常。

(2)toUnmodifiable*()

java.util.stream.Collectors 获取额外的方法来将Stream 收集到不可修改的List、Map 或Set中:

@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
    List<Integer> evenList = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .collect(Collectors.toUnmodifiableList());
    evenList.add(4);
}

任何修改此类集合的尝试都将导致java.lang.UnsupportedOperationException运行时异常。

3.可选*.orElseThrow()

java.util.Optional、java.util.OptionalDouble、java.util.OptionalInt和java.util.OptionalLong每个都有一个新方法orElseThrow(),它不接受任何参数,如果没有值则抛出NoSuchElementException :

@Test
public void whenListContainsInteger_OrElseThrowReturnsInteger() {
    Integer firstEven = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .findFirst()
      .orElseThrow();
    is(firstEven).equals(Integer.valueOf(2));
}

它是同义词,现在是现有get()方法的首选替代方法。

4.性能改进

5.容器意识

JVM 现在知道在 Docker 容器中运行, 并将提取特定于容器的配置,而不是查询操作系统本身——它适用于已分配给容器的 CPU 数量和总内存等数据。

但是,此支持仅适用于基于 Linux 的平台。默认情况下启用此新支持,可以在命令行中使用 JVM 选项将其禁用:

-XX:-UseContainerSupport

此外,此更改添加了一个 JVM 选项,该选项提供了指定 JVM 将使用的 CPU 数量的能力:

-XX:ActiveProcessorCount=count

此外,还添加了三个新的 JVM 选项,以允许 Docker 容器用户对将用于 Java 堆的系统内存量进行更细粒度的控制:

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

6. 根证书

cacerts 密钥库最初是空的,旨在包含一组根证书,可用于建立对各种安全协议使用的证书链的信任。

因此,关键安全组件(如 TLS)在 OpenJDK 构建下默认不工作。

在 Java 10 中,Oracle 开源了 Oracle Java SE Root CA 程序中的根证书,以使 OpenJDK 构建对开发人员更具吸引力,并减少这些构建与 Oracle JDK 构建之间的差异。

7.弃用和删除

(1)命令行选项和工具

工具javah 已从 Java 10 中删除,Java 10 生成了实现本机方法所需的 C 头文件和源文件——现在,可以使用javac -h 代替。

policytool 是用于策略文件创建和管理的基于 UI 的工具。现在已将其删除。用户可以使用简单的文本编辑器来执行此操作。

删除了 java -Xprof选项。该选项用于分析正在运行的程序并将分析数据发送到标准输出。用户现在应该改用jmap 工具。

(2)蜜蜂

已弃用的 java.security.acl 包已标记为 forRemoval=true 并且可能会在 Java SE 的未来版本中被删除。它已被java.security.Policy 和相关类取代。

同样,java.security.{Certificate,Identity,IdentityScope,Signer} API 被标记为forRemoval=true。

8. 基于时间的版本控制

从 Java 10 开始,Oracle 已转向基于时间的 Java 发布。这具有以下含义:

每六个月发布一个新的 Java。2018 年 3 月发布的是 JDK 10,2018 年 9 月发布的是 JDK 11,依此类推。这些称为功能发布,预计至少包含一个或两个重要功能

对功能发布的支持将仅持续六个月,即直到下一个功能发布

长期支持版本将标记为 LTS。对此类发布的支持将持续三年

Java 11 将是一个 LTS 版本

java -version 现在将包含 GA 日期,从而更容易识别版本的年龄:

$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

以上就是关于“一文读懂JDK10新特性”的介绍,大家如果想了解更多相关知识,可以关注一下本站的Java赢咖4在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>