非常经济地实现跨平台。你的语言编译器后端只需要输出 JVM 字节码就可以。跨平台需要极大的工作量,举个例子,只是独立开发生成本地代码,就需要花费大量精力去针对不同平台和处理器进行优化(比如 Firefox 就会考虑重用 WebKit 的这部分后端)。
JVM 卓越的 JIT (Just-In-Time 即时编译)性能。 JIT 可以在运行中记录程序运行的特征,并在其基础上做大量的优化(Java 企业级应用的优秀性能很大程度上是由此而来)。 JIT 自从 HotSpot JVM 随 Java 1.2 发布以来,JVM JIT 的性能不断提高,是无可争议的成功产品。把 JVM 作为目标平台意味着大量的性能优化工作可以「外包」给 JVM 来做,大大缩减了 Guest 语言的开发预算。
已经有多个成熟的实例,有大量的经验可以借鉴
JVM 作为一个成熟的高层运行环境,为 Guest 语言提供了很多运行时所需要的服务,比如内存管理(有业界领先的垃圾回收等),很大程度上避免了额外的独立开发。
JVM 有多个独立实现,也有若干厂商会持续推进,资料完备,社区巨大。
Java 社区有大量成熟的库,一般来说,运行在 JVM 上的其它语言都会设计一个专用的「桥」来帮助直接使用 Java 的库,对潜在客户来说是个很好的卖点。
Java 有还算不错的开发工具和环境。目标为 JVM 的很多语言会考虑用 Java 语言实现(至少在 bootstrap 阶段)。
题外话:
由于 Scala 的独特优势,现在有不少研究性语言会用 Scala 实现,可以看到这里会有间接地使用 JVM 。
另外一个趋势是把 Javascript 成为新的目标平台。很多主流语言都已经出现了编译器可以翻译成 Javascript[1],这也是得益于近年来 Javascript 虚拟机性能的显著提升。

企业在选择一项技术的时候更多的考虑是技术本身带来什么,即实用性。而不是技术是否华丽,优美
歌瑞尔总结基于上面的原则JVM的优势很明显:
1.成熟,标准,这一套实现已经沿用了很多年,得到过充分的验证,它代表了一个成熟的流派,包括后来的.Net FrameWork也是沿用同样的原理。
2.垃圾回收 GC这个概念在Lisp时代就已经定义,可能很多追求性能的同学会鄙视之,但无论如何它确实带来了开发效率的提升。
3.内存管理 其实这一点和2有些重复,但JVM的内存模型,基于栈的方式,方法执行的优化,甚至线程方面的处理都是非常经典和值得借鉴的
4.相关文档非常完善,标准清晰,有专门的公司推进,拥有大量的开发者。
但是有了上面几点并不一定代表你要用它,因为现实中的开发一定是要根据实际情况做出抉择的,而不是听信“某某技术牛X”这样的言论。
如果楼主有兴趣可以研究下JVM的实现,包括现在Android的Dalvik,甚至可以去Mono社区看看,里面很多东西还是很有意思的^_^

为什么很多语言选择在JVM上实现的更多相关文章

  1. 牛逼了,教你用九种语言在JVM上输出HelloWorld

    我们在<深入分析Java的编译原理>中提到过,为了让Java语言具有良好的跨平台能力,Java独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码(ByteCode). 有 ...

  2. 转 PHP在JVM上的实现JPHP

    前两天还在想,像Quercus只封装了PHP在Java上的Web接口,有没有实现了完整的JVM语言特性的东东,这不,来了. JPHP是一个面向Java虚拟机的PHP实现,支持PHP(5.3+)的很多特 ...

  3. [零] Java 语言运行原理 JVM原理浅析 入门了解简介 Java语言组成部分 javap命令使用

    Java Virtual Machine  官方介绍 Java虚拟机规范官方文档 https://docs.oracle.com/javase/specs/index.html 其中以java8的为 ...

  4. Android中实现如下多语言选择Radiobutton效果

    手边的samsung手机设置多语言的方式一般是点击设置多语言的一栏后进入到多语言选择界面,选择完成之后当前的语言环境用小字方式直接显示在设置多语言栏的下方.另一种选择多语言的方式如上图所示,我也在系统 ...

  5. struts2实现选择i18n语言选择切换

    [新手学习记录,仅供参考!] 1.项目准备 首先当然是我们得创建一个struts2的web项目,并且已经实现了一个简单的功能. 以下通过登录功能来举例说明. 2.指定全局国际化资源文件 在struts ...

  6. JVM上的响应式流 — Reactor简介

    强烈建议先阅读下JVM平台上的响应式流(Reactive Streams)规范,如果没读过的话. 官方文档:https://projectreactor.io/. 响应式编程 作为响应式编程方向上的第 ...

  7. C语言之漫谈指针(上)

    C语言之漫谈指针(上) 在C语言学习的途中,我们永远有一个绕不了的坑,那就是--指针. 在这篇文章中我们就谈一谈指针的一些基础知识. 纲要: 零.谈指针之前的小知识 一.指针与指针变量 二.指针变量的 ...

  8. C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

    C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样 ...

  9. js移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...

随机推荐

  1. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素

    用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C. 考试的时候没完全想明白,考完又 ...

  2. java 5 线程池

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Thr ...

  3. 齐全的IP地址查询接口及调用方法(转)

    设计蜂巢IP地址查询接口:http://www.hujuntao.com/api/ip/ip.php 腾讯IP地址查询接口:http://fw.qq.com/ipaddress 新浪IP地址查询接口: ...

  4. redhat 6 配置 yum 源的两种方法

      由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源. 本文包括配置本地源及第三方源.第三方源包括:网易,epe ...

  5. binutil 工具-----C分析工工具

    binutils-- a tools set * ld - the GNU linker. * as - the GNU assembler. * addr2line - Converts addre ...

  6. Android自定义View之ProgressBar出场记

    关于自定义View,我们前面已经有三篇文章在介绍了,如果筒子们还没阅读,建议先看一下,分别是android自定义View之钟表诞生记.android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检 ...

  7. android开发之SnackBar的使用

    SnackBar是一个类似于Toast的东西,它也有显示时长,但是比Toast更加灵活,同时,我们还可以给SnackBar设置点击事件,那么我们今天就来看看怎么用吧! 先来一张效果图: 这种效果大家可 ...

  8. 如何运用管理员身份运行cmd窗口?

    所有程序 → 附件 → 命令行提示符 → 鼠标右键“以管理员身份运行”.

  9. [RAC] oracle rac 后台进程

    一.RAC后台进程 LMON:LOCK Monitor Processes 也被称为Global enqueue service monitor 监控整个集群状况,维护GCS的内存结构 监控非正常终止 ...

  10. [转]前端开发必备 40款优秀CSS代码编写工具推荐

    编写工具地址如下 英文地址:http://webtoolsdepot.com/40-css-tools-to-improve-your-productivity/ 中文地址:http://www.cs ...