Java8很香但还是想升级到Java11,教你怎么从Java8升级到Java11

Java11的新特性

1、更新支持到Unicode 10编码


Unicode 10(version 10.0 of the Unicode Standard),Unicode是一个不断在演进的行业标准,Java一直在与它保持一致兼容。

Java8已经更新了Unicode8.0-9.0,Java10更新后将达到16018个characters、18种blocks和10种scripts。

2、将Http Client作为JDK标准发布、


原来作为jdk补充的http类放在jdk.incubator.http包中,现在统一改到java.net.http包下,核心类有下面4个。

HttpClient

HttpRequest

HttpResponse

WebSocket

HttpClient client = HttpClient.newBuilder()

        .version(HttpClient.Version.HTTP_1_1)

        .connectTimeout(Duration.ofSeconds(3))

        .build();

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://www.baidu.com")).build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());    // 200

System.out.println(response.body());          // 百度页面的html

3、新增优化很多方法


java.util.Collection增加新方法toArray(IntFunction),集合转数组的不二之选。

String增加lines\stripLeading\stripTrailing等,一般项目都有StringUtils类。

java.io.InputStream增加构造方法

java.nio包下面很大类扩展了方法Channels\XXXBuffer等

4、支持动态分配 Compiler Threads


JVM启动参数新增-XX:+UseDynamicNumberOfCompilerThreads,动态的控制编程线程的数量,原来的编译线程默认会启动大量造成cpu和memory浪费。

5、GC能力大幅提升


低功耗可扩展GC(ZGC)模块是一个试验性的并发GC,在线程执行是ZGC会做一些重型回收工作,如string表清理等。执行周期在10ms内,处理heaps大小从MB到TB范围,目前只能支持linux和x64系统,除此外还有个处理memory分配的Epsilon GZ,有兴趣的可以自己研究。

6、堆分析能力提升:JVMTI


提供了一个低负载的堆分配采集分析程序:JVMTI,默认启动方案可以持续工作且不造成服务器压力,面向接口编程,能够收集活着和死去的对象信息。

7、Transport Layer Security 1.3更新


简称TLS1.3是网络传输层协议,需要注意的它不兼容历史版本而且官方承认有风险,希望后续能不断优化。

8、嵌套访问控制


嵌套是一种访问控制上下文,它允许多个class同属一个逻辑代码块,但是被编译成多个分散的class文件,它们访问彼此的私有成员无需通过编译器添加访问扩展方法。

例子:

/**

* @author: Owen Jia

* @time: 2019/11/7

*/

public class NestBasedTest {

    public static class Nest1 {

        private int varNest1;

        public void f() throws Exception {

            final Nest2 nest2 = new Nest2();

            //这里没问题

            nest2.varNest2 = 2;

            final Field f2 = Nest2.class.getDeclaredField("varNest2");

            //下面代码在java 8环境下会报错,但在java 11中是没问题的

            f2.setInt(nest2, 1);

            System.out.println(nest2.varNest2);

        }

    }

    public static class Nest2 {

        private int varNest2;

    }

    public static void main(String[] args) throws Exception {

        new Nest1().f();

    }

}

这里要提一下Class类新增的方法:

/// 获取宿主类。非嵌套类的宿主类是它本身。

public Class<?> getNestHost()

// 判断该类是否是某个类的嵌套类

public boolean isNestmateOf(Class<?> c)

// 返回某个类的嵌套类数组。第 1 个固定是宿主类,之后的是该宿主类的嵌套成员,但不保证顺序,同时也会包含自身

public Class<?>[] getNestMembers()

9、新增和优化诸多加密算法


对PKCS#1 v2.2内提供更多算法,如RSASSA-PSS签名算法。同时新增ChaCha20和Poly1305密码算法,通过Cipher.getInstance使用。还有 Curve25519和Curve448被添加。AES128和265也支持了Kerberos 5 encryption。

10、本地参数支持Lambda


简单理解就是lambda表达式的变量申明可以用var。

lst.forEach((var x) -> {System.out.print(x);});复制代码

11、单java文件加载运行


单个的*.java文件可以直接用java命令来执行,格式:java HelloWorld.java。

12、飞行记录器分析工具


Jvm启动参数:-XX:StartFlightRecording

Java11中将这款原来商用的工具集成到jdk标准中了,它是一种低开销的事件信息收集框架,用来对应用程序和JVM 进行故障检查、分析,收集应用程序、JVM 和 OS的数据并保存在单独的事件记录文件中,故障发生后,能够从事件记录文件中提取出有用信息对故障进行分析。

更多其他能力


还有很多其他更新就不一一介绍了,这些都是JDK标准包支持的基础能力,得感谢Oracle持续对JDK发布的支持。完整的jdk11变化清单可以去官网查看;

从11开始移除的模块清单

Removal of com.sun.awt.AWTUtilities Class

Removal of Lucida Fonts from Oracle JDK

Removal of appletviewer Launcher

Oracle JDK's javax.imageio JPEG Plugin No Longer Supports Images with alpha

Removal of sun.misc.Unsafe.defineClass

Removal of Thread.destroy() and Thread.stop(Throwable) Methods

Removal of sun.nio.ch.disableSystemWideOverlappingFileLockCheck Property

Removal of sun.locale.formatasdefault Property

Removal of JVM-MANAGEMENT-MIB.mib

Removal of SNMP Agent

Remove the Java EE and CORBA Modules

Removal of JavaFX from the Oracle JDK

Removal of JMC from the Oracle JDK

Removal of Java Deployment Technologies

更多请查看官网

升级建议(重要)

从Java 11后Oracle不再单独发布JRE和Server JRE了,并统一JDK名称为:Oracle JDK

另外Java 11及之后的版本,将不会再发布对32位操作系统支持的版本。


新旧项目不同策略


新启的Java项目建议直接从Oracle JDK 11开始搭建,千万不要犹豫,因为技术都是越新越强的。Java8就像晚期的大众,而Java11却是新兴的特斯拉。

历史的项目如果只是维护的话,干脆就放着运行不要动好了,等哪天决定重构了再考虑升级到Java11。因为最大的问题不是自己公司开发的Code不能迁移到高版本,而是项目中引入的第三方Jar,这个东西搞起来十分头疼。

JDK升级分析工具

升级最担心的就是被删除的模块!

推荐IBM公司Liberty团队提供了一个十分好用的检测Toolkit程序,可以扫描应用程序二进制文件(.war),发现的任何潜在的Java 11问题并生成Html报告。绝对的大利器,详细内容直接查看IBM官方介绍:Scanner Kit

直接运行java -jar binaryAppScannerInstaller.jar,按步骤安装有个lisence声明和目录指定,默认目录名wamt。


参考文档中会有使用详细介绍,也可以参考下面测试例子(扫描很慢,要些耐心等):

java -jar binaryAppScanner.jar Root.war --analyzeJavaSE --sourceJava=oracle8 --targetJava=java11 --output=./java11/RootReport.html

查看帮助命令:

java -jar binaryAppScanner.jar Root.war --help --all







报告结果如下:

JDK不同于OpenJDK

推荐Oracle JDK,因为更加稳定可靠。

只有Oracle JDK支持Solaris系统;

只有Oracle JDK才支持msi这样的安装程序;

Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;

OpenJDK 是一个参考模型并且是完全开源的,而Oracle JDK是 OpenJDK的一个实现,并不是完全开源的;

Oracle JDK 比 OpenJDK 更稳定。OpenJDK和Oracle JDK的代码几乎相同,但建议您选择Oracle JDK,因为它经过了彻底的测试和稳定修复;

在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能;

Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;

Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可。Oracle公司很善于打官司,所以这点很重要。


相关链接

JDK 11 Documentation Home

Java SE Development Kit 11 Downloads

java 11 release docs list

JDK 6~13 Release List

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群982489835。等你哦!


作者:程序员java耕耘者

链接:https://juejin.im/post/5e187b1f5188254dc42d9985

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容