在正式开始深入理解JVM这个专栏之前,我们有必要先了解下什么是JVM,以及JVM与JDK、JRE三者的关系。
我们先观察上图,找到JDK、JRE、JVM的具体位置和包含的范围。
一:从范围上可以得出结论(小结一下):
1:JDK最大,它包含JRE和JVM。
2:JRE属于JDK,比JDK小,但包含JVM,比JVM大。
3:JVM最小。
二:从定义上来理解
现在有这样一个需求,我需要从A地方到达B地方。怎么办?我们可以借助交通工具。
1:假如AB两地相邻很近,小轿车就能很方便的满足我们的需求。
如果把小轿车比作JAVA。小轿车有很多零件组成,(如发动机、轮胎、方向盘、座椅、车窗等等),这些零件就对应Java的
JDK(Java Development Kit),没有这些零件,Java就没办法开发。所以说JDK是整个JAVA的核心。
有了小轿车还不行,还是不能到达目的地,得先让小轿车运行起来。小轿车运行需要一些环境条件(发动机正常启动等),
同样JAVA运行也需要环境,JRE(Java Runtime Environment)就是JAVA运行所必须的环境。发动机就属于JDK.
车也有了,也能运行了,好了,可以出发了。
2:JDK和JRE我明白是什么关系了,可和JVM有什么关系?
接着上面的问题,如果AB两个陆地不同,中间隔着一条河,怎么过?
这个时候小轿车就过不去了,我们需要一艘船。
船也是有很多零件组成,和小轿车一样。(JDK)
船运行也需要一些环境条件:发动机正常启动,方向盘完好等。(JRE)
这时,我们就需要思考,同样的零件(JDK),同样的发动机(JRE),
在陆地上运行我们需要把它们组装成小轿车这样的机器,
在水里上运行我们需要把它们组装成船这样的机器,
在空中运行我们需要把它们组装成飞机这样的机器,
不同的环境,需要不同的机器。JAVA运行也是一样,不管是在Windows环境下还是Linux环境下,JAVA也需要这样的机器,
这个机器就是我们常说的JVM(Java Virtual Machine:Java虚拟机)。
Java虚拟机有了这样的功能,JAVA才有了一次编译,处处运行的强大特性。
(以上观点,纯属个人观点,理解不足的地方还请见谅)