JAVA 程式的一生

殷老實發表於2016-10-06

從本科開始就一直用Java, 但是基本上只是使用IDE比如eclipse 進行敲程式碼而已, 然後編譯、執行,程式跑通就行,但是隨著學習的深入 ( 雖然還是很渣), 慢慢的想知道我們點選 編譯、執行的時候,系統內部到底做了什麼,今天我們就來看看是什麼魔力讓我們寫的java 原始碼 有了生命。


首先來了解下一些基本的概念。


JAR: jar 包, Java Archive, 就是對一些文字、影象等資源、.class 檔案等的整合壓縮包,用來給我們的Java 程式提供支援的檔案。

JRE: Java Runtime Environment, 就是java程式的執行環境,包括JVM (java 虛擬機器) + JARs + 其他檔案。如下圖

                                        

JDK: Java Development Kit, 就是Java 開發組建等。 包含 JRE 和 Compiler + Debugger等. 

                           



JVM : Java Virtual Machine.  對於JVM的每個元件。

         1. ClassLoader: 1). 裝載 .class 檔案到記憶體中 2). 核實byte code 的操作這就是為什麼說,java 程式相對安全,因為在裝載byte code到記憶體中時,classloader的verifier會核實下這個code中有沒有什麼指令能對我們的系統產生傷害。3). 為程式分配記憶體.

         2. Run time data area: JVM 執行程式時所使用的記憶體區域。

               2.1 Method area: 儲存class 程式碼和 method 程式碼

               2.2 Heap: 物件在Heap(堆)中被建立

               2.3 Java Stacks: 用來執行java 方法的frame. 方法在這裡執行

               2.4 Program counter registers: 用來存放指令的記憶體地址

               2.5 Native Method Stacks: 用來執行 native language method 的地方. 

                                                         native language:  不需要轉換和解釋,能直接在機器上執行的語言比如C

                                                                      Managed language: 必須被轉換和解釋才能執行的語言比如Java

                                                                      Dynamic language: python.

           3. Native method interface: 是native method的介面, 用來連線native language libraries 和 JVM

         4. Native method library: 儲存native language 的libraries的資訊

         5. Execution Engine: 包含 直譯器 和 JIT 編譯器 - 轉換byte code 到 machine code。 


以上是瞭解java 程式開發與執行的知識儲備。



Java Source Code< .java file> --------  Compiler -------> Java Byte Code< .class file> --------- JVM -------  在JVM中由JIT Compiler 將Java Byte Code 轉換成Machine Code然後執行 --------> result



有錯誤歡迎指出。

相關文章