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