从JDK 8到15以来所有Java和JVM功能的分类列表 - advancedweb


新语言功能
您应该了解的Java语言增强功能

  • 文本块JDK 15
  • 密封类可以限制哪些其他类可以扩展它们(预览)JDK 15
  • 记录(预览)JDK 15
  • 用于instanceof的模式匹配(预览)JDK 15 
  • Switch表达式JDK 14
  • 有用的NullPointerExceptions准确地描述了哪个变量为空JDK 15(-XX:+ShowCodeDetailsInExceptionMessages在JDK 14中启用)
  • 引入var使局部变量声明不太礼貌的JDK 11(在JDK 10中没有lambda支持)
  • 选择加入和向后兼容的模块系统,以避免ClassDefNotFoundErrors在运行时创建内部APIJDK 9(Project Jigsaw)
  • 接口JDK 9(Milling Project Coin)中的私有方法
  • 匿名内部类JDK 9的钻石运算符(Milling Project Coin)
  • 使用资源进行尝试有效地允许最终变量JDK 9(Milling Project Coin)
  • @SafeVargs关于私有实例方法JDK 9(Milling Project Coin)
  • import语句JDK 9上没有弃用警告

 
新的API
重点介绍我们可以在日常编码中使用的新功能。
通用
  • 在FileChannel API JDK 14中支持非易失性映射字节缓冲区
  • Files.mismatch:在两个文件JDK 12的内容中找到第一个不匹配的字节
  • Collectors.teeing创建一个由两个下游收集器JDK 12组成的收集器
  • 字符串增强:indent和transformJDK 12
  • 标准HTTP客户端设有HTTP / 2,的WebSocket支持和非阻塞APIJDK 11
  • 字符串的改进,如isBlank,lines,repeat和stripJDK 11
  • 便利的Collections工厂方法,以减轻JDK 9没有Collection遍历器的痛苦
  • 用于非阻塞背压JDK 9的异步流处理的Reactive Streams发布-订阅框架
  • 基于时间的JDK 9CompletableFuture(超时,延迟)增强
  • 更多的选项来转换(dropWhile,takeWhile)和生成(iterate,ofNullable)流;只读收集器(toUnmodifiableList); 可选选项可以转换为流JDK 9
  • Arrays.mismatch:找到两个数组JDK 9之间的第一个不匹配元素
  • 允许懒惰和堆栈帧过滤的Stack-Walking APIJDK 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的支持

国际化
  • Unicode 10.0,大约添加了27.000个字符,10个块和30多个脚本JDK 11(在JDK 9中支持Unicode 8.0 )
  • java.util.Locale和相关的API支持货币类型,时区以及更多JDK 10
  • ResourceBundle以UTF-8而不是ISO-8859-1 JDK 9加载属性文件
  • 默认情况下,JDK 9启用了CLDR语言环境数据

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

性能改进
一般
  • 外部存储器访问API,可安全有效地使用堆外存储器(孵化器J)JDK 15
  • 在Java应用程序执行结束时启用类的动态归档JDK 13
  • 应用程序类数据共享通过在Java进程之间共享类元数据来缩短启动时间并减少占用空间。JDK 10
  • 默认情况下,默认类列表的类数据共享存档已启用,以缩短开箱即用的启动时间JDK 12
  • 节省空间的紧凑型字符串,可更有效地存储仅Latin-1的字符串JDK 9
  • 已剖析和未剖析的已编译代码的代码缓存是分开的,从而提高了性能和内存占用JDK 9
  • 将Interned字符串存储在类数据共享档案中,以减少内存消耗JDK 9

库包
  • 改进的内在的java.lang.Math sin,cos并且log功能上AArch64处理器版本的JDK 11
  • 安全管理器性能改进JDK 9
  • Spin-Wait Hint(ThreadonSpinWait)用于优化繁忙等待的样式循环JDK 9
  • 在Java 2D中将Marlin Renderer用作默认图形光栅化器,而不是PiscesJDK 9
  • 通过利用最近引入的SPARC和Intel x64 CPU指令JDK 9,提高了GHASH和RSA的性能

并发
  • 停止每个线程的线程本地握手JDK 10
  • 改进了竞争对象监视器JDK 9的性能
  • 关键部分的线程堆栈上有额外的空间,从而减轻了java.util.concurrent在堆栈溢出时发生死锁的风险JDK 9

编译器
  • Linux的提前编译能力(实验)JDK 10(作为实验性的JIT编译器而逐渐发展)JDK 9(JVM编译器接口)JDK 9(作为AoT编译器而逐渐成为现实)
  • Javac中的性能改进:类型检查多边形表达式的新策略JDK 9

G1垃圾收集器(默认)
  • NUMA感知内存分配JDK 14
  • 可终止的混合集合,以满足用户提供的暂停目标JDK 12
  • 空闲JDK 12时自动将堆内存返回到操作系统
  • 并行完整GC可改善最坏情况的延迟JDK 10
  • G1垃圾收集器现在是默认设置,而不是Parallel GCJDK 9

其他垃圾收集器
  • Z垃圾收集器,大型堆提供了非常低暂停时间JDK 15(实验在JDK 14(Windows)中JDK 14(OS X)JDK 11(Linux)的)
  • 雪兰多亚垃圾收集器,具有与ZGC相似的优点,但基于不同的算法JDK 15(在JDK 12中的是实验功能)
  • Epsilon垃圾收集器,它没有实现实际的内存回收,正在努力将JDK 11的开销降至最低
  • XX:AllocateHeapAt=<path>支持备用存储设备JDK 10

诊断和工具
  • Flight Recorder事件流:可通过API获得分析数据,使其适用于连续监视JDK 14
  • 基于JMH JDK 12的Microbenchmark Suite
  • 飞行记录器是OpenJDK JDK 11的一部分
  • 通过JMTI JDK 11进行低开销堆分析
  • 对C1和C2编译器的运行时可管理且特定于方法的控制,可启用包含的测试JDK 9
  • JVMJDK 9(统一的JVM日志记录)的所有组件的细粒度,易于配置的日志记录系统,JDK 9(统一的GC日志记录)
  • 允许应用程序提供平台类JDK 9使用的记录器实现

 
安全改进
  • JDK提供了默认的根证书颁发机构(CA)证书集,因此TLS连接可以直接使用JDK 10
  • 验证传入的序列化数据JDK 9
  • 默认密钥库类型是标准PKCS12,而不是专有JKSJDK 9
  • 基于DRBG的SecureRandomJDK 9
  • 使用基于SHA-1的签名JDK 9禁用X.509证书链
  • SHA-3哈希算法JDK 9

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

加密
  • 爱德华兹曲线数字签名算法(EdDSA)-RFC8032[url=https://openjdk.java.net/jeps/339]JDK 15[/url]
  • 与Curve25519和Curve448 JDK 11的关键协议
  • ChaCha20和Poly1305加密算法JDK 11

加载
  • 启动单文件源代码程序,包括#!对Unix JDK 11上的shebang()行的支持
  • jshell:Java REPLJDK 9(Project Kulla)→相关:使用JShell进行原型设计
  • 编译老年人平台版本的--release,它配置--source和--target以及对相应平台版本链接JDK 9
  • 尽早验证JVM命令行标志以避免崩溃JDK 9

打包
  • 支持本地打包格式的打包工具:msi,exe,pkg,dmg,deb和rpm(孵)JDK 14
  • jlink可以为模块化Java应用程序进程构建优化的细长运行时映像的Java Linker仅包含JDKJDK 9的必需部分
  • 多重发布JAR文件,可在单个存档JDK 9中允许多个Java版本特定的类版本

Java文档
  • Javadoc工具现在发出HTML5标记,而不是基于框架的布局,并且该文档包含一个搜索框,以简化导航JDK 9

字节码
  • 替换Unsafe::defineAnonymousClass()为Lookup::defineHiddenClass(),用于框架以动态生成其他类无法发现,链接和直接使用的隐藏类。JDK 15
  • java.lang.invoke.constant软件包,以便于轻松描述可加载常量(ldc指令的操作数),与依赖于临时字符串表示形式JDK 12相比,它不那么容易出错
  • CONSTANT_Dynamic常量池条目,它使用引导程序来执行解析,类似于INVOKEDYNAMIC调用JDK 11
  • Nest访问控制上下文的引入,该上下文将类包装在同一代码实体中(例如嵌套类),并且无需编译器将桥接方法插入到生成的字节码中。JDK 11
  • 为静态字符串连接生成的字节码使用invokedynamic而不是直接创建StringBuilderappend链。这将使以后可以优化String连接,而无需更改字节码。JDK 9
  • INVOKEDYNAMIC可以表达对对象属性或集合JDK 9的高级操作

新支持的平台

新版本方案
  • 更简单的版本字符串方案。JDK 10

弃用和移除
  • 删除Nashorn Javascript Engine和jjs工具JDK 15(在JDK 11中已弃用)
  • 删除Solaris和SPARC端口JDK 15JDK 14中已弃用)
  • 弃用RMI激活会影响java.rmi.activation软件包和rmid工具,但不会影响一般JDK 15中的Java RMI
  • 默认情况下禁用偏向锁定,弃用相关的命令行标志JDK 15
  • 弃用Unsafe::defineAnonymousClass()JDK 15
  • 删除并发标记扫描(CMS)垃圾收集器JDK 14
  • 弃用ParallelScavenge + SerialOld GC组合JDK 14
  • 删除Pack200工具和APIJDK 14
  • 弃用Pack200工具和APIJDK 11
  • 删除Java EEJDK 11
  • 删除CORBAJDK 11
  • 删除Threaddestroy和ThreadstopJDK 11
  • var不再是有效的类名称JDK 10
  • 删除javah工具JDK 10
  • 下划线不再是有效的标识符JDK 9
  • 内部API(sun.*)已删除或不建议使用JDK 9
  • 删除apple.applescript并com.apple打包JDK 9
  • 使用基于SHA-1的签名JDK 9禁用X.509证书链
  • 删除启动时JRE版本选择指令:JRE-Version清单条目和-version:cli选项JDK 9
  • 删除jhat工具JDK 9
  • 删除JVM TI hprof代理JDK 9
  • 删除JDK 8中不推荐使用的GC组合JDK 9
  • ResourceBundle以UTF-8而不是ISO-8859-1 JDK 9加载属性文件
  • 弃用Applet APIJDK 9
  • 弃用并发标记扫描垃圾收集器JDK 9
  • 弃用Object.finalize()JDK 9
  • 从JRE JDK 9中删除认可的标准替代(lib/endorsed)和扩展(lib/ext)机制
  • rt.jar从JRE JDK 9中删除

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