二十多年来,Java一直是企业应用程序和网络服务的首选语言。它有一个非常丰富的中间件、库和工具的生态系统,以及一个由经验丰富的开发人员组成的非常大的社区,这使得它成为开发基于云的应用程序或将现有Java应用程序迁移到云中的明显选择。
然而,Java及其运行时的历史发展与今天的云需求之间存在不匹配。所以Java需要改变以保持在云中的相关性!原生Java是这里最有前途的选择。
Java的超能力之一是相当枯燥的东西:标准化。它是整个Java生态系统的稳定基石。标准化确保了,不管存在多少不同的JDK实现,在概念上有一个Java语言和一个Java运行时模型作为目标。相同的应用程序可以在任何JDK上运行——无论是OpenJDK的衍生产品还是像Eclipse OpenJ9这样的独立实现。这建立了开发者的信心:平台“只是工作”。再加上Java对向后兼容性的长期承诺——旧的Java 1.4 JAR文件今天仍然在Java 18上运行——我们已经看到框架、库和应用程序的生态系统蓬勃发展。Java持续的、谨慎的、基于标准的发展是这种增长的关键。
Java的标准化保证了您的应用程序将持续运行。投资这个生态系统是值得的。库可以继续工作,而不需要对每个版本进行重大修改。框架不需要在每个版本中重新投资。应用程序开发人员可以专注于增加业务价值,而不是不断适应不兼容的变化。并非所有的编程语言生态系统都做出这些保证。随着Java发布的快速和频繁,这些保证对于Java在不失去开发人员的情况下继续发展是至关重要的。
Java在云中保持相关性是至关重要的。这对Java社区有很多好处。然而,原生Java需要对应用程序的开发和部署方式进行巨大的改变。因为它存在于核心平台和标准化过程的稳定性保证之外,所以它有分叉Java定义的风险。
同时,动态Java在OpenJDK中继续发展。正在进行的主要项目有:Loom增加了轻量级线程和结构化并发,Valhalla引入了“像类一样编码,像int一样工作”的类型,Panama改进了Java与非Java代码的工作方式,Amber发布了更小的功能,使开发人员更有效率。
到目前为止,原生Java在跟踪平台方面非常成功。但是它只有通过使用替换来适应Java平台和核心JDK库才取得了成功:这些是修改类以与本地Java一起工作的伴随Java类。但是他们冒着破坏他们修改的代码的不变量的风险。当原始代码无法更改时,替换是一个非常实用的解决方案。但是它们不能扩展。它们也面临着与其他语言中的“猴子补丁”解决方案相同的问题——强大但危险。由于它们修改的类的变化,它们可能变得不正确。一个最近的例子是是JDK运行时替换,在JDK更改后变得无效。Quarkus团队幸运地发现并修复了这个问题。
将原生Java引入OpenJDK提供了一个“做得更好”的机会,修改Java平台而不是使用替换之类的技巧——不仅直接更新JDK类库,还可能更新编程模型。它确保现有的OpenJDK项目在开发特性时检查整个平台——包括动态和本地用例。它确保应用程序受益于作为平台中一等公民的本地Java,为两种部署模型带来更好的解决方案。
结论
在过去的20年里,Java一直是占主导地位的企业语言,它建立在标准化过程所提供的稳定性之上。语言、运行时和库之间的共同发展,在历史上都是由于摩尔定律而追求快速的硬件改进,这简化了开发人员的工作,因为他们努力从他们的应用程序中获取最大的性能。
原生Java的兴起使Java适应了资源受限的云部署。但现在它正站在十字路口。它可以继续独立发展,并冒着在每个版本中脱离动态Java的风险,直到它有效地成为一个独立的实体,拥有自己的利益相关者、社区和库。或者,原生Java可以在Java标准的旗帜下加入,并与平台的其余部分一起发展成有益于所有用例的东西。这将给本地Java的功能带来稳定性,并允许出现通用的部署实践。
发表评论 取消回复