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