
Java一直是程序员的梦想,而用Java 13的新版本来量化Java的流行度是更好的方法。在最初的Java增强建议之后,JDK功能得到了改进,这些新功能将使Java开发人员大为震惊。在2019年9月17日正式发布之后。
但是,为什么您认为Java如此流行呢?由于Java的平台独立性和能够在不同计算机上运行的能力,Java引起了程序员的热烈欢迎。 它已经存在了很长时间,已经被银行,保险公司,企业,代理商等组织所采用,并且主要被
软件外包公司所采用 。
Java一直在开发Android应用程序,Java Web应用程序,软件工具和科学应用程序。
让我们深入研究统计数据,并评估Java应用程序在其他竞争性编程语言中的普及率。
根据
Tiobe Index于9月发布的最新报告,Java应用程序和程序员一直在坚持自己的立场,并一直在艰难地尝试其他编程语言。

在看到Java在其他编程语言中的流行之后,让我们一目了然地转到Java 13 JDK的功能:
- JEP 350:动态CDS档案
- JEP 351:ZGC:取消提交未使用的内存
- JEP 353:重新实现旧版套接字API
- JEP 354:开关表达式(预览)
- JEP 355:文本块(预览)
由于在Java 12的初始版本发布之后我们不能期望有很多更改,因此在功能级别上仍然存在一些更改,这些更改可能会使Java程序员转向新的稳定功能。 目标是在下一个LTS版本中最终确定预览功能,以使它们足够稳定,并在未来三年中保持良好状态。 预计到2021年9月,Java 17将取代Java 8和11。
在本博客中,我将带您了解Java 13的最新功能。->动态CDS档案除了
Java开发人员显而易见的新功能外,在JVM和类库的幕后还发生了很多事情。 类数据共享(CDS)是在Java 5期间引入的。CDS的最终目标是通过将有关类的某些信息存储在类数据共享档案中,从而缩短Java应用程序的启动时间。 然后可以在运行时加载数据并由多个JVM使用。
但是,在Java 10之前,共享存档只能由Bootstrap ClassLoader访问。 从Java 10开始,CDS通过应用程序类数据共享(AppCDS)进行了扩展。 AppCDS使内置系统和平台类加载器以及用户定义的类加载器能够访问CDS档案。 创建CDS归档文件需要类列表,以标识要加载的类。
以前,这些类列表必须通过应用程序的试运行来确定,以确定在执行期间实际加载了哪些类。 从Java 12开始,默认情况下,默认的CDS归档文件随JDK一起提供,它基于JDK的类列表。
现在,动态CDS存档基于此。 目的是保存应用程序的其他测试运行。 执行应用程序后,将仅存档默认/基本层CDS中尚未包含的新加载的应用程序和库类。 动态归档是通过命令行命令激活的。 在将来的扩展中,类的归档然后可以完全自动且透明地运行。
-> ZGC:取消提交未使用的内存如今,应用程序必须同时为成千上万的用户提供服务并不少见。 这样的应用程序需要大量内存,并且内存管理非常重要,这会影响应用程序的性能。 为了满足规定的要求,Oracle在Java 11中引入了Z垃圾收集器(
ZGC ),因为它在清理具有数TB的堆内存时保证了非常短的暂停。
以前,它没有释放为应用程序保留的堆内存。 结果,应用程序消耗的内存远远超出了必要。 在资源不足的环境中运行的应用程序尤其受到影响。 G1和Shenandoah等其他垃圾收集器已经支持释放未使用的内存。
->更新的套接字APIJava Socket和Java ServerSocketAPI是JDK 1.0的片段。 它们中的大多数都包含Java和C代码的遗留物。 这使得维护和扩展性变得更加困难。 NioSocketImpl应该现在替换过时的PlainSocketImpl。 NioSocketImpl已经基于现有的New I / O实现,并在JDK中使用其现有的基础结构。
先前的实现与该语言的其他计划的扩展不兼容。 例如,并发问题阻碍了轻量级用户线程(光纤,Project Loom的一部分)的未来使用。
->开关表达式的增强如果您从开发人员的角度来看功能,那么这只是有趣的一点。 例如,“开关表达式”在Java 12中作为预览引入,由于用户的反馈而被扩展。 Switch表达式是繁琐且容易出错的switch语句的替代方法。
在Java 13中可以看到的编码规范的最大变化是,用yield代替了switch表达式中的关键字break。 背景是switch语句(可能带有break)和表达式(带有yield)之间的更好区分。 yield语句退出开关并返回当前分支的结果,类似于return。
例如,下面的代码片段展示了以下情况:Switch的语句已与break一起使用,而另一部分中的Switch Expression已与yield一起使用,以解决两者之间的差异。
->文本块,而不是原始字符串文字文本块是一种用Java语言定义字符串文字的新类型。 它可以在任何可以使用字符串文字的地方表示一个字符串,但是可以提供更高的表现力和更少的意外复杂性。 Raw String Literals的第一个实现引发了许多问题,因为用户已经针对具有多个多个问题的相同内容提供了反馈。
毕竟,许多Java应用程序都可以处理其他语言(例如HTML或SQL)的代码段。 到目前为止,只能以繁琐的方式定义此类字符串,这使它们难以阅读。
例如,对于换行符,必须使用额外的控制命令(用\ n转义)。 诸如Groovy,Scala或
Kotlin之类的其他语言早就提供了定义多行文本的可能性。
新的文本块使用三引号作为分隔符,并且可以在允许使用普通字符串的任何地方使用。
下面的代码片段说明了两者之间的区别:

首尾三引号必须放在单独的行中。 但是,实际内容从第二行开始。 因为第一行的缩进在源文本中正确显示,所以这增加了源代码的可读性。
结论:到目前为止描述的更改是在JEP(Java增强协议)中定义的。 但是,直接在类库中进行进一步的修改。 但是首先,您必须在Java 14版本仍在开发中时安装Java 13。
变化是不确定的,并且可以完成某些功能,例如开关表达式和文本块。 但是,下一个版本即将推出。