JVM时代即将结束 - movingfulcrum


在过去的二十多年中,JVM(以及Java)统治了一切,而其他运行时Runtime已经过去或消失了。Ruby,Python,.Net,NodeJS都试图登上王位。但是JVM提供了一些无法提供的功能:多线程,JIT编译的高性能,完全向后兼容的运行时。
可以通过一个简单的示例来证明JVM与时俱进。假设您用Java编写了一个小的命令行实用程序函数,该函数依赖于几个jar。如何打包和分发此实用程序?可以查看StackOverflow来查看您最喜欢的构建系统中的哪个插件当前最流行创建Fat Jar。但是,打包代码及其依赖项的官方“ Java方式”仍然是旧的.war文件。一家发展较快的组织将已经意识到用户喜欢如何发布他们的代码。他们将扩展.jar文件格式(或引入新的文件格式),以便能够以标准化方式打包依赖项。但是传统Java尚未出现这样的事情。
有人可能会说,Java的发展速度比以往任何时候都快。现在每年确实有2个次要版本。当然,使用Java 9的模块系统可以减轻JVM的负担,但是要使JVM与竞争产品相提并论,对JVM的重大补充似乎还有很长的路要走。Valhalla项目原本应该在Java中引入“值类型”,但该项目早在2014年就已宣布,但至今尚未发布。带绿色线程的Loom项目于2018年宣布,处于类似状态。要与本机代码互操作,还必须处理已有20年历史的JNI接口的精神错乱。
人们还想知道,即使在引入了这些功能之后,与使用其他语言/运行时的实现相比,它们将具有怎样的吸引力。毕竟,Java的致命弱点是保持向后兼容性。
曾经有一段时间Java是几乎所有东西的最佳选择。GWT位于前端,Spring位于后端。像Hadoop,ElasticSearch,Kafka,Spark之类的数据库都写在JVM之上。Java在Eclipse和Intellij中也具有绝对最佳的IDE,这使其成为在专业环境中选择Java而不是其他语言的原因。
在过去十年中,语言/运行时已发展成为针对特定领域的同类最佳。他们从JVM中吸取了教训,最终意识到需要类型安全,并且性能很重要。他们承认一种语言/运行时间不能满足所有需求。

  • 是否要编写一个大型的,复杂的UI?ReactJS和Typescript允许您这样做,同时提供比JVM更具表现力的类型系统。
  • 想写一个Web服务器?Golang允许您一次处理成千上万个请求,而无需每个请求使用线程。它使并发变得如此容易,Java中的并发将复杂一个数量级。
  • 想写一个大数据数据库吗?Rust帮助了你。处理大量数据而无需与GC作战,无需与JNI或进行斗争即可与低级系统调用进行交互

Jetbrains现在也能够为这些语言制作同样出色的IDE。
从2021年开始,JVM似乎并不是任何东西的最佳选择。它将作为大型,重量级,适合所有VM的一种尺寸继续其传统。擅长一切,但绝不擅长。未来是多语言的,并且没有JVM。

Java致命伤:JVM的JIT在微服务快速交付时变成鸡肋