JDK8升级11的一些新特性

JDK8升级11的一些新特性JDK9的模块化改造,同时将一些包从JDK中分离了出去,主要包有下面这些。java.xml.ws: Java API for XML Web S

欢迎大家来到IT世界,在知识的湖畔探索吧!

背景

最近我推动将生产环境JDK版本从8升到11,虽然产生了一些小波折,但是总体来说还是很顺滑的,感觉在企业应用级开发层面,JDK的跨版本兼容是做的不错的。

既然升级了JDK,我也又重新回顾了一下 9 / 10 / 11 的一些变化,并把一些感觉能用到的变化总结在这里。

新的Class Loader实现

JDK9开始,ClassLoader做出了一些变化,官方文档上的相关描述是这样的

JDK8升级11的一些新特性

我升级过程中暂时没有感知到这些变化带来的问题,网上有同学在parallelStream中有踩坑经历。

移除Java EE和CORBA模块

JDK9的模块化改造,同时将一些包从JDK中分离了出去,主要包有下面这些

  • java.xml.ws: Java API for XML Web Services (JAX-WS), Web Services Metadata for the Java Platform, and SOAP with Attachments for Java (SAAJ)
  • java.xml.bind: Java Architecture for XML Binding (JAXB)
  • java.xml.ws.annotation: The subset of the JSR-250 Common Annotations defined by Java SE to support web services
  • java.corba: CORBA
  • java.transaction: The subset of the Java Transaction API defined by Java SE to support CORBA Object Transaction Services
  • java.activation: JavaBeans Activation Framework
  • java.se.ee: Aggregator module for the six modules above
  • jdk.xml.ws: Tools for JAX-WS
  • jdk.xml.bind: Tools for JAXB

我们项目中在对JWT做处理的时候,有引用到 java.xml.bind,升级JDK版本后,增加了显式的依赖,解决了问题。

删除或更改API

  • javax.security.auth.Policy
  • java.lang.Runtime.runFinalizersOnExit(boolean)
  • java.lang.SecurityManager.checkAwtEventQueueAccess()
  • java.lang.SecurityManager.checkMemberAccess(java.lang.Class,int)
  • java.lang.SecurityManager.checkSystemClipboardAccess()
  • java.lang.SecurityManager.checkTopLevelWindow(java.lang.Object)
  • java.lang.System.runFinalizersOnExit(boolean)
  • java.lang.Thread.destroy()
  • java.lang.Thread.stop(java.lang.Throwable)

Jshell

Python的命令行工具比较好用,甚至有些同学喜欢把它当做计算器使用。Java也引入了命令行工具,不过个人感觉并没有什么亮点。

JDK8升级11的一些新特性

String 类中新的 API

String s1 = " Testing ";System.out.println(s1.strip()); //TestingString s2 = " Testing ";System.out.println(s1.stripLeading()); //Testing空格String s3 = " Testing ";System.out.println(s1.stripTrailing()); //空格TestingSystem.out.println("   ".isBlank()); //trueString s4 = "A\nB\nC";Stream<String> ss = s4.lines();ss.forEach(s -> System.out.println(s));System.out.println("A".repeat(3)); //AAA

欢迎大家来到IT世界,在知识的湖畔探索吧!

集合工厂方法

借鉴Guava提供了以下的集合工厂方法,不过Guava还是香。

  • List.of()
  • Set.of()
  • Map.of()
  • Map.ofEntries()
  • List.copyOf()
  • Set.copyOf()
  • Map.copyOf()

局部变量的类型推断

Java是强类型语言,不过鉴于大家都说JavaScript用起来方便,Java也提供了var关键字。

实质上来说var只是一个语法糖,实际编译时还是会用确认的类型替换掉。

垃圾收集器

JDK8: 默认Parallel GC(高吞吐方向),可选G1(Garbage-first GC)

JDK11: 默认G1(低延迟方向),可选ZGC(The Z Garbage Collector)

总体来说,G1适合大内存(>6GB),低延迟(<0.5S),也就是对延迟敏感的场景,并非所有场景都合适。

之前也曾跟一个甲骨文的同学聊过,由于公司原因他们都会使用比较新的JDK版本。在升级JDK11之后他们发现服务内存使用明显增大,所以又手动将GC调整为Parallel GC。

而ZGC是在低延迟的路上又往前走了一步,它的设计目标是

  • 停顿时间不超过10ms
  • 停顿时间不会随着堆的大小,或者活跃对象的大小而增加
  • 支持8MB~4TB级别的堆(未来支持16TB)

ZGC经历了一段时间的优化,新版本据说可以控制在1ms内,对严苛的延迟需求有价值。

我曾经读到过2020年美团技术团队的一篇文章,记述了他们在低延迟高需求的风控业务中选用ZGC的使用及调优实践,比较有参考价值。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/48378.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信