我们学Java的时候,一开始听到最多的或者最显著的优势就是跨平台性,甚至可以说是Java语言的跨平台性才让Java语言在互联网时代大放异彩,现在成为数一数二的主流语言。
字节码和虚拟机是无关性的基石。
一个Java程序经过编译器将这个程序编译为字节码的文件,然后这个文件就可以在相关的虚拟机上运行,不论这个虚拟机是运行在Windows还是 MacOS还是Linux系统(至少虚拟机的JDK版本号大于等于当前字节码的版本号,在后面的字节码文件的结构的版本号中会讲到)。
请注意:现在的JVM不仅仅只能运行Java语言编写的程序,他也能运行其他语言编写的程序,不过这些编写好的程序要通过相应的编译器编译成字节码文件才能实现跨平台,跨语言。
Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。
JVM会把相应的Class文件,也就是字节码文件翻译成机器码,因为计算机只认识机器码。所以不管你是啥语言写的,只要是他能通过相应的编译器编译成字节码文件,那么他就能在任何装了JVM的平台上运行。
虚拟机的垃圾回收以及各种垃圾回收器在之前的文章中已经介绍过,想查看的可以参考我的这些博文
下面是字节码文件结构的介绍以及虚拟机如何加载运行字节码文件