java代碼可以翻譯成c java代碼翻譯成中文

java代碼轉(zhuǎn)c語言

有一個軟件叫“exe4j”,雖然不能把java程序轉(zhuǎn)成C代碼但是可以轉(zhuǎn)成.exe文件,在沒裝JDK的電腦上也能運(yùn)行,你要想把java的代碼轉(zhuǎn)成C代碼估計不太現(xiàn)實(shí)。C都沒類這個概念

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的博野網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

jvm是不是可以把java代碼翻譯成o和1?

虛擬機(jī):指以軟件的方式模擬具有完整硬件,VM概念

虛擬機(jī):指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運(yùn)行在一個完全隔離環(huán)境中的完整計算機(jī)系統(tǒng) ,是物理機(jī)的軟件實(shí)現(xiàn)。常用的虛擬機(jī)有VMWare,Visual Box,Java Virtual Machine(Java虛擬機(jī),簡稱JVM)。

Java語言的一個非常重要的特點(diǎn)就是與平臺的無關(guān)性。而使用Java虛擬機(jī)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。一般的高級語言如果要在不同的平臺上運(yùn)行,至少需要編譯成不同的目標(biāo)代碼。而引入Java語言虛擬機(jī)后,Java語言在不同平臺上運(yùn)行時不需要重新編譯。Java語言使用Java虛擬機(jī)屏蔽了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行。這就是Java的能夠"一次編譯,到處運(yùn)行"的原因。

Java虛擬機(jī)陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

啟動流程

?

?

JVM由三個主要的子系統(tǒng)構(gòu)成:

1.類加載器子系統(tǒng)

2.運(yùn)行時數(shù)據(jù)區(qū)(內(nèi)存)

3.執(zhí)行引擎

?

?

JVM原理

JVM是java的核心和基礎(chǔ),在java編譯器和os平臺之間的虛擬處理器。它是一種基于下層的操作系統(tǒng)和硬件平臺并利用軟件方法來實(shí)現(xiàn)的抽象的計算機(jī),可以在上面執(zhí)行java的字節(jié)碼程序。

java編譯器只需面向JVM,生成JVM能理解的代碼或字節(jié)碼文件。Java源文件經(jīng)編譯器,編譯成字節(jié)碼程序,通過JVM將每一條指令翻譯成不同平臺機(jī)器碼,通過特定平臺運(yùn)行。

JVM執(zhí)行程序的過程 :

I.加載.class文件

II.管理并分配內(nèi)存

III.執(zhí)行垃圾收集

JRE(java運(yùn)行時環(huán)境)包含JVM的java程序的運(yùn)行環(huán)境

JVM是Java程序運(yùn)行的容器,但是他同時也是操作系統(tǒng)的一個進(jìn)程,因此他也有他自己的運(yùn)行的生命周期,也有自己的代碼和數(shù)據(jù)空間。

JVM在整個jdk中處于最底層,負(fù)責(zé)與操作系統(tǒng)的交互,用來屏蔽操作系統(tǒng)環(huán)境,提供一個完整的Java運(yùn)行環(huán)境,因此也叫虛擬計算機(jī).操作系統(tǒng)裝入JVM是通過jdk中Java.exe來完成,通過下面4步來完成JVM環(huán)境。

1.創(chuàng)建JVM裝載環(huán)境和配置

2.裝載JVM.dll

3.初始化JVM.dll并掛接到JNIENV(JNI調(diào)用接口)實(shí)例

4.調(diào)用JNIEnv實(shí)例裝載并處理class類。

寄存器

所有的CPU均包含用于保存系統(tǒng)狀態(tài)和處理器所需信息的寄存器組。如果虛擬機(jī)定義較多的寄存器,便可以從中得到更多的信息而不必對?;騼?nèi)存進(jìn)行訪問,這有利于提高運(yùn)行速度。然而,如果虛擬機(jī)中的寄存器比實(shí)際CPU的寄存器多,在實(shí)現(xiàn)虛擬機(jī)時就會占用處理器大量的時間來用常規(guī)存儲器模擬寄存器,這反而會降低虛擬機(jī)的效率。針對這種情況,JVM只設(shè)置了4個最為常用的寄存器。它們是:

pc程序計數(shù)器

optop操作數(shù)棧頂指針

frame當(dāng)前執(zhí)行環(huán)境指針

vars指向當(dāng)前執(zhí)行環(huán)境中第一個局部變量的指針

所有寄存器均為32位。pc用于記錄程序的執(zhí)行。optop,frame和vars用于記錄指向Java棧區(qū)的指針。寄存器

棧結(jié)構(gòu)

作為基于棧結(jié)構(gòu)的計算機(jī),Java棧是JVM存儲信息的主要方法。當(dāng)JVM得到一個Java字節(jié)碼應(yīng)用程序后,便為該代碼中一個類的每一個方法創(chuàng)建一個??蚣?,以保存該方法的狀態(tài)信息。每個??蚣馨ㄒ韵氯愋畔?

局部變量

執(zhí)行環(huán)境

操作數(shù)棧

局部變量用于存儲一個類的方法中所用到的局部變量。vars寄存器指向該變量表中的第一個局部變量。

執(zhí)行環(huán)境用于保存解釋器對Java字節(jié)碼進(jìn)行解釋過程中所需的信息。它們是:上次調(diào)用的方法、局部變量指針和操作數(shù)棧的棧頂和棧底指針。執(zhí)行環(huán)境是一個執(zhí)行一個方法的控制中心。例如:如果解釋器要執(zhí)行iadd(整數(shù)加法),首先要從frame寄存器中找到當(dāng)前執(zhí)行環(huán)境,而后便從執(zhí)行環(huán)境中找到操作數(shù)棧,從棧頂彈出兩個整數(shù)進(jìn)行加法運(yùn)算,最后將結(jié)果壓入棧頂。

操作數(shù)棧用于存儲運(yùn)算所需操作數(shù)及運(yùn)算的結(jié)果。

運(yùn)行數(shù)據(jù)

JVM定義了若干個程序執(zhí)行期間使用的數(shù)據(jù)區(qū)域。這個區(qū)域里的一些數(shù)據(jù)在JVM啟動的時候創(chuàng)建,在JVM退出的時候銷毀。而其他的數(shù)據(jù)依賴于每一個線程,在線程創(chuàng)建時創(chuàng)建,在線程退出時銷毀。分別有程序計數(shù)器,堆,棧,方法區(qū),運(yùn)行時常量池。

運(yùn)行過程

上面對虛擬機(jī)的各個部分進(jìn)行了比較詳細(xì)的說明,下面通過一個具體的例子來分析它的運(yùn)行過程。

虛擬機(jī)通過調(diào)用某個指定類的方法main啟動,傳遞給main一個字符串?dāng)?shù)組參數(shù),使指定的類被裝載,同時鏈接該類所使用的其它的類型,并且初始化它們。新建一java源文件并取名HelloApp.java,內(nèi)容如下:

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 進(jìn)行編譯,這時同目錄下會產(chǎn)生一個編譯后的文件:HelloApp.class

然后在命令行模式下鍵入:java HelloApp run virtual machine

將通過調(diào)用HelloApp的方法main來啟動java虛擬機(jī),傳遞給main一個包含三個字符串"run"、"virtual"、"machine"的數(shù)組。我們略述虛擬機(jī)在執(zhí)行HelloApp時可能采取的步驟。

?

?

JVM虛擬機(jī)運(yùn)行過程

開始試圖執(zhí)行類HelloApp的main方法,發(fā)現(xiàn)該類并沒有被裝載,也就是說虛擬機(jī)當(dāng)前不包含該類的二進(jìn)制代表,于是虛擬機(jī)使用ClassLoader試圖尋找這樣的二進(jìn)制代表。如果這個進(jìn)程失敗,則拋出一個異常。類被裝載后同時在main方法被調(diào)用之前,必須對類HelloApp與其它類型進(jìn)行鏈接然后初始化。鏈接包含三個階段:檢驗,準(zhǔn)備和解析。檢驗檢查被裝載的主類的符號和語義,準(zhǔn)備則創(chuàng)建類或接口的靜態(tài)域以及把這些域初始化為標(biāo)準(zhǔn)的默認(rèn)值,解析負(fù)責(zé)檢查主類對其它類或接口的符號引用,在這一步它是可選的。類的初始化是對類中聲明的靜態(tài)初始化函數(shù)和靜態(tài)域的初始化構(gòu)造方法的執(zhí)行。一個類在初始化之前它的父類必須被初始化。

Java 翻譯成C或者C++代碼

少年,以后記得把姓名都換成張三李四,把包名都換了,養(yǎng)成好習(xí)慣,免得以后參加工作了泄密丟了飯碗都不知道咋回事,競爭對手可以從客戶姓名(你的“銀行”名稱)和項目代碼(你的項目的Java包名)知道你們的客戶銀行當(dāng)前在開發(fā)什么項目,像 Apple 出個 iPhone 之外的一個全新的產(chǎn)品如果外包給你們做的話,你很可能就成為公司丟掉合同賠償幾千萬的元兇。

新聞名稱:java代碼可以翻譯成c java代碼翻譯成中文
標(biāo)題鏈接:http://www.muchs.cn/article46/ddcsjhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計公司、商城網(wǎng)站、網(wǎng)站營銷小程序開發(fā)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司