Oracle发布Java 15,希望数百万人离开Rust、Kotlin等语言
Java 15或Oracle Java Development Kit(JDK)15带来了Edwards-Curve数字签名算法,隐藏类和以前的预览版本功能:包括文本块和Z Garbage Collector,而密封类功能到达并进行模式匹配,并且记录作为第二个预览版本出现。
JDK 15是Java SE平台版本15的开源参考实现,由Java社区流程中的JSR 390指定。JDK 15于2020年9月15日正式发布,Oracle可以提供GPL下的生产就绪二进制文件,有Linux / AArch64、Linux / x64、macOS / x64、Windows / x64平台软件包下载。
JDK 15/Java 15的亮点包括加密签名、文本块、隐藏类、外部存储器访问API、ZGC、模式匹配和Records等。
JDK 15/Java 15新特性介绍
339:Edwards-Curve Digital Signature Algorithm (EdDSA)
使用Edwards-Curve数字签名算法(EdDSA)实现加密签名。与其它签名方案相比,EdDSA具有更高的安全性和性能,并且已在许多其它加密库(如OpenSSL和BoringSSL)中得到支持。
360:Sealed Classes (Preview)
用于限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。
371:Hidden Classes
隐藏类适用于在运行时生成类并通过反射间接使用它们的框架。隐藏类可以定义为访问控制嵌套的成员,并且可以独立于其他类进行卸载。
372:Remove the Nashorn JavaScript Engine
删除Nashorn JavaScript脚本引擎和API,以及jjs工具。不建议在Java 11中删除引擎,API和工具,并明确表示打算在将来的版本中删除它们。
373:Reimplement the Legacy DatagramSocket API
重新实现旧版DatagramSocket API,用易于维护和调试的更简单、更现代的实现来代替java.net.DatagramSocket和java.net.MulticastSocketAPI的基础实现。
374:Disable and Deprecate Biased Locking
默认情况下禁用偏向锁,并弃用所有相关的命令行选项。
375:Pattern Matching for instanceof (Second Preview)
通过对instanceof运算符进行模式匹配来增强Java编程语言。模式匹配允许程序中的通用逻辑,即从对象中有条件地提取组件,可以更简洁、更安全地表示。
377:ZGC: A Scalable Low-Latency Garbage Collector
将Z垃圾收集器从实验功能更改为产品功能。
378:Text Blocks
将文本块添加到Java语言。文本块是多行字符串文字,它避免了大多数转义序列的需要,以一种可预测的方式自动设置字符串的格式,并在需要时使开发人员可以控制格式。
379:Shenandoah: A Low-Pause-Time Garbage Collector (Production)
Shenandoah垃圾回收从实验特性变为产品特性。这是一个从JDK 12引入的回收算法,该算法通过与正在运行的Java线程同时进行疏散工作来减少GC暂停时间。Shenandoah的暂停时间与堆大小无关,无论堆栈是200 MB还是200 GB,都具有相同的一致暂停时间。
381:Remove the Solaris and SPARC Ports
删除源代码并构建对Solaris/SPARC,Solaris/x64和Linux/SPARC端口的支持。不建议在JDK 14中删除这些端口,并明确表示打算在将来的版本中删除它们。
383:Foreign-Memory Access API (Second Incubator)
引入一个API,以允许Java程序安全有效地访问Java堆之外的外部内存。
384:Records (Second Preview)
Records提供了一种紧凑的语法来声明类,以帮助开发者写出更简洁的代码,这些类是浅层不可变数据(shallowly immutable data)的透明拥有者。该特性主要用在特定领域的类,这些类主要用于保存数据,不提供领域行为。
385:Deprecate RMI Activation for Removal
弃用RMI激活机制以便将来删除。RMI激活是RMI的过时部分,自Java 8开始,RMI一直是可选的。另外不会弃用RMI的其他部分。
JEP 378和我们的日常编程关系很大,之前在Java里写个多行文本很麻烦,有了“文本块”这个新特性,写多行文本就方便多了。在经过了Java 13和14中的两个预览版之后,这个特性算是正式到来了。
语法是字符串前后分别加3个双引号。
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
在这样的字符串里可以自用使用双引号。
ZGC是Java 11引入的新的垃圾收集器,也经过了多个实验阶段,终于成为正式特性。可以用-XX:+UseZGC命令行参数打开。其设计目标是:
目前可以支持从8MB~16TB的堆大小。非常值得关注。
Shenandoah收集器也从实验特性转正了。可以通过-XX:+UseShenandoahGC命令行参数启用。这是Red Hat引入的一个收集器。不过这里要注意,它存在于OpenJDK中,Oracle JDK并没有包含该特性。所以在使用的时候要注意自己的JDK版本。
下载链接
OpenJDK网站:https://openjdk.java.net/
感兴趣的可以下载尝鲜了。
关于Java目前的情况
根据开发者分析师RedMonk的说法,Java已被Python语言取代,Java对基于GitHub项目的语言进行了评级,并在Stack Overflow上对开发人员进行了交谈。
自2012年7月以来,Java自2012年以来首次跌出RedMonk的前两名交椅,但 就受欢迎程度而言,它现在已经落后于JavaScript和Python。
Tiobe在9月份将Java排在第二位,落后于C,但领先于Python。尽管落后于具有35年历史的C/C++的增长速度仍领先于其他任何语言,但Tiobe首席执行官Paul Jansen表示Java“确实遇到了麻烦”,因为与一年前相比,Java的下降了3.81个百分点。
但是Oracle表示,Java仍然非常流行,并在企业中广泛使用。它指出,全世界有超过69%的专职开发人员使用Java。
Oracle Java平台事业部开发副总裁Georges Saab表示,Java 15代表了Oracle的“技术投入,可以推动Java创新向前发展并帮助应对迅速变化的技术格局。”
据甲骨文称,全球仍然有510亿台活动的Java虚拟机(JVM)被部署,其中Java被用于诸如分析,数据管理,大数据,DevOps,移动,持续开发工具和聊天机器人等服务。尽管该语言具有通用性,但与Python语言不同,它不是构建机器学习应用程序的数据科学家和程序员的首选语言。
编辑:万能的大雄