自JDK 8 以来所有Java和JVM新功能的分类列表

栏目: Java · 发布时间: 5年前

内容简介:一个方便的参考,涵盖从从Java 8到11及更高版本各种新语言功能到新版本命名方案的所有内容。自从版本8发布到版本11以来,Java由120个因为每个类别中都有许多功能,所以我决定不按时间顺序显示它们,而是从那些看起来最重要的功能开始。此外,我在每个类别的末尾添加了预期的JDK 12功能。

一个方便的参考,涵盖从从 Java 8到11及更高版本各种新语言功能到新版本命名方案的所有内容。

自从版本8发布到版本11以来,Java由120个 JDK增强建议 (JEP)构成,每个 建议 都为平台带来了一些改进。我决定阅读它们并根据改进创建一个简明的分类列表。

因为每个类别中都有许多功能,所以我决定不按时间顺序显示它们,而是从那些看起来最重要的功能开始。此外,我在每个类别的末尾添加了预期的JDK 12功能。

新语言功能

当Java 8引入lambdas时,这是一个非常巨大的变化。虽然最近的版本没有添加这样有影响力的功能,但是对该语言进行了许多小的改进。

1. JDK 10,JDK 11引入var使局部变量声明不那么隆重的

var greeting = "Hello World!";

2. JDK 9(项目Jigsaw)加入和向后兼容的模块系统,以避免ClassDefNotFoundErrors在运行时创建内部API

module hu.advancedweb.helloworld {
    requires hu.advancedweb.somedependency;
    exports hu.advancedweb.hello
}

3. JDK 9 接口中增加私有方法(Milling Project Coin)

4. JDK 9 加入匿名内部类的Diamond 操作符

5. JDK 9 加入Try-with-resources允许有效的最终final变量

6. JDK 9 加入@SafeVargs私有实例方法

7. JDK 9 import语句没有了deprecation警告

8. JDK12: Switch Expressions(预览版)

JEP 325

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

新的API

让我们继续Java标准库,重点关注我们可以在日常编码中使用的新功能。

如果您对Java 8和11之间的所有API级别差异感到好奇,请检查 版本8和11之间 的  Java API差异

一般

  • 便利工厂收集方法,以减轻没有收集文字的痛苦 JDK 9
    Set<Integer> mySet = Set.of(1, 2, 3);
    List<Integer> myList = List.of(1, 2, 3);
    Map<String, Integer> myMap = Map.of("one", 1, "two", 2);
  • 标准HTTP客户端,具有HTTP / 2,WebSocket支持和非阻塞API  JDK 9 (孵化器), JDK 11 (标准)
    HttpClient httpClient = HttpClient.newBuilder().build();
    
    HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create("https://advancedweb.hu/"))
              .GET()
              .build();
    
    HttpResponse<String> response = httpClient.send(request, BodyHandlers.ofString());
  • Reactive Streams发布 - 订阅框架,用于使用非阻塞背压 JDK 9 进行异步流处理
  • 基于时间的增强CompletableFuture(超时,延迟) JDK 9
  • 字符串的改进,如isBlank,lines,repeat和strip JDK 11
  • 更多转换(dropWhile,takeWhile)和生成(iterate,ofNullable)流的选项; readonly collectors(toUnmodifiableList); 选项可以转换为流 JDK 9
  • Arrays.mismatch:找到两个数组 JDK 9 之间的第一个不匹配元素
  • Stack-Walking API允许懒惰和堆栈帧过滤 JDK 9
  • Process API提供更多信息和控制(例如进程ID,参数,CPU时间,父/子进程),增强ProcessBuilder以帮助创建流程管道 JDK 9
  • VarHandleAPI来代替场和阵列相关的操作java.util.concurrent.atomic和sun.misc.Unsafe为了提供低级别的访问mechamisms,例如原子写入。 JDK 9
  • JDK 9的 新组合器和查找方法MethodHandle
  • 增强的弃用政策。@Deprecated可以标记forRemoval,发出新警告。 JDK 9
  • OASIS标准XML目录API,以安全,高效的方式管理XML中的外部资源 JDK 9
  • 将JDK的XML解析器Xerces更新为2.11.0版 JDK 9
  • TIFF支持图像I / O框架 JDK 9
  • 即将在JDK 12:字符串增强功能:align,indent和transform JDK 12
  • 进入JDK 12 :: Files.mismatch在两个文件 JDK 12 的内容中找到第一个不匹配的字节
  • 进入JDK 12: Collectors.teeing创建一个由两个下游收集器 JDK 12 组成的收集器

国际化

  • ResourceBundle以UTF-8而不是ISO-8859-1  JDK 9 加载属性文件
  • Unicode 10.0,添加大约27.000个字符,10个块和30个以上的脚本 JDK 9 (Unicode 8.0), JDK 11 (Unicode 10.0)
  • java.util.Locale和相关的API支持货币类型,时区和更多 JDK 10
  • 默认 JDK 9 启用CLDR区域设置数据

图形和桌面应用程序

  • 适用于所有平台的桌面功能,如登录/注销/锁定事件监听器和任务栏交互 JDK 9
  • MultiResolutionImage这使得为​​DPI  JDK 9 轻松检索特定于分辨率的图像
  • Windows和Linux  JDK 9 上的HiDPI Graphics
  • Linux 上为JavaFX,Swing和AWT  JDK 9 启用GTK 3
  • 使用Swing  JDK 9的 注释替换@beaninfoJavadoc标记@BeanInfo
  • 将JavaFX / Media中包含的GStreamer更新为1.4.4版 JDK 9
  • 用HarfBuzz  JDK 9 替换现有的ICU OpenType字体布局引擎

性能改进

一般

  • 节省空间的紧凑字符串,可以更有效地存储Latin-1字符串 JDK 9
  • 异形和非分析编译代码的代码高速缓存是分开的,从而提高了 JDK 9的 性能和内存占用
  • 将Interned Strings存储在类数据共享存档中以减少内存消耗 JDK 9
  • 应用程序类 - 数据共享通过在Java进程之间共享类元数据来缩短启动时间并减少占用空间。 JDK 10
  • 进入JDK 12:默认启用默认类列表的类数据共享存档,以改善开箱即用的启动时间 JEP 341

库包相关

  • 改进的内在的java.lang.Math sin,cos并且log功能上AArch64处理器 版本的JDK 11
  • 安全管理器性能改进 JDK 9
  • Spin-Wait Hint(Thread#onSpinWait)优化忙等待样式循环 JDK 9
  • 在Java 2D中使用Marlin Renderer作为默认图形光栅化器而不是Pisces  JDK 9
  • 利用最近推出的SPARC和Intel x64 CPU指令 JDK 9, 改进了GHASH和RSA性能

并发

  • 改进了竞争对象监视器的性能 JDK 9
  • 关键部分的线程堆栈上的额外空间,java.util.concurrent在堆栈溢出的情况下降低锁中死锁的风险 JDK 9
  • Thread-Local握手停止单个线程 JDK 10

编译器

  • javac中的性能改进:类型检查多重表达式的新策略 JDK 9
  • Linux  JDK 9 (JVM编译器接口), JDK 9 (Graal作为AoT编译器), JDK 10 (Graal作为实验性JIT编译器)的实验性提前编译功能

垃圾收集器

  • G1垃圾收集器现在是默认值而不是Parallel GC  JDK 9
  • G1 GC性能改进:并行完整GC以改善最坏情况延迟 JDK 10
  • 介绍Z垃圾收集器,它在大堆 JDK 11 上提供非常低的暂停时间
  • 介绍Epsilon垃圾收集器,它不实现实际的内存回收,争取尽可能低的开销 JDK 10JDK 11
  • XX:AllocateHeapAt=<path>支持替代内存设备 JDK 10
  • 进入JDK 12: G1 GC性能改进:可中断的混合集合,以满足用户提供的暂停目标,在空闲时自动将Java堆内存返回给操作系统 JEP 344JEP 346
  • 进入JDK 12:介绍Shenandoah垃圾收集器,提供与ZGC类似的好处,但基于不同的算法 JEP 189

诊断和工具

  • Flight Recorder是OpenJDK  JDK 11的 一部分
  • 通过JMTI  JDK 11进行 低开销堆分析
  • C1和C2编译器的运行时可管理和方法特定控制,支持包含测试 JDK 9
  • 针对JVM  JDK 9 (统一JVM日志记录), JDK 9 (统一GC日志记录)的所有组件的细粒度,易于配置的日志记录系统
  • 允许应用程序提供平台类 JDK 9 使用的记录器实现
  • 参加JD​​K 12:基于JMH  JEP 230的  Microbenchmark Suite

安全改进

  • 验证传入的序列化数据 JDK 9
  • 默认密钥库类型是标准PKCS12,而不是专有的JKS  JDK 9
  • JDK提供了一组默认的根证书颁发机构(CA)证书,因此TLS连接正在开箱即用 JDK 10
  • 基于DRBG的SecureRandom JDK 9
  • 使用基于SHA-1的签名 JDK 9 禁用X.509证书链
  • SHA-3哈希算法 JDK 9

TLS

  • TLS 1.3支持 JDK 11
  • 数据报传输层安全性API(DTLS) JDK 9
  • OCSP装订TLS以提高证书状态检查 JDK 9的性能
  • TLS应用层协议协商(ALPN)扩展,无需额外往返即可实现协议协商; ALPN是HTTP / 2连接 JDK 9的要求

加密

  • 与Curve25519和Curve448  JDK 11的 重要协议
  • ChaCha20和Poly1305加密算法 JDK 11

启动

  • jshell:Java REPL  JDK 9 (Project Kulla)
  • 启动单文件源代码程序,包括支持#!Unix  JDK 11 上的shebang()行
  • 编译老年人平台版本的--release,其配置--source和--target以及对相应平台版本链接 JDK 9
  • 早期验证JVM命令行标志以避免崩溃 JDK 9

打包

  • jlinkJava Linker可以为模块化Java应用程序构建优化的,纤薄的运行时映像,它只包含JDK JDK 9 的所需部分- [  1  ],[  2  ],[  3  ],[  4  ],[  4  ], [  5  ]
  • 多发行版JAR文件,允许在单个存档 JDK 9中 使用多个特定于Java发行版的类

的Javadoc

  • Javadoc工具现在发出HTML5标记而不是基于框架的布局,文档包含一个搜索框以简化导航JDK 9 - [  1  ],[  2  ],[  3  ]

字节码

  • 为静态字符串连接生成的字节码使用invokedynamic而不是直接创建StringBuilder#append链。这将使字符串连接的未来优化成为可能,而不需要更改字节码。 JDK 9
  • INVOKEDYNAMIC可以表示对象属性和/或集合 JDK 9 的高级操作
  • CONSTANT_Dynamic常量池条目,使用引导来执行分辨率,类似于INVOKEDYNAMIC调用 JDK 11
  • 引入了包含相同代码实体中的类的Nest访问控制上下文(例如嵌套类),并且无需编译器将桥接方法插入到生成的字节码中。 JDK 11
  • 进入JDK 12: java.lang.invoke.constant包,允许轻松描述可加载常量(ldc指令的操作数),这比依赖于ad-hoc字符串表示 JEP 334 更不容易出错。

新平台

JDK 9为另外三个平台提供支持:

弃用和删除

本节总结了Java 8和11之间的重大更改和弃用。

  • 下划线不再是有效的标识符( JDK 9
  • var不再是有效的类名( JDK 10
  • 删除Java EE( JDK 11
  • 删除CORBA( JDK 11
  • 内部API(sun.*)被删除或弃用(JDK 9 - [  1  ],[  2  ])
  • 删除apple.applescript和com.apple打包( JDK 9
  • 使用基于SHA-1的签名禁用X.509证书链( JDK 9
  • 删除启动时JRE版本选择指令:JRE-Version清单条目和-version:cli选项( JDK 9
  • 删除jhat工具( JDK 9
  • 删除JVM TI hprof代理( JDK 9
  • 删除JDK 8中不推荐使用的GC组合( JDK 9
  • 删除javah工具( JDK 10
  • 删除Thread#destroy和Thread#stop。
  • 从JRE中删除Endorsed Standards Override(lib/endorsed)和Extensions(lib/ext)机制。
  • rt.jar从JRE中删除。
  • ResourceBundle以UTF-8而不是ISO-8859-1( JDK 9 )加载属性文件
  • 弃用Applet API( JDK 9
  • 弃用Nashorn Javascript引擎( JDK 11
  • 弃用并发标记扫描垃圾收集器( JDK 9
  • 弃用Object.finalize()( JDK 9
  • 弃用Pack200 工具 和API( JDK 11

如果您对Java 8和11之间的所有API级别差异感到好奇,请检查 Java Almanac 项目。还要查看  jdeps ,Java类依赖性分析器,以确定您的项目是否仍在使用旧的内部API。

新版本计划

  • 更简单的版本 - 字符串方案,与语义版本控制一致。 JDK 9JDK 10

总结

JDK 8 于2014年发布。我们不得不等待 JDK 9的 三年半。但从那时起事情就加速了。Java有一个新的发布结构,旨在每六个月发布一个新版本。 JDK 10 和  JDK 11 已经推出了许多功能。

虽然仍然支持Java 8,但迁移到Java 11会为表带来大量改进。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Growth Hacker Marketing

Growth Hacker Marketing

Ryan Holiday / Portfolio / 2013-9-3 / USD 10.31

Dropbox, Facebook, AirBnb, Twitter. A new generation of multibillion dollar brands built without spending a dime on “traditional marketing.” No press releases, no PR firms, and no billboards in Times ......一起来看看 《Growth Hacker Marketing》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具