JVM是Java Virtual Machine(Java虚拟机)的缩写。通常咱们在学习java中会用到不少缩写名称,如JRE、JDK、SDK、JAVA SE、JAVA EE、JAVA ME、JAVA FX、还有j2se、j2ee、javaee5,我勒个去!多得很。
有时连支持java的组织都很难搞明白,sun、oracle、openjdk三者的关系都搞不明白,taobao都有它的JVM可想而知,开发这些的组织还不少。因此这里准备写一系列的JAVA家族篇来分清楚,谁? java
这里首先谈一下JVM(Java虚拟机),为何首先谈他呢?
主要是想起原来的一个经理说的,“无论学习什么语言,首先要弄明白它的运行环境”。虽然我如今仍是没有理解到,可能他是linux和嵌入式编程的。这里很少说这句话的意思和对错,反正我没有明白。
用了JAVA两年多了,一直在学框架,一下struts、一下spring、一下Hibernate……我勒个去。他们开始多打着轻量级的口号,如今呢,看看他们下载的目录有多少M。看来他们的目标是要把全部的web开发都编写成框架,学呀学呀。结果呢,,我两不少java的基础都不明白,异常、多线程、网络编程……。因此我准备从新学JAVA,第一个就是JVM。
JVM的定义就很少说,网上有不少专业的定义和解释,我这里就说一下个人理解。
JVM从字面上能够理解成运行java语言的电脑,咱们也许用过VMware来安装个系统,VMware能够虚拟一个裸机,咱们在上面安装一些操做系统。而JVM呢,它难道也是虚拟成一个电脑?若是这么理解也行,,它就像一个没有界面的操做系统。不过这个操做系统不是基于不一样厂商生产的硬件上,而是基于不一样的操做系统(这里的操做系统指windows、linux、ios、UNIX、手机系统等)上。咱们写的java软件运行于JVM这个操做系统上,来调用底层的操做系统。算了本身都被本身弄混了……
都说Java是夸平台的,为何呢?
夸平台,就是夸操做系统舍,不信吧,我写的java程序不能在我手机上运行呀,因此这么能说java程序是夸平台的呢。JVM是支持JAVA运行的虚拟机或理解成操做系统,java除了运行在JVM上应该不能运行在其余的系统上吧,因此JAVA不能夸平台舍。
那JAVA这么实如今不一样的系统上呀,上面说了,JAVA这能运行在JVM上,咱们写一个针对Windows系统的JVM,同理写一个UNIX、IOS、手机的。不一样的操做系统写一个,JVM能够运行在不一样的操做系统上。相似于操做系统运行在不一样的硬件设备上(我想它们也是给不一样的硬件写了个对应的驱动)。呵呵,也许这样咱们能够理解成JVM能在那个系统上运行,java就能够,这样就夸平台了舍。我学术不精,只会Java,因此不清楚其它语言是怎么实现夸平台的? linux
那JAVA如何在JVM上运行,操做电脑呀?
是呀,咱们感受,JAVA程序是能够和真实的电脑互相操做,怎么回事。也许这正是JVM来实现的,JAVA基础中有多态这个定义,其实多态就能够用在此处。好比JAVA程序想接受键盘的输入字符“love”,在windows下接受的方式和UNIX下代码实现不同。这里JVM对应windows写一个接受键盘输入的方法,对应UNIX写一个接受键盘输入的方法。这两个方法的实现的功能都同样,接受输入在返回输入的值,这些两个的编程语言可能不同。他们把方法名称,返回值都定义成同样,那么java程序就直接调用JVM里面的方法就能够实现了。因此java程序在操做电脑的时候实际上是在操做JVM,JVM再去操做电脑。 ios
OK!这里简单的说了一下JVM,其实JVM不是这么简单的,这里只是从定义上说了一下。JVM其实也与操做系统差很少,也有他的独特的内存和调度算法。 web