当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-什么是JVM吗?它是如何工作的?

金三银四精选java面试题-什么是JVM吗?它是如何工作的?

来源:图灵教育
时间:2024-01-07 10:13:22
 

什么是JVM吗?它是如何工作的?

我们都知道在Windows系统里面一个软件安装包是exe文件对吧。但是在MacOS里面exe文件是不能够安装的,只能安装dmg后缀的安装包。同样的Mac系统里的安装包在Windows里面是无法安装的。

那为什么不同的操作系统之间,软件不能互用呢?这是因为他们之间操作系统的底层实现是不一样的,它们之间形成的机器码不能互用。但是我们学过Java的同学应该都知道,我只要打成了Jar之后,不论是在Windows、MacOS还是在Windows下都可以执行对吧。

那Java是怎么做到的呢?这个大功臣就是我们的JVM了。与其他语言不同,Java代码编译之后并不是直接编译成机器码,而是编译成只有JVM才能识别的一种字节码。不论Java程序在那个环境运行。只要JVM能装,Java程序就可以直接运行。

JVM承担的就是一个翻译工作,动态的将Java代码编译成操作系统可以识别的机器码。这样一来,Java就实现了「Write Once,Run Anywhere」的伟大愿景了。

一次编译、处处运行「Write Once,Run Anywhere」

很多同学会有一个疑惑,就像当年的C语言或者说如今的Go语言,打包成各个平台的软件包也不是一件很麻烦的事情。我总不至于为了这一个特性就直接切换到Java语言吧。这句话实际上也只是一句口号,直到如今Java程序跑在不同的平台上也会遇到不同的一些问题。Java能火起来实际上包含了很多的因素,比如语法简单容易入门、生态开放性、语言本身的扩展性、稳定性还有一些运气的成分等等,跨平台只是其中的一个小点而已。

很多初学者对于JVM也会存在一个误区,觉得只有Java语言才能运行在JVM上。但实际上Java虚拟机运行的是字节码文件。换句话说你如果写一段JavaScript代码,只要能通过编译器编译成字节码文件,那Java虚拟机也能够运行。这也不是开玩笑,现在Java虚拟机确实可以运行JS代码了。虽然名字是Java虚拟机但是和Java语言并没有什么强关联。它只是按照Java虚拟机规范去读取Class文件解析执行,仅此而已了~

如果你对JVM足够了解足够深入,你完全可以自己写一门语言,只要能编译成规范的字节码就运行在JVM虚拟机之上了。这种语言也有很多比如Scala、kotlin等等都是同一个思路。