JVM是什么
剛?cè)腴T的時(shí)候老師教我們寫代碼是這樣的:
?
寫JAVA文件然后用javac命令編譯成class文件運(yùn)行即可。
?
隨著學(xué)習(xí)的不斷拓展和工作中業(yè)務(wù)代碼的積累,對(duì)于“為什么會(huì)這樣”的困惑越來越多,于是寫了這篇博客~。
計(jì)算機(jī)能看懂的是二進(jìn)制,也就是0和1。那么我們的JAVA程序和計(jì)算機(jī)又有什么關(guān)聯(lián)呢?他們是怎么聯(lián)系到一起的?
匯編語(yǔ)言
計(jì)算機(jī)只能識(shí)別0和1,人們發(fā)現(xiàn)利用0和1可以做很多事情:
?
比如可以做加法,由此減乘法除法(利用的也是加法)也可以做到;與,或,異或等這些構(gòu)成了與門,非門等這些邏輯門;......在這上面進(jìn)行擴(kuò)展又可以做很多事情。
?
但是編寫0和1太過于麻煩,這個(gè)時(shí)候出現(xiàn)了助記符也就是用一個(gè)英文代表一串01的數(shù)字,也就是匯編語(yǔ)言。
高級(jí)語(yǔ)言
對(duì)于開發(fā)者來說,用匯編寫代碼不太現(xiàn)實(shí),一個(gè)簡(jiǎn)單的操作要用很多行匯編代碼才能實(shí)現(xiàn),所以再它之上做了處理,比如java,c,等等高級(jí)語(yǔ)言。那么計(jì)算機(jī)怎么識(shí)別高級(jí)語(yǔ)言的呢?
虛擬機(jī)是什么
答案是虛擬機(jī),虛擬機(jī)可以理解為虛擬計(jì)算機(jī),虛擬計(jì)算機(jī)通過解釋器將其認(rèn)識(shí)的指令解釋為計(jì)算機(jī)認(rèn)識(shí)的指令。JVM中只通過解釋器來解釋運(yùn)行效率太慢,所以對(duì)于熱點(diǎn)代碼即反復(fù)執(zhí)行的代碼通過JIT即時(shí)編譯器將其編譯為本地代碼。這個(gè)編譯器叫做后端編譯器。
?
JVM流行的一點(diǎn)原因是其跨平臺(tái)性:一次編譯,多端運(yùn)行
怎么實(shí)現(xiàn)的大家也大概猜到了,JVM虛擬機(jī)識(shí)別操作系統(tǒng)將class字節(jié)碼轉(zhuǎn)換為不同操作系統(tǒng)可以識(shí)別的指令。
?
java代碼如何轉(zhuǎn)換成機(jī)器識(shí)別的代碼
我們寫代碼的時(shí)候通過編寫JAVA文件,通過javac命令編譯成class文件,用java命令運(yùn)行class文件。
拆分:一,也就是javac命令將java代碼編譯成為java字節(jié)碼也就是class文件,這個(gè)編譯器叫做前端編譯器。編譯后的class文件由0和1構(gòu)成,這其實(shí)是java字節(jié)碼的結(jié)構(gòu)。
二,通過類加載器ClassLoader的加載,鏈接,初始化后將其轉(zhuǎn)換為JVM內(nèi)存中的數(shù)據(jù)。我們要想看到class字節(jié)碼結(jié)構(gòu)是什么樣的,可以通過反編譯class文件,講解JAVA字節(jié)碼文件將在后面博客中詳細(xì)介紹。
三,執(zhí)行引擎將高級(jí)語(yǔ)言翻譯為機(jī)器語(yǔ)言即計(jì)算機(jī)能夠識(shí)別的語(yǔ)言。
總結(jié):前端編譯器將Java文件轉(zhuǎn)換為字節(jié)碼class文件,通過類加載器ClassLoader的加載,鏈接,初始化這三步加載到內(nèi)存中,JVM識(shí)別字節(jié)碼文件將數(shù)據(jù)放到對(duì)應(yīng)的內(nèi)存結(jié)構(gòu)中,但是機(jī)器不認(rèn)識(shí)這些字節(jié)碼文件,所以執(zhí)行引擎又進(jìn)行了編譯轉(zhuǎn)化為計(jì)算機(jī)能夠識(shí)別的指令【后端編譯器】,其充當(dāng)了轉(zhuǎn)換字節(jié)碼的任務(wù)(通過解釋器解釋運(yùn)行,但是由于效率低,所以對(duì)于熱點(diǎn)代碼通過JIT即時(shí)編譯器編譯成本地代碼)
最后來張圖:圖中運(yùn)行時(shí)數(shù)據(jù)區(qū)為JVM內(nèi)存結(jié)構(gòu)中的,下一篇博客進(jìn)行講解~。
在這里插入圖片描述
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
805瀏覽量
42248 -
JAVA
+關(guān)注
關(guān)注
20文章
2988瀏覽量
108504 -
Class
+關(guān)注
關(guān)注
0文章
53瀏覽量
20058 -
JVM
+關(guān)注
關(guān)注
0文章
160瀏覽量
12567
發(fā)布評(píng)論請(qǐng)先 登錄
Jvm的整體結(jié)構(gòu)和特點(diǎn)
電機(jī)的本質(zhì)運(yùn)行原理是什么
Jvm工作原理學(xué)習(xí)筆記
用JMX連接本地JVM上運(yùn)行的Java程序
Java程序是如何運(yùn)行的
Java:JVM虛擬機(jī)的入門知識(shí)

評(píng)論