虚拟机:虚拟的计算机,一个用来执行虚拟计算机指令的软件。
虚拟机分为系统虚拟机和程序虚拟机。
系统虚拟机:提供一个可运行完整操作系统的软件平台,如 Visual Box、VMware。
程序虚拟机:专门执行单个程序的,典型代表 Java 虚拟机。Java 虚拟机中执行的指令称为 Java 字节码指令。
Java 虚拟机是专门执行 Java 字节码指令的虚拟机。
Java 程序以 Java 虚拟机为中介,运行于各个平台。物理机情况是千差万别的,而 Java 虚拟机在千差万别的物理机上建立了一个统一的运行平台,实现了 Java 程序可以在不同的平台上运行。
Java 虚拟机使得 Java 程序员可以不用关注物理硬件的兼容性,而把精力集中在具体业务逻辑上,只要掌握必要的 Java API、Java 语法以及适当的第三方框架就可以满足日常开发需求。
如果你只是掌握了 Java 语法以及 Java API,虽然可以完成日常编程,但是如果要开发企业级应用或者开发对性能、稳定性和可扩展性要求高的程序,不了解 Java 虚拟机的技术特性和运行原理就不能写出适合虚拟机运行和优化的代码。
相信各位程序员朋友跟我一样,身边存在都这两种人:
第一种:程序设计只关心逻辑功能是否实现,调用现成接口不看具体实现,写代码很少注意性能问题,给人一种混日子摸鱼的感觉。这种人当然就很好的利用的了 Java 虚拟机提供的便利,了解语法和 API 能编程就好了,Java 虚拟机怎么运行怎么优化都不关心。
第二种:在保证功能实现的基础上会列出多种设计,做一个性能最优的选择,编码中也能注意细节,拿到封装好的接口时会去研究下是如何实现的。在我看来这才是一个程序员该有的样子,而 Java 虚拟机也是这种人想要学习和必须学习的。
当然,能够在关注公众号或者网上搜索学习 Java 虚拟机,并点开这篇文章的你一定是第二种人了。那么就来看下如何学习 Java 虚拟机。
接下来我会通过一个系列的文章类系统的讲解 Java 虚拟机,希望大家可以一起学习和探索。系列分为以下几个部分:
以下是本系列文章思路的思维导图:
Java 虚拟机种类有 Hotspot、JRockit、J9...等。
Hotspot 占有绝对的市场地位,无特殊说明本系列文章都是针对 Hotspot 虚拟机。
Java 虚拟机规范包括:虚拟机的内部结构、虚拟机执行的字节码类型和功能、Class 文件结构、类的加载等。
Oracle 官网(https://docs.oracle.com/javase/specs/)上可以看到虚拟机规范: