JDK11 新特性详解

article/2025/8/31 3:50:25

1、增强局部变量类型推断 var

Consumer<String> consumer = t -> System.out.println(t.toUpperCase());
Consumer<String> consumer = (var t) -> System.out.println(t.toUpperCase());错误的形式:必须要有类型,可以加上var
Consumer<String> consumer = (@Deprecated t) ->System.out.println(t.toUpperCase())
正确的形式
Consumer<String> consumer = (@Deprecated var t) ->System.out.println(t.toUpperCase())

2、增加一些实用的 API

      自 JDK9 和 JDK10 都为 java 增加了许多的 API,如今 JDK11 又增加了许多字符串自带方法,如下

@Test
public void contextLoads() {String str = "woshidage";boolean isblank = str.isBlank();  //判断字符串是空白boolean isempty = str.isEmpty();  //判断字符串是否为空String  result1 = str.strip();    //首位空白String  result2 = str.stripTrailing();  //去除尾部空白String  result3 = str.stripLeading();  //去除首部空白String  copyStr = str.repeat(2);  //复制几遍字符串long  lineCount = str.lines().count();  //行数统计System.out.println(isblank);System.out.println(isempty);System.out.println(result1);System.out.println(result2);System.out.println(result3);System.out.println(copyStr);System.out.println(lineCount);
}

      结果为:

3、移除和废弃的内容

      3.1 移除项

1、移除了com.sun.awt.AWTUtilities2、移除了sun.misc.Unsafe.defineClass,使用java.lang.invoke.MethodHandles.Lookup.defineClass来替代3、移除了Thread.destroy()以及 Thread.stop(Throwable)方法4、移除了sun.nio.ch.disableSystemWideOverlappingFileLockCheck、sun.locale.formatasdefault属性5、移除了jdk.snmp模块6、移除了javafx,openjdk估计是从java10版本就移除了,oracle jdk10还尚未移除javafx,而java11版本则oracle的jdk版本也移除了javafx7、移除了Java Mission Control,从JDK中移除之后,需要自己单独下载8、移除了这些Root Certificates :Baltimore Cybertrust Code Signing CA,SECOM ,AOL and Swisscom

      3.2 废弃项

1、-XX+AggressiveOpts选项2、-XX:+UnlockCommercialFeatures3、-XX:+LogCommercialFeatures选项也不再需要

4、HttpClient 加强方法

      现在 Java 自带了这个 HTTP Client API,我们以后还有必要用 Apache 的 HttpClient 工具包吗?

      4.1 需要远程调用的接口

@RequestMapping(value = "/dshjbca")
public String test1(){return "dfs";
}

      4.2 HttpClient 调用该接口

//同步调用
@Test
public void test2() throws IOException, InterruptedException {HttpClient client             = HttpClient.newHttpClient();HttpRequest request           = HttpRequest.newBuilder(URI.create("")).build();BodyHandler<String>  handler  = HttpResponse.BodyHandlers.ofString();HttpResponse<String> response = client.send(request,handler);String body                   = response.body();System.out.println(body);
}//异步调用
@Test
public void test3() throws IOException, InterruptedException, ExecutionException {HttpClient client             = HttpClient.newHttpClient();HttpRequest request           = HttpRequest.newBuilder(URI.create("")).build();BodyHandler<String>  handler  = HttpResponse.BodyHandlers.ofString();CompletableFuture<HttpResponse<String>> response = client.sendAsync(request,handler);HttpResponse<String> result   = response.get();String body                   = result.body();System.out.println(body);
}

      结果:

5、Unicode 10

      Unicode 10 增加了 8518 个字符 , 总计达到了 136690 个字符. 并且增加了 4 个脚本. 同时还有 56 个新的 emoji 表情符号。

6、Remove the JavaEE and CORBA Moudles

      在 java11 中移除了不太使用的 JavaEE 模块和 CORBA 技术,在 java11 中将 java9 标记废弃的 Java EE 及 CORBA 模块移除掉。

1、java.xml.ws,2、java.xml.bind,3、java.xml.ws,4、java.xml.ws.annotation,5、jdk.xml.bind,6、jdk.xml.ws被移除,只剩下java.xml,java.xml.crypto,jdk.xml.dom这几个模块7、java.corba,8、java.se.ee,9、java.activation,10、java.transaction被移除,但是java11新增一个java.transaction.xa模块

7、JEP : 335 : Deprecate the Nashorn JavaScript Engine

      废除 Nashorn javascript 引擎,在后续版本准备移除掉,有需要的可以考虑使用 GraalVM。

8、JEP : 336 : Deprecate the Pack200 Tools and API

      Java5 中带了一个压缩工具:Pack200,这个工具能对普通的 jar 文件进行高效压缩。其  实现原理是根据 Java 类特有的结构,合并常数  池,去掉无用信息等来实现对 java 类的高效压缩。由于是专门对 Java 类进行压缩的,所以对普通文件的压缩和普通压缩软件没有什么两样,但是对于 Jar  文件却能轻易达到 10-40% 的压缩率。这在 Java 应用部署中很有用,尤其对于移动 Java 计算,能够大大减小代码下载量。

      Java5 中还提供了这一技术的 API 接口,你可以将其嵌入到你的程序中使用。使用的方法很简单,下面的短短几行代码即可以实现 jar 的压缩和解压:

压缩

Packer packer=Pack200.newPacker();OutputStream output=new BufferedOutputStream(new  FileOutputStream(outfile));packer.pack(new JarFile(jarFile), output);output.close();

解压

Unpacker unpacker=Pack200.newUnpacker();output=new JarOutputStream(new FileOutputStream(jarFile));unpacker.unpack(pack200File, output);output.close();

      Pack200 的压缩和解压缩速度是比较快的,而且压缩率也是很惊人的,在我是使用  的包 4.46MB 压缩后成了 1.44MB(0.322%),而且随着包的越大压缩率会根据明显,据说如果 jar 包都是 class 类可以压缩到 1/9 的大  小。其实 JavaWebStart 还有很多功能,例如可以按不同的 jar 包进行 lazy 下载和 单独更新,设置可以根据 jar 中的类变动进行 class 粒度的下载。但是在 java11 中废除了 pack200 以及 unpack200 工具以及 java.util.jar 中的 Pack200 API。因为 Pack200 主要是用来压缩 jar 包的工具,由于网络下载速度的提升以及 java9 引入模块化系统之后不再依赖 Pack200,因此这个版本将其移除掉。

9、新的 Epsilon 垃圾收集器

      A NoOp Garbage Collector JDK 上对这个特性的描述是:开发一个处理内存分配但不实现任何实际内存回收机制的 GC, 一旦可用堆内存用完,JVM 就会退出.

如果有 System.gc () 调用,实际上什么也不会发生 (这种场景下和 - XX:+DisableExplicitGC 效果一样), 因为没有内存回收,这个实现可能会警告用户尝试强制 GC 是徒劳.

      用法 : -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

      选项 - XX:+UseEpsilonGC, 程序很快就因为堆空间不足而退出

      原因 : 提供完全被动的 GC 实现 , 具有有限的分配限制和尽可能低的延迟开销 , 但代价是内存占用和内存吞吐量 , java 实现可广泛选择高度可配置的 GC 实现. 各种可用的收集器最终满足不同的需求 , 即使它们的可配置性使它们的功能相交. 有时更容易维护单独的实现 , 而不是在现有 GC 实现上堆积另一个配置选项.

主要用途如下 :

1、性能测试(它可以帮助过滤掉GC引起的性能假象)2、内存压力测试(例如,知道测试用例 应该分配不超过1GB的内存, 我们可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有问题, 则程序会崩溃)3、非常短的JOB任务(对象这种任务, 接受GC清理堆那都是浪费空间)4、VM接口测试5、Last-drop 延迟&吞吐改进

10、ZGC

ZGC, 这应该是JDK11最为瞩目的特性, 没有之一. 但是后面带了Experimental, 说明这还不建议用到生产环境。GC暂停时间不会超过10ms,既能处理几百兆的小堆, 也能处理几个T的大堆(OMG),和G1相比, 应用吞吐能力不会下降超过15%,为未来的GC功能和利用colord指针以及Load barriers优化奠定基础,初始只支持64位系统ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。 将来还可以扩展实现机制,以支持不少令人兴奋的功能,例如多层堆(即热对象置于DRAM和冷对象置于NVMe闪存),或压缩堆。GC是java主要优势之一,当GC停顿太长, 就会开始影响应用的响应时间.消除或者减少GC停顿时长, java将对更广泛的应用场景是一个更有吸引力的平台. 此外, 现代系统中可用内存不断增长,用户和程序员希望JVM能够以高效的方式充分利用这些内存, 并且无需长时间的GC暂停时间

      用法 : -XX:+UnlockExperimentalVMOptions –XX:+UseZGC, 因为 ZGC 还处于实验阶段,所以需要通过 JVM 参数来解锁这个特性

11、完全支持 Linux 容器(包括 Docker)

      许多运行在 Java 虚拟机中的应用程序(包括 Apache Spark 和 Kafka 等数据服务以及传统的企业应用程序)都可以在 Docker 容器中运行。但是在 Docker 容器中运行 Java 应用程序一直存在一个问题,那就是在容器中运行 JVM 程序在设置内存大小和 CPU 使用率后,会导致应用程序的性能下降。这是因为 Java 应用程序没有意识到它正在容器中运行。随着 Java 10 的发布,这个问题总算得以解决,JVM 现在可以识别由容器控制组(cgroups)设置的约束。可以在容器中使用内存和 CPU 约束来直接管理 Java 应用程序,其中包括:

遵守容器中设置的内存限制在容器中设置可用的CPU在容器中设置CPU约束Java 10的这个改进在Docker for Mac、Docker for Windows以及Docker Enterprise Edition等环境均有效。容器的内存限制在Java 9之前,JVM无法识别容器使用标志设置的内存限制和CPU限制。而在Java 10中,内存限制会自动被识别并强制执行。Java将服务器类机定义为具有2个CPU和2GB内存,以及默认堆大小为物理内存的1/4。

12、支持 G1 上的并行完全垃圾收集

      对于 G1 GC,相比于 JDK 8,升级到 JDK 11 即可免费享受到:并行的 Full GC,快速的 CardTable 扫描,自适应的堆占用比例调整(IHOP),在并发标记阶段的类型卸载等等。这些都是针对 G1 的不断增强,其中串行 Full GC 等甚至是曾经被广泛诟病的短板,你会发现 GC 配置和调优在 JDK11 中越来越方便。


http://chatgpt.dhexx.cn/article/AkcOiVCM.shtml

相关文章

JDK11安装教程(WIN10)

文章目录 前言一、Java是什么&#xff1f;二、搭建Java环境1.下载2.安装3.配置环境变量4.检验是否安装成功 总结 前言 从毕业到工作已经快一年了&#xff0c;这一年来&#xff0c;公司给我的发展方向是项目经理&#xff0c;但是第一&#xff0c;工作地点离家太远&#xff1b;第…

【JDK】win 10 / win 11:jdk 8 下载、安装、配置、验证

目录 一、下载 JDK &#xff08;1&#xff09;官网下载 JDK 最新版本 &#xff08;2&#xff09;官网下载 JDK 历史版本&#xff08;示例 Java 8&#xff09; 二、安装 JDK &#xff08;1&#xff09;新建安装目录 jdk 和 jre &#xff08;2&#xff09;启动安装程序 &a…

【JDK】win 10 / win 11:jdk 8 升级为 jdk 17

目录 一、前言 二、历史版本 Java 安装 三、最新版本 Java 安装 &#xff08;1&#xff09;历史版本作废 &#xff08;2&#xff09;最新版本沿用旧版 JDK 系统环境变量 &#xff08;3&#xff09;JDK 17 下载 &#xff08;4&#xff09;JDK 17 安装 &#xff08;5&am…

Windows下安装JDK11(详细版)

简介 在JDK1.8之后的下一个稳定版本就是JDK11&#xff0c;所以下面教大家安装JDK11 第一步:下载 官网下载地址[https://www.oracle.com/java/technologies/javase-jdk11-downloads.html] 拉至页面到底部&#xff0c;选择如下版本下载&#xff0c;然后它可能要Oracle帐号才能…

Windows下安装JDK11(详细)

文章目录 一、简介第一步&#xff1a;下载第二步&#xff1a;安装第三步&#xff1a;设置环境变量第四步&#xff1a;生成 jre 文件第五步&#xff1a;检查是否成功 一、简介 因为JDK1.8版本已经不维护且比较老&#xff0c;故选用下一个稳定的版本&#xff0c;即JDK11。 第一…

win10安装jdk11

win10安装jdk11 jdk11下载与安装下载手动安装免安装配置系统环境变量检测是否安装成功 切换jdk版本 jdk11下载与安装 下载 1.第一步&#xff0c;前往oracle官网下载jdk11 oracle官方下载地址 2.选择要下载的jdk x64 Installer&#xff1a;这个是需要手工安装的版本 x64 Com…

jdk11下载与安装教程(win10)超详细

一、下载安装步骤 1、官网下载还需要注册&#xff0c;可以点【我的网盘】目录下载&#xff0c;密码3360&#xff0c;目录也有其它低版本的&#xff0c;如果有需要大家根据需要自行选择。 2、下载后直接点击安装程序&#xff0c;点击【运行】。这里我使用的是64位的。 3、点击【…

JDK11下载安装、JRE生成、环境配置

一、 下载 JDK11官网下载&#xff1a; Java SE - Downloads | Oracle Technology Network | Oracle 选择自己合适的版本。 二、安装 三、生成JRE 1、安装目录 找到jdk的安装目录 2、jdk11安装目录里面我们可以看到是没有jre的&#xff0c;但是我们在之后可能是会需要用到…

JDK11下载与安装 win10 64位

Java11 为LTS(长期支持)版本。 1.下载JDK11 建议直接找安装包&#xff0c;不要去官网下载。 下面是 jdk11的下载地方 方法1&#xff1a;百度网盘链接&#xff1a;https://pan.baidu.com/s/11yQTrDv653hceNA-wfcFsg 提取码&#xff1a;qgfk 方法2&#xff1a;阿里云盘&#xff1…

2020年最新 java JDK 11 下载、安装与环境变量配置教程

java JDK11下载、安装与环境变量配置 一、下载步骤 首先明确自己的操作系统&#xff08;本次配置jdk操作系统&#xff1a;Windows 10 家庭中文版&#xff09; 下载地址&#xff1a;点击跳转 点击进入下载地址后我们可以看见目前&#xff08;2020/8/15&#xff09;最新版本是…

Win10安装jdk11及环境变量配置

Win10安装jdk11及环境变量配置 写在前面卸载旧版本jdk下载jdk11配置环境变量经验教训 写在前面 我第一次安装java是在17年初&#xff0c;距离现在已经一年半了。今天上oracle官网一看&#xff0c;jdk都已经更新到11.0.1了&#xff0c;然而我用的还是1.8.0_171版本的老古董&…

jdk11下载、安装及环境配置详解(win10环境)

目录 一、jdk11下载1.1、官网下载网址1.2、官网下载步骤 二、jdk11安装&#xff08;win10环境&#xff09;三、jdk11环境变量配置&#xff08;win10环境&#xff09;3.1、jdk11环境变量配置步骤3.2、jdk11环境变量验证步骤 一、jdk11下载 1.1、官网下载网址 https://www.orac…

JDK11 下载与安装、环境配置(全网最详情,值得收藏)

目录 一、下载JDK11 二、安装JDK11 三、配置环境变量 四、验证环境配置是否成功 五、答疑&#xff0c;为什么不配置 CLASSPATH 什么是JDK JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0…

jdk11 下载与安装(非常详细,一步不落!!!)

文章目录 前言 一、下载jdk11 二、安装jdk 三、配置环境变量 总结 前言 JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0c;它包含了JAVA的运行环境&#xff08;JVMJava系统类库&#xff0…

window 下 jdk11安装与环境变量的配置(超级详细)

1、jdk 的 下载 1.1 官网下载地址 这里我选择的是 jdk11 https://www.oracle.com/java/technologies/downloads/#java11-windows这里以为下载需要登录所以我准备了百度网盘 1.2 百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1KuLD2EGO5FR5xhyfJqpsbg 提取码&am…

阿里云飞天系统质效管理体系入选信通院“软件质效领航者”优秀案例

近日,由中国信息通信研究院(以下简称信通院)主办的“精益软件工程大会”成功举办。会上,信通院公布了“2022年软件质效领航者”优秀案例评选结果,阿里云飞天系统质效管理体系,以及由阿里云承建的江西农信百福云研发质量效能体系入选优秀案例。 随着数字创新的发展,不少企业在引…

阿里云计算资深总监唐洪:飞天大规模分布式计算系统解析

CSDN首页 > 云计算 发表于2012-05-25 11:11| 5566次阅读| 来源CSDN| 0 条评论| 作者杨爽 分布式应用 云计算 分布式计算 阿里云 飞天 摘要&#xff1a;阿里云计算资深总监唐洪带来了《飞天大规模分布式计算系统》主题演讲&#xff0c;他和大家分享了飞天的架构设计&#xff…

飞天云动能否一飞冲天?

元宇宙元年之后&#xff0c;港股“元宇宙第一股“来了&#xff01; 岁末年初&#xff0c;北京飞天云动科技有限公司&#xff08;下称“飞天云动”&#xff09;向港交所递交IPO招股书&#xff0c;使用“元宇宙”高达240多次&#xff0c;也因此被视作港股“元宇宙第一股”。 「…

奔向太空,我们是认真的!国产操作系统飞天记。

奔向太空&#xff1a; 北京时间12月7日12时12分&#xff0c;我国在酒泉卫星发射中心用“长征二号丁”运载火箭&#xff0c;成功将沙特&#xff0d;5A&#xff0f;5B 卫星发射升空。 据新华社酒泉12月7日电 12月7日12时12分&#xff0c;我国在酒泉卫星发射中心用长征二号丁运载火…

一群阿里人如何用 10 年自研洛神云网络平台?技术架构演进全揭秘

【编者按】逍遥子曾说&#xff0c;对阿里人来说「打仗是最好的团建&#xff0c;参加过双 11 的叫战友」&#xff0c;同样&#xff0c;参加过多次双 11 考验的系统技术都会成为真正意义上的基础设施&#xff0c;阿里云飞天系统的云网络平台洛神就是如此。 本文作者 —— 阿里云智…