当前位置: 首页 > 科技观察

Java11正式发布,告诉你该不该升级

时间:2023-03-17 12:02:15 科技观察

美国当地时间9月25日,甲骨文官方宣布Java11(18.9LTS)正式发布,可用于生产环境!这篇文章,我们就来看看Java11是什么,有什么特别之处,要不要升级到Java11。Java11有什么特别之处在Oracle官网,进入下载页面,第一个可供下载的JDK版本已经被JavaSE11(LTS)取代,LTS代表Long-Term-Support。与2017年9月发布的Java9和2018年3月发布的Java10相比,此次发布的Java11最大的不同在于长期支持(Long-Term-Support)方面,甲骨文表示将对Java进行强力支持11日,将持续到2026年9月。上图是Oracle针对各个版本的JDK发布的SupportRoadmap。途中列出了Java6-Java12的官方发布时间和支持计划。从这里可以看出,在Java11之前,Java9和Java10都没有提供长期支持,最后一个提供长期支持的版本是Java8,支持到2025年3月。长期支持意味着Oracle将对补丁、安全等提供长期扩展支持,下一个提供长期支持的版本将是Java17,它将于2021年发布。新特性新发布的Java11提供了17个JEP(JDKEnhancementProposalFeatureEnhancementProposal)在新特性方面。Scalablelow-latencygarbagecollectorZGC是一款号称保证每次GC停顿时间不超过10MS的垃圾收集器,与目前默认的垃圾收集G1相比,吞吐量下降不超过15%。Epsilon:Agarbagecollectorthatdoesnothing实际的内存回收机制。也就是说,这是一个不做垃圾回收的垃圾回收器。这个垃圾收集器好像没什么用。主要可用于性能测试、内存压力测试等。EpsilonGC可以作为对照组来衡量其他垃圾收集器的性能。大神Martijn说EpsilonGC至少可以帮助理解GC的接口,有助于实现更加模块化的JVM。增强的var使用在Java10中,增加了局部变量类型推断的特性,可以使用var来定义局部变量。虽然这个特性受到了很多人的诟病,但是并不影响Java继续加强它的使用。在Java11中,var可以用作Lambda表达式的局部变量声明。JavaEE和CORBA模块的移除早在JavaSE9发布的时候,Java就表示会在以后的版本中移除JavaEE和CORBA模块,这一举动最终在Java11中实现了。最终移除了JavaEE和CORBA模块.HTTP客户端的进一步升级HTTPClientAPI在JDK9中已经标准化,之后在JDK10中通过JEP110进行了更新。在这个Java11更新列表中,JEP321用于进一步升级。API通过CompleteableFutures提供非阻塞的请求和响应语义,可以结合使用来触发相应的动作。JDK11完全重写了功能。现在可以更轻松地跟踪用户级请求发布者和响应发布者与底层套接字之间的数据流,从而降低复杂性并最大限度地提高HTTP/1和HTTP/2之间的连接重用可能性。2017年8月,JCP执行委员会提议将Java的发布频率改为每六个月一次。2017年9月,Java9发布。2018年3月,Java10发布。2018年9月,Java11发布。大多数人使用的JDK版本还是Java8及以下版本,甚至一些公司的生产环境还在使用JDK1.6。那么,对于企业和开发者来说,是否应该在生产和开发环境中升级学习Java11呢?对于企业来说,还是需要将生产环境中的JDK版本升级到Java11,主要有两个原因:1、Oracle会长期支持Java11,企业可以放心使用这个版本。而下一个长期支持的版本会在三年后发布,比较长。2.Java11确实提供了一些不错的特性,尤其是ZGC,它是一个划时代的垃圾收集器。优点不再赘述。有了ZGC,就可以突破JVM的性能瓶颈。对于开发者来说,在编码方面,Java11并没有Java8那么大的变化。毕竟Java8提供了函数式编程能力,这也是很多开发者学习Java8的重要原因。但是Java11并不完全没有改进。至少在新版本中,Java开发者终于可以摆脱旧的HttpURLConnection了。新的HTTPAPI提供了对HTTP/2等行业领先标准的支持,并提供了简化且友好的API接口。因此,综上所述,无论是企业还是开发者,升级Java11都是很有必要的,至少比Java9和Java10的必要性要大得多。至于这个有多大的必要性,笔者给出了一个简单的解释:如果你现在使用的JDK/Java版本低于Java8,先升级到Java8。如果你现在使用的JDK/Java版本高于Java7,可以考虑升级到Java11。当然可以跳转直接从Java6到Java11。那么问题来了,你现在用的是哪个版本的JDK/Java?您准备好学习和使用Java11了吗?该作者的更多好文章