有一個軟件叫“exe4j”,雖然不能把java程序轉成C代碼但是可以轉成.exe文件,在沒裝JDK的電腦上也能運行,你要想把java的代碼轉成C代碼估計不太現(xiàn)實。C都沒類這個概念
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的博野網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
虛擬機:指以軟件的方式模擬具有完整硬件,VM概念
虛擬機:指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng) ,是物理機的軟件實現(xiàn)。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。
Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是實現(xiàn)這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。這就是Java的能夠"一次編譯,到處運行"的原因。
Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…
啟動流程
?
?
JVM由三個主要的子系統(tǒng)構成:
1.類加載器子系統(tǒng)
2.運行時數(shù)據(jù)區(qū)(內存)
3.執(zhí)行引擎
?
?
JVM原理
JVM是java的核心和基礎,在java編譯器和os平臺之間的虛擬處理器。它是一種基于下層的操作系統(tǒng)和硬件平臺并利用軟件方法來實現(xiàn)的抽象的計算機,可以在上面執(zhí)行java的字節(jié)碼程序。
java編譯器只需面向JVM,生成JVM能理解的代碼或字節(jié)碼文件。Java源文件經(jīng)編譯器,編譯成字節(jié)碼程序,通過JVM將每一條指令翻譯成不同平臺機器碼,通過特定平臺運行。
JVM執(zhí)行程序的過程 :
I.加載.class文件
II.管理并分配內存
III.執(zhí)行垃圾收集
JRE(java運行時環(huán)境)包含JVM的java程序的運行環(huán)境
JVM是Java程序運行的容器,但是他同時也是操作系統(tǒng)的一個進程,因此他也有他自己的運行的生命周期,也有自己的代碼和數(shù)據(jù)空間。
JVM在整個jdk中處于最底層,負責與操作系統(tǒng)的交互,用來屏蔽操作系統(tǒng)環(huán)境,提供一個完整的Java運行環(huán)境,因此也叫虛擬計算機.操作系統(tǒng)裝入JVM是通過jdk中Java.exe來完成,通過下面4步來完成JVM環(huán)境。
1.創(chuàng)建JVM裝載環(huán)境和配置
2.裝載JVM.dll
3.初始化JVM.dll并掛接到JNIENV(JNI調用接口)實例
4.調用JNIEnv實例裝載并處理class類。
寄存器
所有的CPU均包含用于保存系統(tǒng)狀態(tài)和處理器所需信息的寄存器組。如果虛擬機定義較多的寄存器,便可以從中得到更多的信息而不必對棧或內存進行訪問,這有利于提高運行速度。然而,如果虛擬機中的寄存器比實際CPU的寄存器多,在實現(xiàn)虛擬機時就會占用處理器大量的時間來用常規(guī)存儲器模擬寄存器,這反而會降低虛擬機的效率。針對這種情況,JVM只設置了4個最為常用的寄存器。它們是:
pc程序計數(shù)器
optop操作數(shù)棧頂指針
frame當前執(zhí)行環(huán)境指針
vars指向當前執(zhí)行環(huán)境中第一個局部變量的指針
所有寄存器均為32位。pc用于記錄程序的執(zhí)行。optop,frame和vars用于記錄指向Java棧區(qū)的指針。寄存器
棧結構
作為基于棧結構的計算機,Java棧是JVM存儲信息的主要方法。當JVM得到一個Java字節(jié)碼應用程序后,便為該代碼中一個類的每一個方法創(chuàng)建一個棧框架,以保存該方法的狀態(tài)信息。每個棧框架包括以下三類信息:
局部變量
執(zhí)行環(huán)境
操作數(shù)棧
局部變量用于存儲一個類的方法中所用到的局部變量。vars寄存器指向該變量表中的第一個局部變量。
執(zhí)行環(huán)境用于保存解釋器對Java字節(jié)碼進行解釋過程中所需的信息。它們是:上次調用的方法、局部變量指針和操作數(shù)棧的棧頂和棧底指針。執(zhí)行環(huán)境是一個執(zhí)行一個方法的控制中心。例如:如果解釋器要執(zhí)行iadd(整數(shù)加法),首先要從frame寄存器中找到當前執(zhí)行環(huán)境,而后便從執(zhí)行環(huán)境中找到操作數(shù)棧,從棧頂彈出兩個整數(shù)進行加法運算,最后將結果壓入棧頂。
操作數(shù)棧用于存儲運算所需操作數(shù)及運算的結果。
運行數(shù)據(jù)
JVM定義了若干個程序執(zhí)行期間使用的數(shù)據(jù)區(qū)域。這個區(qū)域里的一些數(shù)據(jù)在JVM啟動的時候創(chuàng)建,在JVM退出的時候銷毀。而其他的數(shù)據(jù)依賴于每一個線程,在線程創(chuàng)建時創(chuàng)建,在線程退出時銷毀。分別有程序計數(shù)器,堆,棧,方法區(qū),運行時常量池。
運行過程
上面對虛擬機的各個部分進行了比較詳細的說明,下面通過一個具體的例子來分析它的運行過程。
虛擬機通過調用某個指定類的方法main啟動,傳遞給main一個字符串數(shù)組參數(shù),使指定的類被裝載,同時鏈接該類所使用的其它的類型,并且初始化它們。新建一java源文件并取名HelloApp.java,內容如下:
class HelloApp {
public static void main(String[] args) {
System.out.println("Hello World!");
for (int i = 0; i args.length; i++ ) {
System.out.println(args);
}
}
}
在命令模式下輸入:javac HelloApp.java 進行編譯,這時同目錄下會產生一個編譯后的文件:HelloApp.class
然后在命令行模式下鍵入:java HelloApp run virtual machine
將通過調用HelloApp的方法main來啟動java虛擬機,傳遞給main一個包含三個字符串"run"、"virtual"、"machine"的數(shù)組。我們略述虛擬機在執(zhí)行HelloApp時可能采取的步驟。
?
?
JVM虛擬機運行過程
開始試圖執(zhí)行類HelloApp的main方法,發(fā)現(xiàn)該類并沒有被裝載,也就是說虛擬機當前不包含該類的二進制代表,于是虛擬機使用ClassLoader試圖尋找這樣的二進制代表。如果這個進程失敗,則拋出一個異常。類被裝載后同時在main方法被調用之前,必須對類HelloApp與其它類型進行鏈接然后初始化。鏈接包含三個階段:檢驗,準備和解析。檢驗檢查被裝載的主類的符號和語義,準備則創(chuàng)建類或接口的靜態(tài)域以及把這些域初始化為標準的默認值,解析負責檢查主類對其它類或接口的符號引用,在這一步它是可選的。類的初始化是對類中聲明的靜態(tài)初始化函數(shù)和靜態(tài)域的初始化構造方法的執(zhí)行。一個類在初始化之前它的父類必須被初始化。
少年,以后記得把姓名都換成張三李四,把包名都換了,養(yǎng)成好習慣,免得以后參加工作了泄密丟了飯碗都不知道咋回事,競爭對手可以從客戶姓名(你的“銀行”名稱)和項目代碼(你的項目的Java包名)知道你們的客戶銀行當前在開發(fā)什么項目,像 Apple 出個 iPhone 之外的一個全新的產品如果外包給你們做的話,你很可能就成為公司丟掉合同賠償幾千萬的元兇。
新聞名稱:java代碼可以翻譯成c java代碼翻譯成中文
標題鏈接:http://vcdvsql.cn/article46/ddcsjhg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站設計公司、商城網(wǎng)站、網(wǎng)站營銷、小程序開發(fā)、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)