jdk11的一些新特性理解

2023-11-01 06:59
文章标签 特性 理解 jdk11

本文主要是介绍jdk11的一些新特性理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

心血来潮想看看jdk11的新特性,喵了下官方文档,简单的翻译了下和增添了些自己的理解。

jdk11是lts版本,这是自 Java 8 后的首个长期支持版本,根据oracle的尿性,三年一个lts,所以这个版本在当前来看算是非常重要的一个版本,未来可能会成为主流。

2018年,美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布。

新特性也在官网有了介绍: https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html

翻看了下还是蛮多新奇的东西。

重要改变有: Applets 和 Web Start Applications 已经从jdk11中删除了,以前在大学的时候用这玩意儿写过贪吃蛇。 和浏览器有关的这部分都移除了,我记得那时候就说不安全了,基本上的浏览器都放弃了java的applet。

在windows和mac上的jre自动自动更新功能取消了。

在Windows和macOS中,以前的版本中安装JDK时可以选择安装JRE。在JDK 11中,没有这个选项了。

在这个版本中,不再提供JRE或服务器JRE。只提供JDK。用户可以使用jlink创建更小的自定义运行时。 jlink是啥? https://docs.oracle.com/javase/9/tools/jlink.htm 可以使用jlink工具创建特定于平台的运行时映像。 运行时映像将包含指定的应用程序模块和只需的平台模块,从而减少运行时映像的大小。

JDK中不再包含JavaFX。现在可以从 openjfx.io 单独下载它。 去年还想用javafx写一个redis的操作工具界面,最后因为懒惰放弃了。。。

JDK 7、8、9和10中附带的 Java Mission Control 不再包含在Oracle JDK中。现在它是一个单独的下载。 刚毕业那会儿得知这个工具的用法,经常本地调试的时候就输入jmc打开界面就开始看线程的情况。

在JDK 11及以后版本中,不再提供法语、德语、意大利语、韩语、葡萄牙语(巴西语)、西班牙语和瑞典语的翻译。

Windows的更新打包格式已从tar.gz更改为.zip,这在Windows系统中更为常见。 macOS的更新包格式已从.app更改为.dmg,这更符合macOS的标准。

jdk11的性功能和增强的有哪些:

关于Java SE 11和JDK 11中的重要增强和新特性的另一个信息来源是Java SE 11 (18.9) (JSR 384)平台规范,它记录了在Java SE 10和Java SE 11之间对规范所做的更改 http://cr.openjdk.java.net/~iris/se/11/latestSpec/

JDK 11发行版包括对Unicode 10.0.0的支持。自从JDK 10发布以来,它支持Unicode 8.0.0, JDK 11结合了Unicode 9.0.0和10.0.0版本,包括: 16,018 新字符: 包括19个新4k电视标准的符号 比特币签名 128个emoji表情符号

10 个新的字符集

Adlam
Bhaiksuki
Marchen
Newa
Osage
Tangut
Masaram Gondi
Nushu
Soyombo
Zanabazar Square

18 个新的字符区 18个新区块,其中包括10个区用于上述新字符集,8个用于下列现有的字符集:

Cyrillic Extended-C
Mongolian Supplement
Ideographic Symbols and Punctuation
Tangut Components
Glagolitic Supplement
Syriac Supplement
Kana Extended-A
CJK Extension F

将 HTTP Client API 标准化,放入了jdk11中,以前写的试用性的api放在 jdk.incubator.http ,现在已经移除掉了,至少代码来自 jdk.incubator.http 的都将更新到标准的包名: java.net.http

java.util.Collection 接口添加了一个新的默认方法 toArray(IntFunction) ,其实看字面意思也能理解,就是允许collection可以转换到一个数组去,具体的可以去看doc。

JDK 11更新了基于 Unicode Consortium's CLDR (Common Locale Data Registry) 的 Locale Data 。 oracle说的Locale Data 应该就是它所支持的语言、地区、字符集和其他地区数据。

编译线程的延迟分配。 多了个 -XX:+UseDynamicNumberOfCompilerThreads 的配置。 动态的控制编译线程数,在TieredCompilation模式下(默认为打开),虚拟机在具有多个cpu的系统上启动大量编译线程,而不管可用内存和编译请求的数量。因为线程即使在空闲的时候也会消耗内存(几乎所有的时间都是空闲的),这导致了资源的低效使用。为了解决这个问题,实现被更改为在启动期间每种类型只启动一个编译器线程,并动态地处理其他线程的启动和关闭。它由一个新的命令行标志控制,默认是打开的。 如果你写过java的gui程序就知道,client和server的即时编译是不一样的,具体的可以去百度下,总之TieredCompilation模式开启的时候,可以使程序启动时,使用client编译器,在程序运行一段时间后,自动切换为server编译器,这样启动的时候超级快,运行之后再对代码进行编译优化然后翻译成更高效的执行码。

ZGC,一个可伸缩的低延迟垃圾收集器(实验性的)。 这个垃圾回收器的主要目的是: 停顿时间不超过10毫秒 停顿时间不会随着堆或实时设置的大小而增加 处理堆的范围从几百兆到几千兆不等的堆

ZGC的核心是并发垃圾收集器,这意味着所有繁重的工作(标记、压缩、引用处理、字符串表清理等)都是在Java线程继续执行时完成的,这极大地降低了垃圾收集对应用程序响应时间的负面影响。 这个垃圾回收机制是实验性的,所以要启用的话需要一起配这两个配置:

-XX:+UnlockExperimentalVMOptions
-XX:+UseZGC

这个实验版本的ZGC启用有以下限制: 只能在 Linux/x64 下使用。 XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers 配置将不会有任何效果,这两个配置不生效。 -XX:+ClassUnloading 和 -XX:+ClassUnloadingWithConcurrentMark 默认情况下禁用,启用也不会有任何效果。 ZGC不能和oracle的全栈虚拟机GraalVM一起用,说到GraalVM,不得不提下,这玩意儿简直吊炸天,可以将java或者其他语言编译成二进制文件直接执行,具体的自行查看oracle的文档: https://www.graalvm.org

Epsilon GC,一个不做任何事情的垃圾回收器,哈哈哈哈哈哈哈。 这玩意儿也是个实验性的垃圾回收器,不实现任何内存回收机制,它一般是用来做性能测试的,可以对比其他gc的回收成本,很方便的进行测试。

低开销的堆分析。 提供一种采样Java堆分配的低开销方法,可以通过JVMTI访问,这玩意儿好啊,不然采集堆的对象数据简直难受。 设计这个东西的目标是: 足够低的开销,默认情况下可以连续启用。 通过定义良好的编程接口(JVMTI)进行访问。 可以抽样分析所有类型的分配方式,也就是说不限于某种特定的堆区域或者特定的分配方式的区。 实现的方式定义可以独立出来,即不依赖于任何特定的GC算法或VM实现。 可以提供关于活着的Java对象和死去的Java对象的信息。

嵌套访问控制。 它允许多个class同属一个逻辑代码块,但是被编译成多个分散的class文件,它们访问彼此的私有成员无需通过编译器添加访问扩展方法。 这个得看代码,不看代码的话很难讲明白

public class JEP181 {public static class Nest1 {private int varNest1;public void f() throws Exception {final Nest2 nest2 = new Nest2();//这里没问题nest2.varNest2 = 2;final Field f2 = Nest2.class.getDeclaredField("varNest2");//这里在 java 8环境下会报错,在java11中是没问题的f2.setInt(nest2, 2);System.out.println(nest2.varNest2);}}public static class Nest2 {private int varNest2;}public static void main(String[] args) throws Exception {new Nest1().f();}
}

说些题外话,美国一直有加密算法出口限制,近年来,美国放松了加密软件出口的条件,这次增加了一些密码算法的实现不知道和这个有没有关系。

使用RFC7748中描述的Curve25519和Curve448添加新密钥协议方案的实现。 Curve25519/Ed25519/X25519 是著名密码学家 Daniel J. Bernstein 在 2006 年独立设计的椭圆曲线加密 /签名 /密钥交换算法,和现有的任何椭圆曲线算法都完全独立。 关于Curve448的介绍可以看这里: https://en.wikipedia.org/wiki/Curve448

增加了Brainpool EC支持。 对于密码学不是很懂,大致的理解就是增加一种标准,椭圆曲线密码学(ECC)Brainpool标准。 具体的可以看: https://tools.ietf.org/html/rfc5639

实现了ChaCha20和Poly1305密码算法。 又是增加了一些加密的算法实现,说些题外话,美国一直有加密算法出口限制,近年来,美国放松了加密软件出口的条件,这次增加了一些密码算法的实现不知道和这个有没有关系。

增强密钥机制。 多了一个名为 jceks.key.serialFilter 的新安全配置。

RSASSA-PSS 签名支持添加到 SunMSCAPI。

Transport Layer Security (TLS) 1.3。 JDK 11发行版包含TLS 1.3规范的实现(RFC 8446)。

RFC 8009中定义的Kerberos 5支持AES加密和HMAC-SHA2。

Lambda参数的局部变量语法。 在声明lambda表达式的形式参数时,现在可以使用保留类型名称var。 啧啧啧,php啊,简直就是围城。

启动运行单文件源码程序。 通过“shebang”文件和相关技术,增强java启动程序,以运行作为java源代码单个文件提供的程序,包括在脚本中使用。 解释运行java代码,意味着可以像写脚本一样边写边执行java代码,类似于php的cmd模式输入代码实时出结果。

总结: 和jdk8比起来,jdk11好像并没有什么太吸引人的地方。。。

转载于:https://my.oschina.net/110NotFound/blog/3046749

这篇关于jdk11的一些新特性理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321283

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字