從本科開始就一直用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
有錯誤歡迎指出。