是时候迁移到Java 11了

更好的垃圾回收机制以及模块化、更好地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