JVM是什么?稍微有点Java基础的同学都知道JVM就是指Java虚拟机,那么Java虚拟机又是什么呢?很多人对此都是一知半解,没有从根本上弄懂JVM是什么,也没有选择追根问底,完全忽略了过去,这对我们Java学习中期是很不好的,会造成知识空缺,从而影响学习效率。下面我们就来一探究竟,深入了解JVM。
那我们先来看看JVM的定义:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。
为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的。对于 Windows 系统来说,exe 后缀的软件代码最终编译成 Windows 系统能识别的机器码。而 Mac OSX 系统来说,dmg 后缀的软件代码最终编译成 Mac OSX 系统能识别的代码。
系统软件无法通用是一个常见的问题。但使用过 Java 的同学都知道,Java 代码可以在服务端(Linux 系统)运行,也可以在 Windows 系统运行,但我们并没有生成多份不同的代码。所以 Java 语言是如何做到的呢?
与其他语言不同,Java 语言并不直接将代码编译成与系统有关的机器码,而是编译成一种特定的语言规范,这种语言规范我们称之为字节码。无论 Java 程序要在 Windows 系统,还是 Mac OSX 系统,抑或是Linux系统,它首先都得编译成字节码文件,之后才能运行。
但即使编译成字节码文件了,各个系统还是无法明白字节码文件的内容,这时候就需要 Java 虚拟机的帮助了。Java 虚拟机会解析字节码文件的内容,并将其翻译为各操作系统能理解的机器码。
简单地说,对于同样一份 Java源码文件,我们编译成字节码之后,无论是Linux系统还是 Windows 系统都不认识。这时候 Java 虚拟机就是一个翻译官,在 Linux 系统上翻译成 Linux 机器码给 Linux 系统听,在 Windows 系统上翻译成 Windows 机器码给 Windows 系统听。这样一来,Java 就实现了「Write Once,Run Anywhere」的伟大愿景了。
很多初学者关于Java虚拟机有一个误区,他们会觉得Java虚拟机只能运行Java代码。但实际上 Java 虚拟机运行的是字节码文件。换句话说,如果你用 php 语言写一段代码,并自己用特定编译器能生成符合字节码规范的字节码文件,那么 Java 虚拟机也是可以运行的。
所以虽然名字是 Java 虚拟机,但 Java虚拟机与Java语言没有直接关系,它只按照 Java虚拟机规范去读取 Class 文件,并按照规定去解析、执行字节码指令,仅此而已。
到这里,我们似乎觉得已经探听到了JVM的虚实,觉得自己能够对JVM的相关问题运筹帷幄,实际上,Java中有很多JVM的难题非常复杂,即使一些优秀的Java开发者仍然束手无策,所以,我们仍然要在动力节点在线网站免费学习视频课程时保持着谦虚谨慎的态度,在未来的学习中查漏补缺。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54