25岁的Java:具有影响力并展望未来的功能

发布于:2020-12-24 16:14:32

0

1073

0

Java 后端

我对Java的第一次经验来自我的第二门计算机科学课程,即CS基础课。编程课程的入门部分使用C ++,这是我在BASIC之外的第一个编程。通过入门课程,我学习了循环和逻辑,变量和函数声明,内存分配以及基本对象和类。

此后,CMU的CS部门决定改用这种全新的编程语言Java。它可以在任何平台上运行,这很棒,因为主要的CS集群是Solaris计算机(Sun推出的Unix变体)。早在每个人都拥有Mac笔记本电脑和Linux盒子之前,这种情况就回来了。但这给我带来了其他语言功能的混乱:线程,垃圾回收,AWT(抽象的Windows工具包),异常和面向对象的编程。

自那时以来,Java已经经历了大约14个主要功能版本,在甲骨文与甲骨文收购Sun Microsystems之间进行了过渡,开源了该语言背后的代码,并产生了使用其虚拟机的几种语言,包括Scala,Clojure和Kotlin。就个人而言,我曾在多家公司中使用Java构建复杂的产品,无论这些产品是嵌入在浏览器中还是通过WebStart安装在桌面中,还是在面向服务的体系结构后端中在幕后。

1995年至2020年-那个四分之一世纪见证了技术行业几个时代的兴衰。我问了甲骨文Java平台小组软件开发副总裁Georges Saab,Java的哪些变化产生了最大的影响,以及他认为哪些即将推出的功能将对其未来产生真正的影响。萨博(Saab)感觉到的一些功能使该语言激增,还有一些将使它持久。

重大变化

产生巨大影响的第一个功能根本就不是Java语言的变化。早期发行版中对库的支持有了很大的改进。在1.0到1.3之间,这些库包括Swing窗口工具包,Collections框架,用于远程调用的类似RPC的API,用于与数据库交互的JDBC等。标准库变得更丰富,更复杂,并使Java成为一种真正的企业语言。

在2004年,Java添加了泛型,允许在实例化该项目时指定类型,方法和接口以及相关的数据类型,而又不牺牲类型安全性。萨博说:“当时,仿制药是一个挑战,人们对此有强烈的看法。”如今,泛型已成为该语言的持久特性之一。

Java可能被设计为完全面向对象的语言,但是当Java SE 8在2014年发布时,它添加了Lambda表达式(又名闭包),其中添加了一些功能性编程元素。并不是每个问题都能由OOP最好地解决,并且通过添加Lambda,Java变得更加灵活。

Java 9解决了模块可能会导致大量JAR文件导致的潜在依赖性问题。它允许封装库代码,以便在导入软件包时,仅导入所需的模块,而不导入整个JAR。该模块具有的所有依赖项都已明确声明,因此您可以检查代码以查看要导入的代码。萨博说:“让他们知道,他们并非无意间依赖于某种事物,这使我们达到了Java生态系统对变革和持续发展更具弹性的地步。”

奖励功能的改进是普通用户可能没有注意到的一项功能:JVM的性能一直在不断提高。萨博说:“您不一定会看到它的发生,但是您看到的是效果。” “我编写的在J2SE 1.3上运行的代码仍然可以在Java 14上运行,但是速度要快得多。它不仅速度更快,而且以某种方式利用硬件变化带来的更快速度,这种变化在2004年没人能想到。”

Java正在为未来酝酿什么


尽管Java在众多行业中占有重要地位,但它并没有停滞不前。萨博提到了Java带来的四个让他兴奋的大型项目,所有这些项目都用代号命名:Loom,Valhalla,Leyden和ZGC。

Loom项目旨在放松Java线程与本机线程之间的耦合。 Java从一开始就通过线程进行并发,但是它们始终与OS线程绑定。 Loom引入了光纤,JVM管理的线程,这些线程允许更有效的并发。使用Java服务器端应用程序处理成千上万并发用户的负载,更好的并发性只能提高Web性能。

Valhalla的目标是修改Java的内存模型,以允许不可变类型,该类型比基元更复杂,但不如对象灵活。有时,您拥有的复杂数据在该对象的整个使用期限内都不会改变;不必为课程增加负担。最初的建议更简洁地说:“代码就像一个类,就像一个整数一样工作。” Saab说:“对于诸如用于机器学习或自然语言的大数据之类的东西,Valhalla承诺以一种允许JVM充分利用自Java创建以来发生了巨大变化的现代硬件架构的方式来表示数据。”

Leyden旨在解决Java应用程序的启动时间。对于整体和单个应用程序,Java有时需要花费一些时间,但是一旦启动并运行,它们很快。萨博说:“如果您的应用程序服务器要运行两周或两个月或两年,那就太好了,但是如果您要运行30毫秒,那就不好了。”服务器端软件越来越小,分布越来越分散,因此快速启动是快速响应时间的关键。

ZGC是一种新的垃圾收集器,可以处理庞大的堆大小(最大为16 TB),而不会增加暂停时间。对于可能正在处理内存中大量数据的大数据应用程序,将垃圾收集的暂停时间控制在10ms以下,这意味着对大数据集的处理速度不会因语言的限制而停滞不前。

Java已经成长为现代互联网和移动应用程序环境中不可或缺的一部分,并有望在未来一段时间内继续成为信息技术工具包的一部分。四分之一世纪是编程中的永恒,因此提高Java,过去,现在和未来的“类”。