Java程序運行原理
在Java中引入了虛擬機(JVM,Java Virtual Machine)的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。虛擬機在任何平台上都提供給編譯程序一個的共同的接口。
編譯程序只需要面向虛擬機,生成虛擬機能夠理解的字節碼(ByteCode)(class文件的內容),然后由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行,每一種平台的解釋器是不同的,但是實現的虛擬機是相同的。
Java源程序經過編譯器編譯后變成字節碼,字節碼由虛擬機解釋執行,虛擬機將每一條要執行的字節碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行。
java編譯器 (編譯) → 虛擬機(解釋執行) → 解釋器(翻譯) → 機器碼
Java程序運行過程
從這個框圖很容易大體上了解java程序工作原理。首先,你寫好java代碼,保存到硬盤當中。然后你在命令行中輸入
javac YourClassName.java
此時,你的java代碼就被編譯成字節碼(.class)。如果你是在Eclipse IDE或者其他開發工具中,你保存代碼的時候,開發工具已經幫你完成了上述的編譯工作,因此你可以在對應的目錄下看到class文件。此時的class文件依然是保存在硬盤中。
當你在命令行中運行
java YourClassName
此時,JRE的類加載器從硬盤中讀取class文件,載入到系統分配給JVM的內存區域--運行數據區(Runtime Data Areas)。然后執行引擎解釋或者編譯類文件,轉化成特定CPU的機器碼,CPU執行機器碼,至此完成整個過程。
Java環境變量
【Path】
在JDK的安裝路徑下,我們很容易發現bin文件下的javac、java命令——分別用於執行【編譯】和【解釋】的操作。配置path環境變量便可實現直接找到這兩個命令並運行。
【ClassPath】
而classpath變量,通過后來的學習得知,在jdk1.5以上版本便可以不用配置。首先要知道java源程序通過編譯生成的class文件,默認會存儲到JRE文件下,也就是java運行環境路徑下,在1.5之前的jdk還沒智能到可以自動找到編譯好的類,進行下一步解釋操作,故需要手動配置classpath,指明class文件路徑,在執行java命令形成可執行文件。
【JavaHome】
另一個javahome再單獨運行java程序時是不需要進行配置的,因為編譯、解釋均已通過javac 和java命令完成。但在tomcat、jboss部署時需要配置該環境變量。
JDK、JRE、JVM三者間的關系
JDK(Java Development Kit)是針對Java開發員的產品,是整個Java的核心,包括了Java運行環境JRE、Java工具和Java基礎類庫。Java Runtime Environment(JRE)是運行JAVA程序所必須的環境的集合,包含JVM標准實現及Java核心類庫。JVM是Java Virtual Machine(Java虛擬機)的縮寫,是整個java實現跨平台的最核心的部分,能夠運行以Java語言寫作的軟件程序。
- SE(J2SE),standard edition,標准版,是我們通常用的一個版本,從JDK 5.0開始,改名為Java SE。
- EE(J2EE),enterprise edition,企業版,使用這種JDK開發J2EE應用程序,從JDK 5.0開始,改名為Java EE。
- ME(J2ME),micro edition,主要用於移動設備、嵌入式設備上的java應用程序,從JDK 5.0開始,改名為Java ME。

參考:
