Java 与 JVM 的简史
Java 和 JVM 是为网络中互连的不同类型的机器而设计
1991年,有一个叫做 Green Team 的团队启动了名为 Green Project 的项目,这个项目的目的就是为了使得在网络中互连的异质机器可以更好地交流,支持互相传输程序。这个项目设计有以下几个要求:
- 消耗更少的内存
- 传输程序
- 跨平台
- 安全
- 支持多线程
最初,Green Team 尝试使用 C++,然而 C++ 不符合 跨平台 的要求:原因在于同样的代码,在不同的环境 (OS 和 architecture) 下编译后得到的机器码是不同的,因此在 A 平台上运行流畅的编译后的程序到 B 平台上就无法运行。
要实现 跨平台,也可以使用解释器 (Interpreter)。通过在不同的环境上安装不同的解释器,就可以实现再不同的环境上使用同一套源代码。然而,这种做法的坏处是程序运行低效 --- 每次运行代码都需要重新解释一遍,速度与运行编译好的代码天差地别。生活处处充满权衡 (trade-off),写代码也一样:
- 编译:执行快、无法实现跨平台
- 解释:执行慢、可以实现跨平台
因此 Green Team 为了解决这个问题,决定把编译和解释融合,先将代码编译成一种仍然支持跨平台的 Java bytecode,这里可以理解为把解释过程中的与平台无关的部分拉到编译阶段完成,然后在各个平台上安装 JVM 来运行 bytecode 解决跨平台的问题。如下图所示:
这么做有带来了以下好处:
- 由于Bytecode 十分精简,解释 Bytecode 速度很快,同时也减小了网络传输代码的开销。
- 运行阶段有 Just-in-time (JIT) compilation 进一步加快运行速度。
然而,由于 Green Project 的产品太过于先进,当时并没有真正投入使用,但这时候互联网开始兴起,整个互联网场景与 Green Project 的设计场景几无二致。Java 和 JVM 的出现,使得人们得意看到动态网页, Java 与 JVM 也因此流行开来。
尽管后来在浏览器端,Java Applets 被 JavaScript 逐渐取代,但万维网和浏览器的出现让 Java 与 JVM 得以存活并流传开来。