1.3 Java虚拟机

在这个程序复杂的编程语言时代,很多人大谈特谈Java语言,殊不知JVM(Java虚拟机缩写)才是Java生态的核心。JVM是一个优秀的VM环境,在这个基础上诞生了很多优秀的编程语言(如Groovy、Scala和Kotlin等),它们都声称要“变革Java”,Kotlin就是其中的一个。

在设计之初,JVM只是为了支持Java编程,然而,随着时间的推移,越来越多的语言开始运行在JVM之上。在最新的JVM语系排名中(Java除外),Kotlin的市场份额仅次于Groovy和Scala,再加上近年来Google对Kotlin的大力推动,Kotlin的发展潜力势必不可小觑,如图1-3所示。

图1-3 JVM语系使用率占比

下面简要介绍JVM语言家族的几个明星语言,为大家学习Kotlin提供一些参考。

1.Groovy

作为一款基于JVM开发的敏捷语言,Groovy结合了Python、Smalltalk和Ruby等语言的强大特性,同时Groovy代码能够与Java代码实现很好的融合。由于它运行在JVM之上,因此Groovy还可以使用其他JVM语系语言编写的库。

2.Scala

Scala是一门多范式的静态类型编程语言,它混合了面向对象编程(OOP)和函数式编程(FP)的诸多特点。这意味着Scala程序能够被编写成许多不同的风格:纯函数式风格、非纯函数式风格或混合式风格。同时,使用Scala编写的代码可以编译成Java字节码,方便运行于JVM之上,并可以调用现有的Java类库。

3.Kotlin

Kotlin是由JetBrains团队开发的静态类型编程语言,作为JVM语系的重要成员,Kotlin除了可以运行在JVM环境上之外,还可以绕过JVM直接编译成机器码供系统运行。与其他语言相比,Kotlin借鉴了很多Java的语法规则和思想,对于熟悉Java环境的开发者来说是非常容易上手的。JetBrains推荐以循序渐进的方式来开发项目,这就意味着允许项目中同时存在Java和Kotlin代码文件,而且允许Java和Kotlin之间的互调。这使得Java开发者可以很方便地在已有项目中引入Kotlin,从而循序渐进地完成Java向Kotlin的过渡。

Kotlin是一门依赖Java虚拟机运行的计算机语言,因此初学者有必要了解一下Java虚拟机的知识及其运作原理。

Java应用程序能够跨平台运行,主要是通过Java虚拟机实现的。如图1-4所示,不同软硬件平台的Java虚拟机是不同的,Java虚拟机向下是不同的操作系统和CPU硬件,使用或开发时需要下载不同的JRE或JDK版本;Java虚拟机向上是Java应用程序,Java虚拟机屏蔽了不同软硬件平台,Java应用程序不需要作出任何修改,也不需要重新编译就可以直接在其他平台上运行。

图1-4 Java虚拟机模型

想要了解Kotlin应用程序的运行过程,需要先了解Java应用程序的运行过程。

对于Java应用程序而言,首先由Java编译器将Java源文件(.java文件)编译成为字节码文件(.class文件),这个过程可以通过JDK提供的javac命令来完成;当需要运行Java字节码文件时,由Java虚拟机中的解释器将字节码解释成为机器码后执行,这个过程通常由JRE提供的Java命令行来完成,如图1-5所示。

图1-5 Java应用程序执行过程

与Java程序的运行过程类似,Kotlin应用程序的运行过程如图1-6所示。首先由Kotlin编译器将Kotlin源文件编译成为字节码文件(* Kt.class文件),注意,这个过程中文件名会发生变化,会增加Kt后缀。编译过程可以通过Kotlin编译器提供的kotlinc命令来完成。当运行Kotlin字节码文件时,由Java解释器将字节码解释成为机器码去执行,这个过程也是通过Java命令完成的,但需要Kotlin运行时库支持才能正常运行。

图1-6 Kotlin应用程序执行过程