8个维度,详细分析JDK11的新特性!

从2009年4月20日Oracle收购Sun公司起,Oracle对于JDK的更新就类似坐火箭一样,非常的迅速。但这对于Java开发人员来讲,就显得有些"亚历山大"了。不过波哥建议大家也不用过于担忧,因为根据《2022 年Java生态系统状况报告》来看,目前市场比较主流的JDK版本还是JDK8以及JDK11。

由于JDK8已经在市场稳居很长一段时间了,所以本文不会对JDK8的新特性进行讲解,如果有需要JDK8新特性相关教程的童鞋,可以在评论区给波哥留言。废话不多说,各位小伙伴们请跟着波哥一起来探究关于JDK11带来的新特性吧,请注意在使用时需要在集成开发环境中配置为Jdk11。

一. 关于变量定义

在JDK11中,变量的定义出现了一些新的变化,我们来看下图:

8个维度,详细分析JDK11的新特性!_第1张图片

看到这里不知道有没有小伙伴发现,jdk11的变量定义方式与某个知名的脚本语言非常类似哦。

细心的小伙伴可能会发现,jdk11的变量定义与javascript的变量定义很类似,但java作为强类型语言,在编译的时候对于代码的要求是非常高的,比如我们看下面的例子:

8个维度,详细分析JDK11的新特性!_第2张图片

当然针对初始化也有一些区别,如下所示:

8个维度,详细分析JDK11的新特性!_第3张图片

还有成员变量的定义也是不允许的。

8个维度,详细分析JDK11的新特性!_第4张图片

我们再看看循环中的使用方式:

8个维度,详细分析JDK11的新特性!_第5张图片

以上就是关于JDK11中变量的定义,以及注意事项。

二. 支持源文件直接运行(无需javac)

在JDK11中支持源文件直接运行,不用再执行javac命令了。

8个维度,详细分析JDK11的新特性!_第6张图片

8个维度,详细分析JDK11的新特性!_第7张图片

三. FileInputStream的增强

jdk11提供了一个关于FileInputStream文件快速copy的方法,如下图所示:

8个维度,详细分析JDK11的新特性!_第8张图片

四. 关于FIles类提供的静态方法

Files类提供了一个静态方法readString(),用于快速读取文件的内容;同时也提供了一个静态方法writeString(),用于快速写出一个字符串数据到文件。

8个维度,详细分析JDK11的新特性!_第9张图片

五. 针对String提供的新功能

从jdk11开始,String提供了isBlank(),strip(), stripLeading(), stripTrailing()等方法。

8个维度,详细分析JDK11的新特性!_第10张图片

8个维度,详细分析JDK11的新特性!_第11张图片

进入源码发现比如类似isBlank这样的方法的确实在jdk11开始出现的

六. 针对单列集合以及双列集合的增强

集合提供了快速复制的方法copy()等。

8个维度,详细分析JDK11的新特性!_第12张图片

七. 对于Stream的功能扩展

Stream中新增了takeWhile()和dropWhile()截止结算的方法。

8个维度,详细分析JDK11的新特性!_第13张图片

八. 对于JDK11出现的新GC(ZGC)

Java 11新增了一个全新的垃圾收集器--ZGC,它由Oracle开发,宣传可以在数TB的堆上具有非常低的暂停时间。

其实在Java10中已经有四种发布多年的垃圾收集器,并且几乎都是无限可调的,那又为什么会新增一个GC呢?换个角度看,G1是2006年时引入Hotspot VM的。当时最大的AWS实例有1 vCPU和1.7GB内存,而今天AWS很乐意租给你一个x1e.32xlarge实例,该类型实例有128个vCPU和3,904GB内存。

ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。将来还可以扩展实现机制,以支持不少令人兴奋的功能,例如多层堆(即热对象置于DRAM和冷对象置于NVMe闪存),或压缩堆。

zgc在进行对象转移的过程中,只需要修改对象指针的几个标志位,相当于g1需要在对象转移时读取对象头来说,少了内存读取的操作,速度更快。不过也正是由于zgc使用了对象指针的几个标志位来完成并发标识和并发转移等的工作,所以zgc不能压缩指针,并且只能运行在基于64位的操作系统上。

zgc的内存区域分成三个页面,小页面2M,中页面32M,大页面2的n次方,而g1页面一般分成2048个region,每个region大小是2M/4M/8M。

*威哥Java学习交流Q群:691533824
加群备注:CSDN推荐

你可能感兴趣的:(分布式,java,jvm,开发语言)