JDK 9 变更一览

概述

  • java9是一个主要版本的发布
  • 这里介绍的是Oracle对JDK9的特性和增强的实现
  • JEP是JDK的增强提案,包括增强建议和路线图流程
  • JSR(Java规范请求),描述了针对Java平台的建议和最终规范

JDK9主要变更

Java统一模块化标准

  • 这是全新的Java编程组件模块,是可命名的、可自描述的代码和数据集合。

    • 提供了可选择的、链接时间,在编译期和运行时之间,可以将一组模块组装成自定义运行时映象,类似与java工具jlink
    • 引入模块化JAR文件,是一个带有模块信息的JAR文件,信息存放文件module-info.class在根路径下
    • 引入JMOD的打包方式,类似与JAR的打包方式,文件包含本地代码和配置信息,可以通过jmod tool查看
  • JDK本身也被分成模块化

    • 允许把JDK模块组件自由组合成你需要的
    • 定义一个新的URI方案,资源包含命名模块、类和存储运行环境
    • java运行环境移除了rt.jar和tool.jar
    • 默认情况下JDK大部分内部API无法访问,执行命令jdeps -jdkinternals查看代码中是否使用内部JDK API
  • 更多信息见:

    • Java Platform Module System (JSR 376)
    • JEP 261: Module System
    • JEP 200: The Modular JDK
    • JEP 220: Modular Run-Time Images
    • JEP 260: Encapsulate Most Internal APIs

JEP 223:新的版本方案

$MAJOR.$MINOR.$SECURITY.$PATCH

  • $MAJOR主要版本,如JDK9,包含平台规范的新特性和对已有特性的更改
  • $MINOR次要版本,包含bug修复、标准api的修订和平台规范之外的特性实现
  • $SECURITY安全更新版本,包含关键修复和提高安全性的必要措施

JDK9新工具增强

  • JEP 222: jshell: The Java Shell (Read-Eval-Print Loop):提供了交互式命令行窗口
  • JEP 228: Add More Diagnostic Commands:提高对Hotspot和JDK问题的诊断能力
  • JEP 231: Remove Launch-Time JRE Version Selection:移除了启动时检查JRE版本
  • JEP 238: Multi-Release JAR Files:提供多版本JAR
  • JEP 240: Remove the JVM TI hprof Agent:从JDK中删除了hprof代理
  • JEP 241: Remove the jhat Tool:从JDK中移除了jhat tool
  • JEP 245: Validate JVM Command-Line Flag Arguments:校验JVM命令行标志参数
  • JEP 247: Compile for Older Platform Versions:增强javac,可以编译代码为早期版本
  • JEP 282: jlink: The Java Linker:提供Java版的链接时间

JDK9安全增强

  • JEP 219: Datagram Transport Layer Security (DTLS):支持安全套接字和SunJSSE支持DTLS(数据包传输层安全)
  • JEP 244: TLS Application-Layer Protocol Negotiation Extension:支持TLS(传输层安全)协议
  • JEP 249: OCSP Stapling for TLS
  • JEP 246: Leverage CPU Instructions for GHASH and RSA
  • JEP 246: Leverage CPU Instructions for GHASH and RSA
  • JEP 273: DRBG-Based SecureRandom Implementations
  • JEP 288: Disable SHA-1 Certificates
  • JEP 229: Create PKCS12 Keystores by Default
  • JEP 287: SHA-3 Hash Algorithms

JDK9部署增强

  • Deprecate the Java Plug-in:Java插件被标记为过时的
  • Enhanced Java Control Panel:增强Java控制面板
  • JEP 275: Modular Java Application Packaging
  • JEP 289: Deprecate the Applet API:Applet API被标记为过时的

JDK9对java语言的增强

  • JEP 213: Milling Project Coin:具体见Java SE 9的语言变更

JDK9对Javadoc的增强

  • Javadoc增强包含简化的Doclet API、Javadoc搜索、支持生成HTML5、支持模块系统中的注释
  • JEP 221: Simplified Doclet API
  • JEP 224: HTML5 Javadoc
  • JEP 225: Javadoc Search
  • JEP 261: Module System

JDK 9对JVM的增强

  • JEP 165: Compiler Control
  • JEP 197: Segmented Code Cache
  • JEP 276: Dynamic Linking of Language-Defined Object Models

JDK 9对JVM调优的增强

  • Improve G1 Usability, Determinism, and Performance:增强垃圾回收器(G1)
  • JEP 158: Unified JVM Logging:统一JVM日志
  • JEP 214: Remove GC Combinations Deprecated in JDK 8

    • 删除了JDK 8中标记过时的GC组合

      • DefNew + CMS
      • ParNew + SerialOld
      • Incremental CMS
    • 删除相应参数:

      • -Xincgc
      • -XX:+CMSIncrementalMode
      • -XX:+UseCMSCompactAtFullCollection
      • -XX:+CMSFullGCsBeforeCompaction
      • -XX:+UseCMSCollectionPassing
  • JEP 248: Make G1 the Default Garbage Collector:标记G1为默认GC
  • JEP 271: Unified GC Logging:统一GC日志
  • JEP 291: Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector:CMS标记为过时

JDK 9核心库

  • JEP 102: Process API Updates:进程API,java.lang.ProcessHandle可以获取进程ID、参数、命令等
  • JEP 193: Variable Handles:变量处理,见java.util.concurrent.atomic包下和sun.misc.Unsafe的源码
  • JEP 254: Compact Strings:压缩字符串
  • JEP 264: Platform Logging API and Service:统一日志API
  • JEP 266: More Concurrency Updates
  • JEP 268: XML Catalogs
  • JEP 269: Convenience Factory Methods for Collections:集合工厂方法

    • 类似guava,Set alphabet = Set.of("a", "b", "c");
    • JEP 274: Enhanced Method Handles:方法处理
  • JEP 277: Enhanced Deprecation:增强注解
  • JEP 285: Spin-Wait Hints:自旋等待提示,见Thread#onSpinWait()
  • JEP 290: Filter Incoming Serialization Data
  • JEP 259: Stack-Walking API:堆栈API,见java.lang.StackWalker,可以获取代码执行的每一帧信息
  • JEP 255: Merge Selected Xerces 2.11.0 Updates into JAXP

JDK 9 对Nashorn增强

  • JEP 236: Parser API for Nashorn
  • JEP 292: Implement Selected ECMAScript 6 Features in Nashorn

JDK 9对Client Technologies增强

  • JEP 251: Multi-Resolution Images
  • JEP 253: Prepare JavaFX UI Controls and CSS APIs for Modularization
  • JEP 256: BeanInfo Annotations
  • JEP 262: TIFF Image I/O
  • JEP 263: HiDPI Graphics on Windows and Linux
  • JEP 272: Platform-Specific Desktop Features
  • JEP 283: Enable GTK 3 on Linux

JDK 9对国际化的增强

  • JEP 267: Unicode 8.0
  • JEP 252: CLDR Locale Data Enabled by Default
  • JEP 226: UTF-8 Properties Files

参考:https://docs.oracle.com/javas...

你可能感兴趣的:(java)