Java源文件的编译、下载、解释和执行
生活随笔
收集整理的這篇文章主要介紹了
Java源文件的编译、下载、解释和执行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Java源文件的編譯、下載、解釋和執行
1. 執行java程序的步驟:
Java源文件(程序員編寫的*.java文件),使用javac編譯生成*.class文件(字節碼文件),然后使用java解釋執行生成特定平臺的機器碼。2.java解釋執行過程分為代碼的裝入、代碼的校驗、代碼的執行
2.1 代碼的裝入:由類加載器(class loader)完成。
類加載器負責加載運行一個程序所需要的所有代碼,包括繼承的類和被其調用的類。該類被放在自己的名字空間里,除了通過符號引用自己名字空間以外的類,類之間是沒有辦法可以相互影響。在本機上的所有類都在同一地址空間內,所有從外部引進來的類都有一個自己獨立的名字空間。這使得本地類可通過共享相同的名字空間而獲得較高的運行效率,同時又保證它們與從外部引進類不會相互影響。當裝入了運行程序需要的所有類后,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用而同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內存布局,Java很好地解決了由超類(父類)改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。2.2 代碼的校驗:校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。通過了校驗后,代碼便可開始執行了。
2.3 代碼的執行:即時編譯、解釋執行兩種方式
即時編譯:解釋器先將字節碼編譯成機器碼,然后再執行該機器碼。解釋執行:解釋器通過每次解釋并執行一小段代碼來完成java字節碼的所有操作。由于JVM規格描述具有足夠的靈活性,這使得將字節碼翻譯為機器碼的工作具有較高的效率。對于運行速度要求較高的應用程序,解釋器可將java字節碼即時編譯為機器碼,從而保證了java代碼的可移植性和高性能。二、JVM規格描述
JVM定義了,控制Java代碼解釋執行和具體實現的五種規格,它們是: JVM指令系統,JVM寄存器,JVM棧結構,JVM碎片回收堆,JVM存儲區。
1. JVM指令系統:
2.JVM寄存器:
寄存器是內存的最頂端,也是系統獲取操作資料的最快途徑。它是中央處理器的組成部分,是存儲容量有限高速存儲部件。寄存器可用來暫存指令、數據和地址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,存器有累加器(ACC)。寄存器的基本單元是 D觸發器,按照其用途分為基本寄存器和移位寄存器。基本寄存器是由 D觸發器組成,在 CP 脈沖作用下,每個 D觸發器能夠寄存一位二進制碼。在 D=0 時,寄存器儲存為 0,在 D=1 時,寄存器儲存為 1。 寄存器的功能十分重要,CPU對存儲器中的數據進行處理時,往往先把數據取到內部寄存器中,而后再作處理。外部寄存器是計算機中其它一些部件上用于暫存數據的寄存器,它與CPU之間通過"端口"交換數據,外部寄存器具有寄存器和內存儲器雙重特點。有些時候我們常把外部寄存器就稱為"端口",這種說法不太嚴格,但經常這樣說。外部寄存器雖然也用于存放數據,但是它保存的數據具有特殊的用途。某些寄存器中各個位的0、1狀態反映了外部設備的工作狀態或方式;還有一些寄存器中的各個位可對外部設備進行控制;也有一些端口作為CPU同外部設備交換數據的通路。所以說,端口是CPU和外設間的聯系橋梁。CPU對端口的訪問也是依據端口的"編號"(地址),這一點又和訪問存儲器一樣。不過考慮到機器所聯接的外設數量并不多,所以在設計機器的時候僅安排了1024個端口地址,端口地址范圍為0--3FFH。JVM只設置了4個最為常用的寄存器。它們是:
pc程序計數器, optop操作數棧頂指針 frame當前執行環境指針 vars指向當前執行環境中第一個局部變量的指針 所有寄存器均為32位。pc用于記錄程序的執行。optop,frame和vars用于記錄指向Java棧區的指針。3. JVM棧結構
作為基于棧結構的計算機,Java棧是JVM存儲信息的主要方法。當JVM得到一個java字節碼應用程序后,便為該代碼中一個類的每一個方法創一個棧框架,用來保存該方法的狀態信息。每個棧框架包括以下三類信息:局部變量執行環境操作數棧 局部變量:用于存儲一個類的方法中所用到的局部變量。Vars寄存器指向該變量表中的第一個局部變量。執行環境:它是執行一個方法的控制中心,用于保存解釋器對java字節碼進行解釋過程中所需要的信息(它們是:上次調用的方法、局部變量指針、操作數棧的棧頂指針和棧底指針)。4. JVM碎片回收堆
Java類的實例所需的存儲空間是在堆上分配的。解釋器承擔著為實例分配空間的工作。解釋器為一個實例分配完空間后,便開始記錄該實例對所占內存的使用情況,一旦使用完畢,便將其回收到堆中。5. JVM存儲區:常量緩沖池、方法區
常量緩沖池:用于存儲類名稱、方法、字段名及串常量。 方法區:用于存儲java方法的字節碼。總結
以上是生活随笔為你收集整理的Java源文件的编译、下载、解释和执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程情况下创建连接池
- 下一篇: AngularJS自定义指令详解(有分页