有越来越多的编程语言(Scala、Clojure 等)出现,它们是为 Java VM 设计的,因此与 Java 字节码兼容。
我开始问自己:为什么是 Java VM?
是什么让它如此强大或流行,以至于有新的编程语言,似乎也越来越受欢迎,为它创造了?
他们为什么不为新语言编写新的虚拟机?
他们为什么不为新语言编写新的虚拟机?
那很简单:
性能和库
JVM 坚如磐石,可以从最小的 Java SmartCard(好吧,一个微型 VM ;)到您可以想象的最大的集群超级计算机。
因为它坚如磐石,所以整个国家的人们都有:
我正在用 Java 开发商业软件:我们在 Windows 和 OS X 上销售,但我们都在 Linux 上开发。它只是工作。它也可以在 Solaris 上运行,等等。那是因为我们的目标是 JVM:再见可移植性问题。只要平台有虚拟机,软件就可以工作。
然后我不敢相信有人提到它:从安全的角度来看,这是一个非常好的开始。
Java VM 在设计上不受缓冲区溢出/溢出的影响。这是巨大的。这实际上比大多数人意识到的要大。
我记得在 Linux 上唯一的“Java”缓冲区溢出(由于安全问题促使我升级)实际上是缓冲区溢出导致任意代码执行......一个 C 编写的库(zlib,如果我没记错的话,回到Linux 上的 Java 仍然默认使用该库的日子)。
当然,对于 webapps 缓冲区溢出/溢出导致任意代码执行不再是最重要的攻击媒介(现在 XSS 和 SQL 注入已经抢了风头)。但在所有其他情况下,缓冲区溢出/溢出是大多数安全问题的根源。
JVM 对此免疫。
除此之外,由于它的设计,它很容易插入各种工具,如分析器和调试器。
这是一种非常可靠和安全(如果使用正确)的技术。这就是为什么它被精通技术的公司如此广泛使用(Java 在 Google 中是巨大的,从 GMail 到他们的 Android 再到 GWT 等)和技术不精通的公司。
实际上,可以说 Java 的成功来自 JVM,“Java the VM”比“Java the language”重要得多。
JVM 是过去 20 年来最大的“语言”成功案例。这是应得的。它会留在这里:)
因为其他人已经不厌其烦地确保它在每个主要平台上运行良好。
如果您编写自己的 VM,则必须为 Linux/Unix/BSD 编写一个,为 Mac 编写一个,为 Windows 编写一个,并且您必须支持所有这些平台上的 VM,并支持您的语言编译器和运行时库。如果您使用 Java VM,第一部分由 Oracle、IBM 和 Apple 为您处理。
是什么让它如此强大或流行,以至于有新的编程语言,似乎也越来越受欢迎,为它创造了?
它是免费开放的、成熟的(稳定的、完整的),并且周围的生态系统是巨大的。
他们为什么不为新语言编写新的虚拟机?
编写与 JVM 一样好的 VM 是很困难的。十多年来,业界最优秀的人才对 JVM 的规范及其实现进行了完善。
因为经过近 20 年的努力,Java VM 是
我的意思是,如果我打算发布一种新语言,为什么不应该使用 JVM?好的,还有其他 vm(llvm、parrot),但 JVM 得到了广泛的支持、已知和测试。
而且效果也很好!invokeDynamic
Java7的发布将解决这个问题,比这更好..
第二个问题首先:为什么要重新发明轮子?Java VM 有多种实现,包括高度优化的实现,并且在任何平台附近至少有一个可用于该死的。
第一个问题第二个:有大量的第三方库和工具支持将代码编译成 Java 字节码并在 VM 上运行。当你创建一种新语言时,一个大问题是你必须创建人们可以使用的所有东西,或者让它与其他东西兼容(比如链接到现有的静态 C 库、.Net、COM 或 Java虚拟机)。Java VM 的开放规范(到目前为止)、深厚的历史和广泛的适用性使其成为新语言的一个很好的目标。
因为它不是微软的技术。正如其他人所提到的,使用 JVM 有很多很好的理由,但我认为如果 Microsoft 的 CLR 是免费的、可移植的和开放的,那么它会稍微不那么受欢迎。
显而易见的原因: