1. JAVA的運(yùn)行機(jī)制
想要了解Java的運(yùn)行環(huán)境,就得知道Java是如何運(yùn)行的。
計(jì)算機(jī)高級(jí)語言是按程序的執(zhí)行方式分為編譯型和解釋型這兩種。而Java程序運(yùn)行是先進(jìn)行編譯、后解釋的。
1.1 編譯階段
編譯型語言:是使用專門的編譯器,針對(duì)特定的平臺(tái),將高級(jí)語言源代碼一次性的編譯成可被該平臺(tái)硬件執(zhí)行的機(jī)器碼,并包裝成該平臺(tái)所能識(shí)別的可執(zhí)行性程序的格式。
簡單說就是將源代碼編譯成機(jī)器語言的文件,例如exe格式的文件,在運(yùn)行時(shí),直接使用編譯結(jié)果,運(yùn)行exe文件就行。因?yàn)橹灰幾g一次,以后運(yùn)行就不需要編譯了,所以編譯型語言執(zhí)行效率高。
【因?yàn)榫幾g型語言是一次性編譯成特定平臺(tái)的機(jī)器碼,因此編譯生成的可執(zhí)行程序無法移植到其他平臺(tái)上運(yùn)行。如果需要移植,則必須將源代碼復(fù)制到特定平臺(tái)上】
特點(diǎn):
1. 一次性的編譯成平臺(tái)相關(guān)的機(jī)器語言文件,運(yùn)行時(shí)脫離開發(fā)環(huán)境,運(yùn)行效率高
2. 與特定平臺(tái)相關(guān),一般無法移植到其他平臺(tái)
3. 現(xiàn)有的C、C++、Objective、Pascal等都屬于編譯型語言
1.2 解釋階段
解釋型語言是指使用專門的解釋器對(duì)源程序進(jìn)行逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行。是代碼在執(zhí)行時(shí)才被解釋器一行一行動(dòng)態(tài)翻譯和執(zhí)行,而不是在執(zhí)行之前完成翻譯的。
解釋型語言不需要提前翻譯,而是直接解釋成機(jī)器碼并立即運(yùn)行,所以只要某一平臺(tái)提供了相應(yīng)的解釋器即可運(yùn)行該程序。
特點(diǎn):
1. 解釋型語言每次運(yùn)行都需要將源代碼解釋稱機(jī)器碼并執(zhí)行,效率較低;
2. 只要平臺(tái)提供相應(yīng)的解釋器,就可以運(yùn)行源代碼,所以可以方便源程序移植;
3. Python、Ruby等屬于解釋型語言。
1.3 關(guān)于Java語言
Java和其他的語言不太一樣。因?yàn)镴ava編寫的程序需要先經(jīng)過編譯步驟,但這個(gè)編譯過程并不會(huì)生成特定平臺(tái)的機(jī)器碼,而是生成字節(jié)碼文件。這種字節(jié)碼文件是不可執(zhí)行的,必須使用Java解釋器來解釋字節(jié)碼生成機(jī)器碼。所以說Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。
Java程序的執(zhí)行必須經(jīng)過先編譯、后解釋的這兩個(gè)步驟。
Java中負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件的是JVM虛擬機(jī),即JVM(Java Virtual machine)。JVM是可運(yùn)行Java字節(jié)碼文件的虛擬計(jì)算機(jī)。
所有OS平臺(tái)的JVM向編譯器提供相同的編程接口,而編譯器只需要面向JVM,生成虛擬機(jī)能理解的代碼,然后有虛擬機(jī)來解釋執(zhí)行。之后虛擬機(jī)代碼轉(zhuǎn)換成特定系統(tǒng)的機(jī)器碼,然后執(zhí)行。
2.JDK、JRE具體介紹
2.1 JDK:Java開發(fā)環(huán)境包
JDK:Java Development Kit 是Java的標(biāo)準(zhǔn)開發(fā)工具包 。它提供了編譯、運(yùn)行Java程序所需的各種工具和資源,包括Java編譯器、Java運(yùn)行環(huán)境JRE,以及常用的Java基礎(chǔ)類庫等,是整個(gè)JAVA的核心。
(普通用戶只需要安裝 JRE來運(yùn)行 Java 程序。而程序開發(fā)者必須安裝JDK來編譯、調(diào)試程序)
JDK安裝目錄下各個(gè)子文件目錄和文檔作用的詳細(xì)介紹
(1)bin文件夾:存放了JDK的各種工具命令,javac和java就放在這個(gè)目錄
(2)conf文件夾:存放了JDK的相關(guān)配置文件
(3)include文件夾:存放了一些平臺(tái)特定的頭文件
(4)jmods文件夾:存放了JDK的各種模塊
(5)legal文件夾:存放了JDK各模塊的授權(quán)文檔
(6)lib文件夾:存放的是JDK工具命令的一些補(bǔ)充jar包
以下是JDK14的安裝目錄
2.2 JRE:Java運(yùn)行時(shí)環(huán)境
JRE:Java runtime environment 是運(yùn)行Java語言編寫程序,不可缺少的運(yùn)行環(huán)境,用于解釋執(zhí)行Java的字節(jié)碼文件。
JRE中包含了Java virtual machine(JVM),runtime class libraries和Java Application launcher,這些是運(yùn)行Java程序的必要組件。
2.3 JDK、JRE和JVM三者之間的關(guān)系
JDK 包含JRE,JRE包含JVM。