美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!
本文,我们来看一下Java 11到底是什么、他有什么特别的、到底要不要升级到Java 11。
Java 11有什么特别的
在Oracle官网中,进入下载页面,第一个可供下载的JDK版本已经提换成了Java SE 11 (LTS),这里的LTS表示Long-Term-Support。
本次发布的Java 11和2017年9月份发布的Java 9以及 2018年3月份发布的Java 10相比,其最大的区别就是:在长期支持( Long-Term-Support )方面,Oracle表示会对Java 11提供大力支持,这一支持将会持续至2026年9月。
上图是一张Oracle 公布的对于各个版本的JDK的Support Roadmap。途中列举了Java 6 - Java 12的正式发布时间以及支持计划。
从中可以看出,在Java 11之前,Java 9和Java 10是不提供长期支持的,而上一个提供长期支持的版本是Java 8,其将会支持到2025年3月。
长期支持,表示Oracle会对其做长期的补丁、安全等扩展支持等。
下一个提供长期支持的版本将会是Java 17,其将于2021年发布。
新特性
新发布的Java 11在新特性方面,提供了17个JEP(JDK Enhancement Proposal 特性增强提议)
上图是Oracle公布的Java 11包含的所有新特性,其中几个重点的新特性为:
ZGC是一款号称可以保证每次GC的停顿时间不超过10MS的垃圾回收器,并且和当前的默认垃圾回收起G1相比,吞吐量下降不超过15%。
Java 11还加入了一个比较特殊的垃圾回收器——Epsilon,该垃圾收集器被称为“no-op”收集器,将处理内存分配而不实施任何实际的内存回收机制。 也就是说,这是一款不做垃圾回收的垃圾回收器。这个垃圾回收器看起来并没什么用,主要可以用来进行性能测试、内存压力测试等,Epsilon GC可以作为度量其他垃圾回收器性能的对照组。大神Martijn说,Epsilon GC至少能够帮助理解GC的接口,有助于成就一个更加模块化的JVM。
Java 10中增加了本地变量类型推断的特性,可以使用var来定义局部变量。尽管这一特性被很多人诟病,但是并不影响Java继续增强他的用法,在Java 11中,var可以用来作为Lambda表达式的局部变量声明。
早在发布Java SE 9的时候,Java就表示过,会在未来版本中将Java EE和CORBA模块移除,而这样举动终于在Java 11中实施。终于去除了Java EE和CORBA模块。
JDK 9 中就已对 HTTP Client API 进行标准化,然后通过JEP 110,在 JDK 10 中进行了更新。在本次的Java 11的更新列表中,由以JEP 321进行进一步升级。该API通过CompleteableFutures提供非阻塞请求和响应语义,可以联合使用以触发相应的动作。 JDK 11完全重写了该功能。现在,在用户层请求发布者和响应发布者与底层套接字之间追踪数据流更容易了,这降低了复杂性,并最大程度上提高了HTTP / 1和HTTP / 2之间的重用的可能性。
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次。
2017年9月,Java 9发布。
2018年3月,Java 10发布。
2018年9月,Java 11发布。
大部分人使用的JDK版本还是Java 8及以下版本,甚至某些公司的生产环境使用的还是JDK 1.6。
那么,对于公司和开发者来说,到底要不要在生产及开发环境中升级和学习Java 11呢?
对于企业来说,生产环境中的JDK版本升级到Java 11还是有必要的。主要有两个原因:
1、Oracle会对Java 11提供长期支持,企业可以放心使用这一版本。并且下一个长期支持的版本会在三年后发布,时间比较久远。
2、Java 11确实提供了一些比较不错的特性,尤其重要的是提供了ZGC,这是一款具有划时代意义的垃圾回收器。优点不再赘述。有了ZGC,JVM的性能瓶颈可以被突破。
在编码方面,Java 11并没有像Java 8那样变化巨大,毕竟Java 8提供了函数式编程的能力,这也是很多开发者学习Java 8的一个重要原因。
但是,Java 11也并不是完全没有提升,至少在新版本中,Java开发者终于可以摆脱老旧的HttpURLConnection了。新的HTTP API提供了对HTTOP/2等业界前沿标准的支持,提供了精简而又友好的API接口。
所以,综上所述,无论是对于企业还是开发者来说,升级Java 11都是有必要的,至少比Java 9和Java 10的必要性要大很多。至于这个必要性到底有多大呢,作者给一个简单的说明:
如果你现在时候用的JDK/Java版本低于Java 8,先升级到Java 8。
如果你现在时候用的JDK/Java版本高于Java 7,那么可以考虑升级到Java 11了。
当然,你可以直接从Java 6跳跃到Java 11。
那么问题来了,你现在用的JDK/Java哪个版本?你准备学习并使用Java 11吗?
直面Java第143期:反射的常见用法有哪些?
成神之路第013期:Java集合类—Map。
屯书季,当当满减优惠券又来了,还送实体书
2018开发者技能报告,让你更了解自己的行业
线上防雪崩利器——熔断器设计原理与实现
中秋福利,技术书籍、极客时间阅码还有星球折扣
那么请长按二维码,关注 Hollis
转发朋友圈,是对我最大的支持。