vlambda博客
学习文章列表

给老婆解释什么是JVM虚拟机,她说我能力不行!【#002】

什么是虚拟机?

昨天早上,老婆忽然问我:

什么是虚拟机啊?

这属于我的专业领域,信手拈来啊。

我说:

虚拟机是编程语言为了屏蔽不同操作系统的差异,而创建的一套指令系统和执行环境。以Java代码为例,Java代码实际上是运行在Java虚拟机上的,代码不用关心底层操作系统是什么,只要符合虚拟机的规范就行了。

否则同一个软件,我们可能需要为Windows写一套,再为Mac写一套。因为不同操作系统的的指令系统是不同的。

为了应对不同操作系统的差异,每个操作系统上的虚拟机是不同的。有专门给Mac用的虚拟机,有专门给Windows用的虚拟机。比如Windows的虚拟机可以把Java的程序转移成符合Windows的指令系统。Mac可以把程序转成符合Mac的指令系统。

她想了几秒钟,说:

不懂!

然后我举了一个例子:

假设我们运输一种精密的仪器。有大小不同的卡车来运输。

为了方便在不同的车上运输,我们需要给不同卡车安装上一种卡槽,我们的仪器可以正好放置在这些卡槽中。

但为了适应不同的卡车,这些卡槽的另外一面需要和卡车的大小所适应。

这些卡槽就相当于编程语言中的虚拟机。

她若有所思的样子,然后说:

还是不懂。

我又说:

假设有一家贷款公司,它可以从很多银行帮助客户贷款,不管是哪家银行,它给客户提供的服务都是标准化的。

为了实现这个目的,它在每家银行都有一个代表,比如中国银行有个代表,招商银行有个代表。

这些代表一方面要给客户提供标准的流程,另一方面要处理具体的银行流程。中国银行和招商银行的贷款流程是不同的。

这些代表就相当于虚拟机,因为他们的存在才可以给外部客户提供标准化的服务。他们对客户屏蔽了不同银行的差异。

然后她说:

明白了,这么简单的概念被你说那么复杂。表达能力不行!

我表达能力差吗?

我表达能力差不差,根本不需要去追究,不需要去证明,这不重要。

重要的是确实没让对方很轻松的明白,所以肯定可以从中去总结和学习。

之所以开始没能说清楚,主要有两个原因:

  • 一次性说了太多要点。一下子接受不了。我第一段话涵盖了好几个要点:什么是虚拟机,虚拟机的作用,虚拟机在不同操作系统中的差异性等等。
  • 尽量用别人熟悉的场景去举例。我举卡车的例子是受到Docker的启发,但是她根本不知道Docker。但是贷款流程还是熟悉的。所以改成贷款的例子后,就理解了。

说实话,就算现在,我感觉也没能很好地说清楚什么是虚拟机。

今天是一个春天的星期天,杭州忽然变得像冬天一样。

早上6点半想起来去跑步,但是感觉浑身懒洋洋的不想动,很没有动力。但是劝自己说:

慢点也没关系,半跑半走也行。 然后还是去跑了。在毛毛雨中跑了几公里,感觉还是挺不错的。

吃完早饭,去剪头发。有点担心师傅会给我剪的很短,但又觉得应该没事,所以没说什么。

在剪的过程中,看着感觉有点短了,但是觉得已经这样了,还是没说什么。

于是最后就真的很短。这种情况在我生活中经常会有。是不是说明我是一个十足的社恐患者?

能劝自己去跑步,为什么不能及早说出不要把头发剪得太短呢?下次一定!

最后祝大家周日快乐!