- Java程序設(shè)計(jì)與實(shí)踐教程(第2版)
- 楊麗萍 王薇 張焱焱主編 北京云班科技有限公司副主編
- 764字
- 2019-07-01 11:10:45
1.3 Java的運(yùn)行機(jī)制及JVM
計(jì)算機(jī)高級(jí)語(yǔ)言類型主要有編譯型和解釋型兩種,Java是兩種類型的集合,在Java中,處理代碼的過(guò)程如圖1-2所示。

圖1-2 Java程序代碼處理過(guò)程
從圖1-2可以看出,Java程序在計(jì)算機(jī)中執(zhí)行要經(jīng)歷以下幾個(gè)階段:
(1)使用文字編輯軟件(如記事本、寫(xiě)字板、UltraEdit等)或集成開(kāi)發(fā)環(huán)境(JCreater、Eclipse、MyEclipse等)編輯Java源文件,其文件擴(kuò)展名為.java。
(2)通過(guò)編譯使.java文件生成一個(gè)同名的.class文件。
(3)通過(guò)解釋方式將.class的字節(jié)碼文件轉(zhuǎn)變?yōu)橛?和1組成的二進(jìn)制指令并執(zhí)行。
在以上階段中可以看出,Java程序的執(zhí)行包括了編譯和解釋兩種方式。Java程序執(zhí)行的具體過(guò)程如圖1-3所示。

圖1-3 Java程序的執(zhí)行過(guò)程
知識(shí)提示 因?yàn)樵赪eb應(yīng)用中JSP文件是需要轉(zhuǎn)換成Servlet的,這個(gè)Servlet文件還需要編譯成可以在JRE上執(zhí)行的.class文件,因此在Java虛擬機(jī)中要有即時(shí)編譯器。
Java的.class文件是在Java虛擬機(jī)(Java Virtual Machine, JVM)上運(yùn)行的。JVM是在一臺(tái)計(jì)算機(jī)上由軟件或硬件模擬的計(jì)算機(jī),JVM可以實(shí)現(xiàn)Java程序的跨平臺(tái)運(yùn)行,即運(yùn)行的操作平臺(tái)各不相同。有JVM的存在,就可以將Java的.class文件轉(zhuǎn)換為面向各個(gè)操作系統(tǒng)的程序,再由Java解釋器執(zhí)行。這就如同有一個(gè)中國(guó)富商,他同時(shí)要和美國(guó)、韓國(guó)、俄羅斯、日本、法國(guó)、德國(guó)等幾個(gè)國(guó)家洽談生意,可是他不懂這些國(guó)家的語(yǔ)言,因此他針對(duì)每個(gè)國(guó)家請(qǐng)了一個(gè)翻譯,他說(shuō)的話就只對(duì)翻譯說(shuō),不同的翻譯會(huì)將他說(shuō)的話翻譯給不同國(guó)家的客戶,這樣富商只需要說(shuō)一句話給翻譯,那么就可以同幾個(gè)國(guó)家的客戶溝通了??梢?jiàn)Java虛擬機(jī)(JVM)的作用是讀取并處理經(jīng)編譯過(guò)的、與平臺(tái)無(wú)關(guān)的字節(jié)碼.class文件;而Java解釋器負(fù)責(zé)將Java虛擬機(jī)的代碼在特定的平臺(tái)上運(yùn)行。JVM的基本原理如圖1-4所示。

圖1-4 JVM基本原理
從圖1-4可以發(fā)現(xiàn),所有的.class文件都是在JVM上運(yùn)行的,即.class文件只需要認(rèn)識(shí)JVM,由JVM再去適應(yīng)各個(gè)操作系統(tǒng)。如果不同的操作系統(tǒng)安裝上符合其類型的JVM,那么以后.class文件無(wú)論到哪個(gè)操作系統(tǒng)上都是可以正確執(zhí)行的。
- 流量的秘密:Google Analytics網(wǎng)站分析與優(yōu)化技巧(第2版)
- Mastering ServiceStack
- 深入淺出WPF
- Spring Cloud、Nginx高并發(fā)核心編程
- Mastering Swift 2
- Full-Stack React Projects
- Spring Boot企業(yè)級(jí)項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)
- Apache Kafka Quick Start Guide
- Mastering Adobe Captivate 7
- Spring Boot從入門到實(shí)戰(zhàn)
- SFML Game Development
- 透視C#核心技術(shù):系統(tǒng)架構(gòu)及移動(dòng)端開(kāi)發(fā)
- Raspberry Pi Robotic Projects
- Flutter for Beginners
- Python數(shù)據(jù)科學(xué)實(shí)戰(zhàn)