众所周知,Java 是一门运行在虚拟机上的语言。虚拟机就是一个虚拟的计算机,是 Java 语言的运行环境,它使得代码与操作系统无关,只和虚拟机有关。这个特性使得 Java 程序员不需要关注不同平台的差异,可以专心书写代码。
Java虚拟机(JVM)有以下核心的知识点:
- 类加载机制
- 内存结构
- 垃圾回收(GC)
其中,类加载机制是 CoreMod 编写的核心内容,我们需要详细了解一个 class 文件是如何加载进内存的,并掌握基本的 class 文件结构与字节码以便对其进行修改。
Java 虚拟机规范(JVMS)并没有对内存结构和垃圾回收进行明确规定,具体操作方式由 Java 虚拟机自行决定,差异较大。
Java语言会经过编译,被翻译成 Java 虚拟机可以识别的字节码。此时 Java 虚拟机会认得这些字节码,并且运行它。字节码就像是其他程序编译完的机器码,都是可以直接运行在机器/虚拟机上的。
一开始,Java 字节码只会在运行时被 Java 虚拟机解释执行,后来 Sun 公司(现已被 Oracle 收购)开发了著名的 Java 虚拟机 Hotspot ,会将热点代码通过即时编译器(JIT)编译成本地机器码并缓存,通过编译执行与解释执行相结合的方式,极大加快了 Java 的运行效率。
由于 Java 的代码通过翻译成字节码来在 Java 虚拟机上运行的,那么我们把其他语言翻译成字节码也就可以在 Java 虚拟机上运行。比如 Scala 、Kotlin 。