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

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

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

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

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

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

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

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

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

啟動(dòng)流程

?

?

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

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

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

3.執(zhí)行引擎

?

?

JVM原理

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

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

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

I.加載.class文件

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

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

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

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

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

寄存器

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

pc程序計(jì)數(shù)器

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

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

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

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

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

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

局部變量

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

操作數(shù)棧

局部變量用于存儲(chǔ)一個(gè)類(lèi)的方法中所用到的局部變量。vars寄存器指向該變量表中的第一個(gè)局部變量。

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

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

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

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

運(yùn)行過(guò)程

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

虛擬機(jī)通過(guò)調(diào)用某個(gè)指定類(lèi)的方法main啟動(dòng),傳遞給main一個(gè)字符串?dāng)?shù)組參數(shù),使指定的類(lèi)被裝載,同時(shí)鏈接該類(lèi)所使用的其它的類(lèi)型,并且初始化它們。新建一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)行編譯,這時(shí)同目錄下會(huì)產(chǎn)生一個(gè)編譯后的文件:HelloApp.class

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

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

?

?

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

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

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

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

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

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

廣告

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

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