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