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

相关文章

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,

WeakHashMap深入理解

这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap示例

netty中常用概念的理解

目录   目录ChannelHandler ChannelHandler功能介绍通过ChannelHandlerAdapter自定义拦截器ChannelHandlerContext接口ChannelPipeline ChannelPipeline介绍ChannelPipeline工作原理ChannelHandler的执行顺序   在《Netty权威指南》(第二版)中,ChannelP

Hbase特性介绍

1、什么是Hbase。 是一个高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。 适合于存储非结构化数据,基于列的而不是基于行的模式 如图:Hadoop生态中HBase与其他部分的关系。 2、关系数据库已经流行很多年,并且Hadoop已经有了HDFS和MapReduce,为什么需要HBase? Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于Hadoo