JVM 技術分享(初級)

一個java程序是怎樣運行起來的:

 

public class Test {
	
	public static void main(String[] args){
		System.out.println("test");
	}
    
}

1.編輯一個Test.java文件 --> javac Test.java 會生成一個Test.class文件-->java Test -->控制檯顯示程序。html

  Javac:Javac是一種編譯器,將一種語言轉換爲另外一種語言規範。編譯器的做用就是將符合java語言規範的源代碼轉化爲JVM虛擬機可以識別的字節碼文件的過程。即將符合java語言規範的源碼轉換爲JVM可識別的二進制碼(原.java文件仍然保留)。java

  Javap,Javac,Javah     :  https://blog.csdn.net/nigelyq/article/details/46379473架構

  

 

javac的實現過程:https://www.cnblogs.com/shuai-server/p/8998021.html工具

java運行過程:https://blog.csdn.net/chengzhang1989/article/details/70216634開發工具

javac的編譯過程:https://blog.csdn.net/u013256816/article/details/50804493  (參考了深刻JVM虛擬機等書籍)spa

Java類到底如何加載並初始化的:https://www.cnblogs.com/jimxz/p/3974939.html操作系統

Java內存模型:http://www.importnew.com/28456.html.net

Java內存機制(淺析):http://www.cnblogs.com/KingIceMou/p/6967129.html翻譯

2.什麼是JVM:代理

java編譯器只要面向JVM,生成JVM能理解的代碼或字節碼文件。Java源文件經編譯成字節碼程序,經過JVM將每一條指令翻譯成不一樣平臺機器碼,經過特定平臺運行。

 

JVM即Java Virtual Machine,是一種計算設備的規範,是虛擬粗來的計算機,是在實際計算機上仿真模擬各計算機功能實現的。Java虛擬機包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域,其屏蔽了具體操做系統相關信息,在執行字節碼時,實際上最終仍是把字節碼解釋成具體平臺上的機器指令執行。

1)JDK(Java Development Kit)是程序開發者用來來編譯、調試java程序用的開發工具包。JDK的工具也是Java程序,也須要JRE才能運行。爲了保持JDK的獨立性和完整性,在JDK的安裝過程當中,JRE也是 安裝的一部分。因此,在JDK的安裝目錄下有一個名爲jre的目錄,用於存放JRE文件。

2)JRE(JavaRuntimeEnvironment,Java運行環境),也就是Java平臺。全部的Java 程序都要在JRE下才能運行。普通用戶只須要運行已開發好的java程序,安裝JRE便可。

3)JVM(JavaVirtualMachine,Java虛擬機)是JRE的一部分。它是一個虛構出來的計算機,是經過在實際的計算機上仿真模擬各類計算機功能來實現的。JVM有本身完善的硬件架構,如處理器、堆棧、寄存器等,還具備相應的指令系統。Java語言最重要的特色就是跨平臺運行。使用JVM就是爲了支持與操做系統無關,實現跨平臺。

3.JVM執行過程:

1) 加載.class文件 2) 管理並分配內存 3) 執行垃圾收集
JRE(java運行時環境)由JVM構造的java程序的運行環,也是Java程序運行的環境,可是他同時一個操做系統的一個應用程序一個進程,所以他也有他本身的運行的生命週期,也有本身的代碼和數據空間。JVM在整個jdk中處於最底層,負責於操做系統的交互,用來屏蔽操做系統環境,提供一個完整的Java運行環境,所以也就虛擬計算機。操做系統裝入JVM是經過jdk中Java.exe來完成,經過下面4步來完成JVM環境:1) 建立JVM裝載環境和配置 2) 裝載JVM.dll 3) 初始化JVM.dll並掛界到JNIENV(JNI調用接口)實例4) 調用JNIEnv實例裝載並處理class類。
 
4.JVM體系結構:

 

  • 類裝載器(ClassLoader)(用來裝載.class文件)
  • 執行引擎(執行字節碼,或者執行本地方法)
  • 運行時數據區(方法區、堆、java棧、PC寄存器、本地方法棧

 自此引出類加載機制: http://www.importnew.com/25295.html

 類加載器及JVM內存結構:http://www.cnblogs.com/KingIceMou/p/6967713.html

 Java動態代理:https://www.cnblogs.com/gonjan-blog/p/6685611.html 

 

相關文章
相關標籤/搜索