“二哥,之前你讲 Java 的第一行代码 hello world 的时候就提到了 JVM,那时候我就想知道 JVM 到底是什么,但你说这是一块非常大的内容,会放到后面专门来讲,那学完了 Java 基础知识,又学完了并发编程,今天我们就来学习 JVM 吧?”三妹咪了一口麦香可可奶茶后对我说。
“好的,三妹,这篇内容就来带你认识一下什么是 JVM, JVM 是 Java 体系中非常重要,又有一些难度的知识,但每个想要更加优秀的程序员都应该掌握它。尤其是想去大厂或者中厂的球友,更应该掌握它,因为 JVM 在大中厂面试的时候,比重很大,我随便从《Java 面试指南》中截张图大家感受一下。”我回答。
“JVM 在校招面试中的比重还是非常大的;同时,对于工作党来说,如果项目遇到内存泄露、CPU飙升的问题,也需要通过 JVM 的性能监控进行定位和解决。好,那就让我们开始吧!”我继续补充道。
三妹,你看过《Java 发展简史》应该知道,Sun 在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导的,名为“Green”的项目组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。
一开始,项目组打算使用 C++,但 C++ 无法达到跨平台的要求,比如在 Windows 系统下编译的 Hello.exe 无法直接拿到 Linux 环境下执行。
在当时,C++ 已经非常流行了,但无法跨平台,只能忍痛割爱了。
怎么办呢?
三妹不知道有没有听过直译器(解释器)这玩意?(估计你没听过)就是每跑一行代码就生成机器码,然后执行,比如说 Python 和 Ruby 用的就是直译器。
“那在每个操作系统上装一个直译器就好了,跨平台的目的就达到了啊。”三妹插话道。
“但直译器有个缺点,就是没法像编译器那样对一些热点代码进行优化,从而让程序在机器上跑得更快一些。”我回答说。
怎么办呢?
来个结合体呗,编译器和直译器一块上!
编译器负责把 Java 源代码编译成字节码,Java 虚拟机负责把字节码转换成机器码。转换的时候,可以做一些压缩或者优化,通过 JIT 来完成,这样的程序跑起来就快多了。
回复