现在有越来越多的编程语言(如Scala、Clojure等)是基于Java虚拟机(Java VM)开发的,并且可以与Java字节码兼容。
我开始思考:为什么要选择Java虚拟机呢?
Java虚拟机有何特别之处或者优势,以至于会有新的编程语言针对它进行开发并逐渐受到欢迎?
为什么不为一种新语言编写一个新的虚拟机呢?
现在有越来越多的编程语言(如Scala、Clojure等)是基于Java虚拟机(Java VM)开发的,并且可以与Java字节码兼容。
我开始思考:为什么要选择Java虚拟机呢?
Java虚拟机有何特别之处或者优势,以至于会有新的编程语言针对它进行开发并逐渐受到欢迎?
为什么不为一种新语言编写一个新的虚拟机呢?
性能和库
JVM 非常稳定,从最小的Java智能卡(好吧,是一个微型虚拟机 ;))到你能想象到的最大集群超级计算机都可以使用。
由于其稳定性,在一些国家中:
我正在开发商业软件,我们在 Windows 和 OS X 上销售,但我们都在 Linux 上进行开发。 它只需要工作,而且它也适用于 Solaris 等等。 这是因为我们的目标是 JVM:再见可移植性问题。 只要平台有 VM,软件就应该能够工作。
然后,我无法相信还没有人提到它:从安全角度来看,这是一个非常好的开始。
Java VM 是通过设计免疫缓冲区溢出的。 这是巨大的。 事实上,这比大多数人意识到的要更重要。
我在 Linux 上唯一记得的“Java”缓冲区溢出(促使我升级以解决安全问题)实际上是在一个 C 写的库中(如果我没记错的话,那时候 Linux 上的 Java 仍然默认使用该库)导致任意代码执行的缓冲区溢出。
当然,对于 Web 应用程序,导致任意代码执行的缓冲区溢出已经不再是最重要的攻击向量(现在 XSS 和 SQL 注入偷走了风头)。 但在所有其他情况下,缓冲区溢出/溢出是最常见的安全问题源头。
JVM 对此是免疫的。
除此之外,由于其设计,它很容易在其上插入各种工具,例如探查器和调试器。
这是一种非常稳定和安全(正确使用时)的技术。这就是为什么它被技术精英和不那么懂技术的公司广泛使用,例如谷歌,从GMail到他们的Android和GWT等,Java在谷歌非常流行。
事实上,可以争论Java的成功来自JVM,“Java虚拟机”比“Java语言”更重要。
JVM是过去20年中最大的“语言”成功故事。这是应得的,并且它会一直存在 :)
因为其他人已经确保它可以在所有主要平台上运行良好。
如果您编写自己的虚拟机,您需要为Linux/Unix/BSD编写一个,为Mac编写一个,为Windows编写一个,并且您还需要支持所有这些平台上的虚拟机以及支持您的语言编译器和运行时库。 如果您使用Java虚拟机,则Oracle、IBM和Apple已经为您处理了第一部分。
因为经过将近20年的努力,Java虚拟机具有以下特点:
我的意思是,如果我计划发布一种新语言,为什么不使用JVM呢?好吧,还有其他虚拟机(如llvm、parrot),但JVM受到广泛支持、知名度和经过测试。
而且它也运作得相当好!缺少invokeDynamic
问题将在Java7发布时得到解决,所以更好的选择。
因为它不是微软技术。正如其他人所提到的,使用JVM有许多很好的理由,但我认为如果微软的CLR像JVM一样自由、可移植和开放,它可能会稍微不那么受欢迎。
明显的原因: