Java不仅仅是Java:盘点运行在JVM下的其他9种语言

Java 10终于如期发布了,这是Java开发届的一件大事。但是作为拥有最庞大企业开发社群和开发人员的一个完整的生态环境,围绕着Java运行时环境(JRE)和Java虚拟机(JVM),早已不单单是Java语言的一言堂了,而是挤满了各式各样的参与者。

图0:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

本文,就将带领大家盘点下,运行在Java虚拟机环境下的这些别样的语言们。我们完全有理由相信,随着JVM性能的进一步提升,这些语言必将会更加大放光彩。

1、Kotlin

图1:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:https://kotlinlang.org/

由JetBrains于2010年创建,并于2012年开源, Kotlin比Java更加简洁和安全。 您完全可以将Kotlin视为是一种“更加简单但高效的Java”。Kotlin的编译速度通常比Java代码快,而且在其创建之初,就非常明确的支持了函数式编程,这一点,Java是到Java 8才开始支持的。

特别的,因为有了Google的加持,越来越多的Android开发人员,开始选择Kotlin来开发应用程序,与此同时,独立的超越JVM的行动也已经在展开,通过一项名为LLVM的项目,Kotlin正在努力实现代码编译的本地化,而不在基于JVM 。

但无论如何,至少现在,它还活在JVM中。

2、Scala

图2:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:http://www.scala-lang.org/

和Kotlin一样, Scala也是为了让Java开发人员提高工作效率而创建的。 作为一种完全的面向对象语言和一种完全的函数式编程语言,Scala巧妙的将这两种编程范式结合到了一起。

特别是在函数式编程方面,Scala几乎支持函数式编程语言中所有已知的特性,比如,模式匹配(Pattern matching)、延迟初始化(Lazy initialization)、偏函数(Partial Function)、不变性(Immutability)等等等等,

因此,虽然Scala的类Lisp的语法会让初学者倍感迷惑,但花时间在这上面,永远是值得的,很快,就会让你体会到那种只需要关注 What(做什么),而不用关注How(如何做)的酸爽。

一个最新的关于Scala的消息是,它似乎也在和Kotlin一样,在加速准备逃离JVM的控制,这对于JVM,恐怕不是一个什么特别好的消息,虽然,其距离用于生产可能还为时尚早。

3、Clojure

图3:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:https://clojure.org/

Clojure是由开发人员Rich Hickey在JVM下,所创建的一种Lisp方言,借助于JVM的执行效率越来越高,Clojure也常被嵌入在Java中,用于编写其中需要高并发、高性能的部分 。

4、Groovy

图4:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:http://www.groovy-lang.org/

Groovy是在Java现有基础上,吸收Python和Ruby等动态语言的特性,而创建的一种新型语言,也是Jenkins持续集成服务器,所直接支持的语言之一,并且最关键的一点,通过基于Groovy的Web开发框架Grails,可以快速的完成相关Web项目的构建 。

在未来,Groovy则拟包含Java和JVM的一些更新的特性,比如如Java 8的lambda语法等。

5、Jython

图5:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:http://www.jython.org/

Jython是JVM的Python实现,与Python的2.x分支兼容,可以动态编译为Java字节码,并且可以与其他JVM语言(特别是Java)自由交互操作。

6、JRuby

图6:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:http://jruby.org

JRuby几乎就是Jython的翻版,所不同的是,JRuby所对标的语言是Ruby,当前所支持的语法规范则和Ruby 2.3兼容。

7、Ceylon :

图7:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:https://www.ceylon-lang.org

这个以大象为Logo的语言,其创建初衷可不是像大象一样笨拙,恰恰相反,语言的创始人 Gavin King,是出于对Java所存在问题的深刻认识,如泛型等特性的复杂性、粗劣的注解语法、不完善的块结构、对 XML 的依赖性等等,才萌生了创建一种新的静态类型语言语言,即Ceylon来一劳永逸的解决这些问题的想法。

Ceylon保留了一些好的 Java 语言特性,改进了语言的可读性和内置的模块性,还吸收了高阶函数等函数语言特性,此外,Ceylon 还融合了 C 和 Smalltalk 的一些特性。与 Java 语言一样,这种新语言也以业务计算为重点,但是它在其他领域也很灵活、很有用。并且,通过这些年的努力,Ceylon已经跨出了其自身跨平台的第一步,其代码已经可以在JVM,Dart VM或Node.js上进行编译或运行。

8、Eta

图8:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:https://eta-lang.org/

我们的名单中怎么能少了时下最能装酷,也是被Node.js的创建者称为觉得暂无能力驾驭的语言Haskell的JVM实现?

它来了,就是Eta,它的优势,不仅仅在于它可以在JVM下执行,更在于它可以使用Haskell的软件包仓库中的软件包,最大程度的兼容了整个Haskell生态系统。

9、Haxe

图9:Java不仅仅是Java:盘点运行在JVM下的其他9种语言

官方站点:http://haxe.org

Haxe的口号是:One Language,Everywhere!是不是有点熟悉?是的,在非常久远的过去,这其实正是Java的初心。

但是,这二者又是如此的迥异。Java的策略是,我做一个平台JVM,给出一种规范,你们来生成我需要的代码;Haxe的策略则正好相反,既然芸芸众生,语言纷杂,每个人都各有偏好,那好,来吧,我可以把我的代码,生成任何一种你们想要的语言下的代码!

多么疯狂的想法!就为这点疯狂,就值得我们每个开发人员去膜拜一番了,毕竟,在Haxe看来,JVM,不过是其可以编译的一个“小”对象而已。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM运行时区域是指JVM运行Java程序时所划分的内存区域,主要分为以下几个部分: 1. 程序计数器:程序计数器是一块较小的内存区域,可以看作是当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器,线程私有。当线程执行Java方法时,程序计数器记录的是正在执行的虚拟机字节码指令地址;当线程执行本地方法时,程序计数器值为空(Undefined)。 2. Java虚拟机栈:Java虚拟机栈也是线程私有的,它的生命周期与线程相同。Java虚拟机栈描述的是Java方法执行的内存模型:每个方法执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完毕的过程,对应着一个栈帧在Java虚拟机栈中从入栈到出栈的过程。 3. 本地方法栈:本地方法栈与Java虚拟机栈类似,只不过它为本地方法服务。也是线程私有的。HotSpot虚拟机将其实现为虚拟机调用Native方法的接口。 4. Java堆:Java堆是Java虚拟机所管理的内存中最大的一块,也是被所有线程共享的一块内存区域,用于存放对象实例。Java堆是垃圾收集器管理的主要区域,因此也被称作“GC堆”。 5. 方法区:方法区也是被所有线程共享的一块内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 6. 运行时常量池:运行时常量池是方法区的一部分,用于存放编译期生成的各字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中。 7. 直接内存:直接内存并不是JVM运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。在JDK1.4中,引入了NIO类,可以使用Java程序直接向操作系统申请一块内存区域,这块内存区域不受JVM管理,也不受Java虚拟机规范的限制,不需要进行垃圾回收。这内存区域称为直接内存,可以提高系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值