卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java Java能不能像C語(yǔ)言不通過(guò)JVM虛擬機(jī)直接編譯成二進(jìn)制機(jī)器碼,讓計(jì)算機(jī)直接運(yùn)行?

Java能不能像C語(yǔ)言不通過(guò)JVM虛擬機(jī)直接編譯成二進(jìn)制機(jī)器碼,讓計(jì)算機(jī)直接運(yùn)行?從語(yǔ)言設(shè)計(jì)的角度看,可以通過(guò)重新設(shè)計(jì)編譯器來(lái)實(shí)現(xiàn),但從工程實(shí)踐的角度看是不可行的。首先,Java語(yǔ)言最大的特點(diǎn)是跨平臺(tái)

Java能不能像C語(yǔ)言不通過(guò)JVM虛擬機(jī)直接編譯成二進(jìn)制機(jī)器碼,讓計(jì)算機(jī)直接運(yùn)行?

從語(yǔ)言設(shè)計(jì)的角度看,可以通過(guò)重新設(shè)計(jì)編譯器來(lái)實(shí)現(xiàn),但從工程實(shí)踐的角度看是不可行的。

首先,Java語(yǔ)言最大的特點(diǎn)是跨平臺(tái)的可移植性,一次開(kāi)發(fā),一次編譯,多平臺(tái)執(zhí)行。這個(gè)特性是通過(guò)JVM(Java虛擬機(jī))實(shí)現(xiàn)的。如果重寫(xiě)編譯器直接編譯成C語(yǔ)言這樣的可執(zhí)行程序,它將失去跨平臺(tái)特性。

其次,Java語(yǔ)言在設(shè)計(jì)之初就被設(shè)計(jì)成嚴(yán)重依賴(lài)JRE(Java運(yùn)行時(shí)環(huán)境)的語(yǔ)言。一些語(yǔ)言設(shè)計(jì)缺陷必須依靠JVM來(lái)解決,比如GC(垃圾收集)。我們知道Java語(yǔ)言沒(méi)有內(nèi)存恢復(fù)能力,所以我們不得不依賴(lài)JVM。在工程實(shí)踐中,如果軟件不能進(jìn)行內(nèi)存恢復(fù),后果將是災(zāi)難性的。

第三,Java語(yǔ)言是面向?qū)ο蟮模煌谕瑯用嫦驅(qū)ο蟮腃語(yǔ)言,Java還具有動(dòng)態(tài)特性。

它允許程序動(dòng)態(tài)加載運(yùn)行過(guò)程中所需的類(lèi),這在面向?qū)ο缶幊讨惺荂語(yǔ)言無(wú)法實(shí)現(xiàn)的。在C語(yǔ)言編程過(guò)程中,每次向類(lèi)中添加實(shí)例變量或成員函數(shù)時(shí),引用該類(lèi)的所有子類(lèi)都必須重新編譯,否則會(huì)導(dǎo)致程序崩潰。Java從以下幾個(gè)方面采取措施來(lái)解決這個(gè)問(wèn)題。java編譯器沒(méi)有將對(duì)實(shí)例變量和成員函數(shù)的引用編譯成數(shù)值引用,而是將符號(hào)引用信息保存在字節(jié)碼中并傳遞給解釋器,解釋器在動(dòng)態(tài)連接類(lèi)后將符號(hào)引用信息轉(zhuǎn)換成數(shù)值偏移量。這樣,在內(nèi)存中生成的對(duì)象不會(huì)在編譯期間確定,而是延遲到運(yùn)行時(shí)并由解釋器確定。這樣,更新類(lèi)中的變量和方法不會(huì)影響現(xiàn)有代碼。在解釋和執(zhí)行字節(jié)碼時(shí),只有在出現(xiàn)新名稱(chēng)時(shí)才執(zhí)行一次符號(hào)信息的搜索和轉(zhuǎn)換,然后才能全速執(zhí)行代碼。在運(yùn)行時(shí)確定引用的好處是可以使用更新的類(lèi),而不用擔(dān)心影響原始代碼。如果程序連接到網(wǎng)絡(luò)中另一個(gè)系統(tǒng)中的類(lèi),則該類(lèi)的所有者可以自由更新該類(lèi),而不會(huì)使引用該類(lèi)的任何程序崩潰。這完全取決于JRE。

以上幾點(diǎn)決定了Java不能像C語(yǔ)言那樣直接編譯成機(jī)器代碼。當(dāng)然,還有其他一些因素,但我認(rèn)為以上幾點(diǎn)是最重要的。

怎么啟動(dòng)JAVA里的JVM?

方法如下:

1。虛擬機(jī)的啟動(dòng)入口位于share/tools/launcher/Java的main中。C.

2。配置JVM裝載環(huán)境。

3. 解析虛擬機(jī)參數(shù)。

4. 設(shè)置線程堆棧大小。

5. 執(zhí)行Java main。

如何配置JVM加載環(huán)境:1。Java代碼執(zhí)行需要一個(gè)JVM環(huán)境。JVM環(huán)境的創(chuàng)建包括兩部分:第一部分是創(chuàng)建JVM環(huán)境,第二部分是創(chuàng)建JVM環(huán)境JVM.dll對(duì)于文件的搜索和加載,讓我們看看JRE搜索環(huán)境和系統(tǒng)版本的一部分jvm.cfg文件文件的代碼。

說(shuō)明:1)getjrepath()查找當(dāng)前JRE環(huán)境的路徑。

2)Readknownvms()讀取JRE路徑libarch(CPU體系結(jié)構(gòu))JVM.cfg文件其中,arch(CPU架構(gòu))是通過(guò)getarch方法得到的。窗口中有三種情況:AMD64、IA64和i386。

3)Checkjvmtype確定當(dāng)前JVM類(lèi)型。首先判斷是否由-J、-xxaltjvm=或-J-xxaltjvm=參數(shù)指定。如果沒(méi)有,請(qǐng)閱讀JVM.cfg文件文件中配置的第一種類(lèi)型。

4)Getjvmpath查找相應(yīng)的JVM.dll文件。

java調(diào)用DLL動(dòng)態(tài)庫(kù)?

JNI是一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL),通過(guò)Java調(diào)用C/C。所以我想到了。類(lèi)-->。H-->dll是不正確的,這也違背了JNI的初衷。DLL是由C/C生成的。以前的一個(gè)項(xiàng)目使用java調(diào)用C/cdll,所以我對(duì)此很熟悉。該DLL由C程序員編寫(xiě),可以在microsoftvisualc6.0編輯器中生成。然后Java程序員使用JNI調(diào)用DLL中實(shí)現(xiàn)的函數(shù)(方法)。