Skip to main content

Java 11

  • Java 8 之后的第一个 LTS 版本,第一个带 module 的 LTS 版本
  • JDK 11
  • 2018-09-25
  • 动态 class 文件常量
  • Dynamic Class-File Constants
  • Epsilon: A No-Op Garbage Collector
  • Remove the Java EE and CORBA Modules
  • HTTP Client
  • Local-Variable Syntax for Lambda Parameters
  • 参考

It’s time! Migrating to Java 11 https://medium.com/criciumadev/5eb3868354f9

https://medium.com/criciumadev/create-a-cloud-native-image-using-java-modules-a670be616b29

http://mvnrepository.com/artifact/org.openjfx

https://www.reddit.com/r/java/comments/7ukei4/best_tool_for_packaging_jar_file_as_desktop/ https://docs.oracle.com/javase/10/tools/javapackager.htm

Remove javapackager sources from OpenJFX repo https://bugs.openjdk.java.net/browse/JDK-8203379

https://github.com/javafx-maven-plugin/javafx-maven-plugin

https://github.com/javafx-maven-plugin/javafx-maven-plugin/issues/287

https://docs.oracle.com/javase/9/tools/jmod.htm

https://simply-how.com/getting-started-with-java-11

变化

  • 新增 Collection#toArray(IntFunction)
  • -XX:+UseDynamicNumberOfCompilerThreads
    • 动态控制编译器线程数

JEPs

  • 181: Nest-Based Access Control
    • 基于嵌套的成员访问控制
    • 该访问上下文允许嵌套的内容被编译到不同的类文件,并允许访问彼此的私有成员
    • 因为很多语言都运行一个源文件包含多个类,导致彼此成员访问时需要生成包级别的访问方法
  • 309: Dynamic Class-File Constants
    • 动态类文件常量
    • 类文件添加新的常量池 CONSTANT_Dynamic
    • 加载 CONSTANT_Dynamic 会代理到一个启动方法上,类似于 invokedynamic 调用
    • 简化创建可固化的类文件常量,为语言设计者和编译器实现提供更高效简便的操作方式
  • 315: Improve Aarch64 Intrinsics
    • 优化字符串和数组内建方法
    • 优化 java.lang.Math sin, cos 和 log 方法
  • 318: Epsilon: A No-Op Garbage Collector
    • ZeroGC - ZGC
    • 会管理内存请求但不会回收内存,当内存用完时则会停止 JVM
  • 320: Remove the Java EE and CORBA Modules
    • 从 JavaSE 移除 JavaEE 和 CORBA 模块
    • 自 Java9 废弃
    • 移除模块
      • java.xml.ws - JAX-WS, SAAJ, Web Services Metadata
      • java.xml.bind - JAXB
      • java.activation - JAF
      • java.xml.ws.annotation - Common Annotations
      • java.corba - CORBA
      • java.transaction - JTA
    • 相关模块
      • java.se.ee - Aggregator module for the six modules above
      • jdk.xml.ws - Tools for JAX-WS
      • jdk.xml.bind - Tools for JAXB
    • 会移除的工具
      • wsgen, wsimport - jdk.xml.ws
      • schemagen, xjc - jdk.xml.bind
      • idlj, orbd, servertool, tnamesrv - java.corba
  • 321: HTTP Client (Standard)
    • 标准化 Java9 引入的 HTTP 客户端
    • 移除孵化接口,添加标准接口到 java.net.http
  • 323: Local-Variable Syntax for Lambda Parameters
    • 允许使用 var 来定义 lambda 参数的推导类型
  • 324: Key Agreement with Curve25519 and Curve448
    • RFC7748: Curve25519,Curve448
    • Java 实现, 平台独立
  • 327: Unicode 10
  • 328: Flight Recorder
    • 开源 Flight Recorder
  • 329: ChaCha20 and Poly1305 Cryptographic Algorithms
    • ChaCha20 和 Poly1305 加密算法
  • 330: Launch Single-File Source-Code Programs
    • 启动单源文件程序
    • 通过 #! 来启动 java 程序,类似于 shell
    • #!/path/to/java --source version
    • 也允许直接调用 java -Dtrace=true --source 10 factorial 3
  • 331: Low-Overhead Heap Profiling
    • 通过 JVMTI 操作
  • 332: Transport Layer Security (TLS) 1.3
  • 333: ZGC: A Scalable Low-Latency Garbage Collector
    • ZGC 可扩展的低延时 gc
    • 试验阶段
    • gc < 10ms
    • mb 到 tb
    • 对比 g1,应用吞吐量不应该损耗不应该超过 15%
    • 作为未来优化基础
    • 先支持 Linux/x64
  • 335: Deprecate the Nashorn JavaScript Engine
    • 废弃 JS 引擎模块
    • 涉及的包
      • jdk.scripting.nashorn - 包括 jdk.nashorn.api.scripting 和 jdk.nashorn.api.tree
      • jdk.scripting.nashorn.shell - 包括 jjs 工具
  • 336: Deprecate the Pack200 Tools and API
    • 废弃 java.util.jar 中的 pack200, unpack200 工具和 Pack200 接口