JAVA 程序的一生

從本科開始就一直用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



有錯誤歡迎指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章