新聞中心
你對(duì)Java編譯過程和編譯原理,Java編譯程序?qū)ava源程序編譯成jvm可執(zhí)行代碼--java字節(jié)碼,并且Java編譯器卻不將對(duì)變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將些符號(hào)引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個(gè)方法所在的地址,這樣就有效地保證了java的可移植性和安全性。

為蘄春等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及蘄春網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站制作、蘄春網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Java編譯原理
1、Java編譯過程與c/c++編譯過程不同
Java編譯程序?qū)ava源程序編譯成jvm可執(zhí)行代碼--java字節(jié)碼.
c/c++編譯過程:
當(dāng)C編譯器編譯生成一個(gè)對(duì)象的代碼時(shí),該代碼是為在某一特定硬件平臺(tái)運(yùn)行而生成的。因此在編譯過程中,編譯程序通過查表將所有對(duì)符號(hào)的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。
Java編譯過程:
Java編譯器卻不將對(duì)變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將些符號(hào)引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個(gè)方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
2、jvm工作原理
運(yùn)行jvm字符碼的工作是由解釋器來完成的。解釋執(zhí)行過程分三步進(jìn)行:代碼的裝入、代碼的校驗(yàn)、和代碼的執(zhí)行。
裝入代碼的工作由“類裝載器classloader”完成。類裝載器負(fù)責(zé)裝入運(yùn)行一個(gè)程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被調(diào)
用的類。當(dāng)類裝載器裝入一個(gè)類時(shí),該類被放在自己的名字空間中。除了通過符號(hào)引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本臺(tái)計(jì)算機(jī)的所有類都在同一地址空間中,而所有從外部引進(jìn)的類,都有一個(gè)自己獨(dú)立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運(yùn)行效率,同時(shí)又保證它們與從外部引進(jìn)的類不會(huì)相互影響。
當(dāng)裝入了運(yùn)行程序需要的所有類后,解釋器便可確定整個(gè)可執(zhí)行程序的內(nèi)存布局。解釋器為符號(hào)引用與特定的地址空間建立對(duì)應(yīng)關(guān)系及查詢表。通過在這一階段確定代碼的內(nèi)布局,java很好地解決了由超類改變而使子類崩潰的問題,同時(shí)也防止了代碼的非法訪問。
隨后,被裝入的代碼由字節(jié)碼校驗(yàn)器進(jìn)行檢查。校驗(yàn)器可以發(fā)現(xiàn)操作數(shù)棧益處、非法數(shù)據(jù)類型轉(zhuǎn)化等多種錯(cuò)誤。通過校驗(yàn)后,代碼便開始執(zhí)行了。
java字節(jié)碼的執(zhí)行有兩種方式:
1)即時(shí)編譯方式:解釋器先將字節(jié)編譯成機(jī)器碼,然后再執(zhí)行該機(jī)器碼。
2)解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成java字節(jié)碼程序的所有操作。本節(jié)關(guān)于Java編譯的內(nèi)容介紹到這里,請(qǐng)關(guān)注本節(jié)其他相關(guān)報(bào)道。
【編輯推薦】
- Java編譯器中對(duì)String對(duì)象的優(yōu)化
- 發(fā)現(xiàn)Java虛擬機(jī)內(nèi)存泄露問題
- 深入Java虛擬機(jī):JVM中的Stack和Heap
- Java編譯器對(duì)于String常量表達(dá)式的優(yōu)化
- Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
名稱欄目:Java編譯過程與c/c++編譯過程有何不同
網(wǎng)站鏈接:http://www.dlmjj.cn/article/dhespie.html


咨詢
建站咨詢
