https://www.jdon.com/49684 更好的垃圾回收机制以及模块化、更好地Docker支持是迁移到Java 11的最主要理由。 为什么要将源代码升级到Java 11? 1、变量类型推断(var关键字),强类型向Javascript等弱类型学习 2、原生不可修改集合API,集合不可变带来更高性能和并发性以及线程安全性 3.新的响应流API,响应式reactive编程已经成为趋势; 4.提升改进的streams/predicate/optional API。 5.提升改进了系统进程API和文件API 6.支持HTTP / 2,支持https传输层安全性(TLS)1.3 7.标准Java异步HTTP客户端, 异步编程成为常态 8.多版本JAR 除了以上编程风格的提升改进,Java 11内部还带来下面提升: 1.完全支持Linux容器(包括Docker) 2.支持G1上的并行完全垃圾收集。 3.无开销的应用Class-Data共享. 4.无开销的运行记录仪和堆的探测器profiler 5.可在主内存以外的其他内存上进行堆分配。 6.新的默认根权限证书集。 7.新的ZGC和Epsilon垃圾收集器。 8.提前编译和GraalVM。 9.传输层安全性(TLS)1.3。 10.JShell。 11.支持“shebang”Java文件!#!/bin/java 使用早期Java版本创建的应用程序(jars)可以在JDK 11上运行而不会出现重大问题,除非使用了Java EE或CORBA模块,这两者在JEP-320中已经从JDK中删除了。 在缺少类的情况下,你可能需要自己明确地添加java.activation,java.transaction和java.xml.bind依赖关系。 在类文件错误的情况下,则将需要升级更新Java字节码库,例如ASM,bytebuddy,Javassist进行或CGLIB。 比如javassist的依赖包升级到3.23以上,将maven-compiler-plugin 升级到3.7.0以上, maven-surefire-plugin 为2.21.0以上.使用Java 11实现应用的模块化It’s time! Migrating to Java 11 – criciumadev – Me