从 Java 到 Kotlin:全面理解现代 JVM 语言生态
2026/7/30 4:12:29 网站建设 项目流程

从 Java 到 Kotlin:全面理解现代 JVM 语言生态

如果你准备成为 Java/Kotlin/KMP 开发工程师,那么理解 JVM 比学习某一门语言更重要。

很多初学者认为:

Java = JVM

其实这是错误的。

真正的关系应该是:

Java │ │ Kotlin ───── JVM ───── Scala │ Groovy │ Clojure

JVM 才是真正的核心。

Java 只是第一门运行在 JVM 上的语言。


一、什么是 JVM?

JVM(Java Virtual Machine)

中文:

Java 虚拟机

很多人看到"虚拟机"三个字,就想到 VMware、VirtualBox。

其实完全不是一个东西。

VMware 是:

Windows ↓ VMware ↓ Ubuntu

它模拟了一台计算机。

而 JVM 是:

Windows Linux macOS ↓ JVM ↓ Java程序

它不是模拟计算机。

而是:

模拟 Java 程序运行环境。


JVM 到底干什么?

假设写一个 Java 程序:

public class Main { public static void main(String[] args) { System.out.println("Hello"); } }

执行过程:

Java源码 │ javac 编译 │ Main.class │ JVM加载 │ CPU执行

注意:

CPU 根本不认识 Java。

CPU 认识的是:

010101010101

机器指令。

所以:

JVM 的职责就是:

Java ↓ Bytecode ↓ 机器码 ↓ CPU

二、为什么 Java 能跨平台?

这是 Java 最伟大的设计。

看看 C++:

Windows:

C++ ↓ Windows.exe

Linux:

C++ ↓ Linux ELF

必须重新编译。

而 Java:

Java ↓ Main.class ↓ Windows JVM

Linux:

Java ↓ Main.class ↓ Linux JVM

mac:

Java ↓ Main.class ↓ mac JVM

所以:

Java 编译一次即可。

真正变化的是:

不同平台的 JVM。

这就是:

Write Once Run Anywhere


三、什么叫 Bytecode(字节码)?

很多人不知道:

Java 编译以后:

不是机器码。

而是:

.class

里面保存的是:

Bytecode

例如:

Java:

int a = 1; int b = 2; System.out.println(a+b);

反编译以后:

iconst_1 istore_1 iconst_2 istore_2 iadd invokevirtual

这些:

CPU 根本不认识。

JVM 认识。

所以:

Java ↓ Bytecode ↓ JVM解释 ↓ 机器码

四、JVM 为什么这么快?

很多人觉得:

虚拟机一定慢。

实际上:

现代 JVM 非常快。

原因就是:

JIT

Just In Time Compiler

第一次执行:

Java ↓ 解释执行

第二次:

JVM发现:

这个方法调用了10000次。

于是:

Bytecode ↓ 直接编译成机器码 ↓ 缓存起来

以后:

直接运行。

不用解释。

所以:

Java 很多时候:

性能接近 C++。


五、既然 JVM 这么厉害……

大家开始想:

为什么只有 Java 能运行?

于是:

各种语言开始:

自己的语法 ↓ 编译成.class ↓ JVM

所以:

JVM 不属于 Java。

Java 属于 JVM。


六、现代 JVM 语言的发展历史

第一代

只有:

Java

时间:

1995

作者:

James Gosling。

目标:

替代 C++。


第二代

大家开始开发:

Groovy Scala

希望:

比 Java 更简洁。

但是:

Java 当时仍然:

public static void main getter setter new 泛型

写起来很长。


第三代

Google:

推出 Android。

Java:

开始暴露一些问题。

Google:

希望:

更少代码 更安全 空指针更少

于是:

Kotlin 出现。

2017:

Google:

宣布:

Kotlin First

之后:

Android 基本全部推荐 Kotlin。


七、现代 JVM 语言有哪些?

Java

定位:

企业级开发。

特点:

成熟 稳定 工作最多

典型:

Spring Boot。


Kotlin

定位:

现代 JVM。

特点:

Null Safety Coroutine DSL Extension Function Data Class

几乎:

每一项:

都是 Java 后来才补上的。


Scala

定位:

函数式。

最有名:

Spark。

几乎:

所有大数据:

Spark Akka Play

都是 Scala。


Groovy

定位:

脚本。

例如:

Jenkins Pipeline:

pipeline { }

CI/CD 必学。


Clojure

定位:

Lisp。

函数式。

Immutable。

国内很少。

国外不少创业公司喜欢。


八、为什么 Kotlin 会成功?

其实:

Java 最大问题:

不是性能。

而是:

代码太长。

例如:

Java:

public class User { private String name; public User(String name){ this.name=name; } }

Kotlin:

data class User( val name:String )

一句。

结束。


Null Safety

Java:

String name = null; name.length();

运行:

NullPointerException

Kotlin:

var name:String?=null

编译器:

直接报错。

因此:

大量减少:

线上 Bug。


Extension Function

Java:

不能:

给 String 增加方法。

Kotlin:

fun String.hello(){ }

以后:

"abc".hello()

直接能用。

非常优雅。


Coroutine

Java:

线程:

Thread Future CompletableFuture

越来越复杂。

Kotlin:

launch{ }

即可。


九、现代 JVM 技术栈

现在企业真正开发:

已经不是:

Java。

而是:

Java + Spring + MySQL + Redis + MQ + Docker + Kubernetes + JVM

如果 Android:

Kotlin + Compose + Coroutine + Flow + KMP

如果:

大数据:

Scala + Spark + Kafka + Flink

十、JVM 的核心组成

很多人学 Java 很久,都不知道 JVM 内部长什么样。

实际上,一个 Java 程序启动后,大致经历下面几个阶段:

Java Source (.java) │ javac 编译 │ Bytecode (.class) │ ClassLoader(类加载器) │ ┌───────────────┴───────────────┐ │ │ Runtime Data Area(运行时数据区) Execution Engine(执行引擎) │ │ 方法区、堆、Java 栈、本地方法栈、PC 解释器 + JIT 编译器 │ │ └───────────────┬───────────────┘ │ Garbage Collector(GC) │ CPU

其中最重要的几个模块是:

1. ClassLoader(类加载器)

负责把.class文件加载到内存。

Java 的"热部署"、SPI、插件化等能力,都依赖类加载机制。

常见的类加载器有:

  • Bootstrap ClassLoader(启动类加载器)

  • Platform ClassLoader(平台类加载器)

  • Application ClassLoader(应用类加载器)

并遵循著名的双亲委派模型(Parent Delegation Model)


2. Runtime Data Area(运行时数据区)

JVM 会把程序运行需要的数据放到不同区域。

主要包括:

  • Heap(堆):存放对象实例,是垃圾回收的主要区域。

  • Java Stack(虚拟机栈):每个线程私有,保存方法调用、局部变量等。

  • Method Area(方法区):保存类信息、常量池、静态变量等。

  • Program Counter(程序计数器):记录线程下一条执行指令的位置。

  • Native Method Stack(本地方法栈):执行 JNI 本地方法时使用。


3. Execution Engine(执行引擎)

负责真正执行字节码。

它包含:

  • Interpreter(解释器):逐条解释执行字节码,启动速度快。

  • JIT Compiler(即时编译器):把热点代码编译成本地机器码,提高运行效率。

这也是 Java 能兼顾跨平台和高性能的重要原因。


4. Garbage Collector(垃圾回收器)

Java 开发者通常不用手动释放内存,因为 JVM 会自动回收不再使用的对象。

常见 GC 包括:

  • Serial GC

  • Parallel GC

  • G1 GC(目前最常见)

  • ZGC(超低延迟)

  • Shenandoah(低停顿)

理解 GC 对排查内存泄漏、性能优化非常重要。


十一、为什么说 JVM 比语言更重要?

很多开发者会从 Java 转到 Kotlin,或者从 Kotlin 转到 Scala。

但他们几乎不用重新学习:

  • 内存管理

  • 垃圾回收

  • 类加载

  • 字节码

  • 并发模型(部分)

  • JIT 编译

  • JVM 调优

因为这些能力都来自JVM,而不是具体的语言。

这也是为什么很多企业招聘写着:

Java/Kotlin 开发工程师(熟悉 JVM 原理)

真正考察的,往往不是语法,而是对 JVM 底层机制的理解。


十二、总结

现代 JVM 生态已经从"只有 Java"发展为一个庞大的平台:

JVM │ ┌───────────┬───────────┬───────────┐ │ │ │ │ Java Kotlin Scala Groovy │ │ │ │ Spring Boot Android Spark Jenkins │ │ │ │ └───────────┴───────────┴───────────┘ │ GC / JIT / 类加载 / 字节码 │ Windows · Linux · macOS · Server

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询