java jni 編程進(jìn)階

java jni 編程進(jìn)階

ID:14602602

大?。?63.50 KB

頁數(shù):24頁

時(shí)間:2018-07-29

java jni 編程進(jìn)階_第1頁
java jni 編程進(jìn)階_第2頁
java jni 編程進(jìn)階_第3頁
java jni 編程進(jìn)階_第4頁
java jni 編程進(jìn)階_第5頁
資源描述:

《java jni 編程進(jìn)階》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、JavaJNI編程進(jìn)階JNI一直以來都很少去關(guān)注,但卻是我心中的一個(gè)結(jié),最近這幾天剛好手頭有點(diǎn)時(shí)間,因此抽空看了一下這方面的東西,整理了一份文檔,JNI技術(shù)的出現(xiàn)主要是基于三個(gè)方面的應(yīng)用需求:?1.解決性能問題Java具有平臺無關(guān)性,這使人們在開發(fā)企業(yè)級應(yīng)用的時(shí)候總是把它作為主要候選方案之一,但是性能方面的因素又大大削弱了它的競爭力。為此,提高Java的性能就顯得十分重要。Sun公司及Java的支持者們?yōu)樘岣逬ava的運(yùn)行速度已經(jīng)做出了許多努力,其中大多數(shù)集中在程序設(shè)計(jì)的方法和模式選擇方面。由于算法和設(shè)計(jì)模式的優(yōu)化是通用的,對Java有

2、效的優(yōu)化算法和設(shè)計(jì)模式,對其他編譯語言也基本同樣適用,因此不能從根本上改變Java程序與編譯型語言在執(zhí)行效率方面的差異。由此,于是人們開始引入JIT(JustInTime,及時(shí)編譯)的概念。它的基本原理是:首先通過Java編譯器把Java源代碼編譯成平臺無關(guān)的二進(jìn)制字節(jié)碼。然后在Java程序真正執(zhí)行之前,系統(tǒng)通過JIT編譯器把Java的字節(jié)碼編譯為本地化機(jī)器碼。最后,系統(tǒng)執(zhí)行本地化機(jī)器碼,節(jié)省了對字節(jié)碼進(jìn)行解釋的時(shí)間。這樣做的優(yōu)點(diǎn)是大大提高了Java程序的性能,縮短了加載程序的時(shí)間;同時(shí),由于編譯的結(jié)果并不在程序運(yùn)行間保存,因此也節(jié)約了

3、存儲空間。缺點(diǎn)是由于JIT編譯器對所有的代碼都想優(yōu)化,因此同樣也占用了很多時(shí)間。?動態(tài)優(yōu)化技術(shù)是提高Java性能的另一個(gè)嘗試。該技術(shù)試圖通過把Java源程序直接編譯成機(jī)器碼,以充分利用Java動態(tài)編譯和靜態(tài)編譯技術(shù)來提高Java的性能。該方法把輸入的Java源碼或字節(jié)碼轉(zhuǎn)換為經(jīng)過高度優(yōu)化的可執(zhí)行代碼和動態(tài)庫(Windows中的.dll文件或Unix中的.so文件)。該技術(shù)能大大提高程序的性能,但卻破壞了Java的可移植性。JNI(JavaNativeInterface,Java本地化方法)技術(shù)由此閃亮登場。因?yàn)椴捎肑NI技術(shù)只是針對一些

4、嚴(yán)重影響Java性能的代碼段,該部分可能只占源程序的極少部分,所以幾乎可以不考慮該部分代碼在主流平臺之間移植的工作量。同時(shí),也不必過分擔(dān)心類型匹配問題,我們完全可以控制代碼不出現(xiàn)這種錯(cuò)誤。此外,也不必?fù)?dān)心安全控制問題,因?yàn)镴ava安全模型已擴(kuò)展為允許非系統(tǒng)類加載和調(diào)用本地方法。根據(jù)Java規(guī)范,從JDK1.2開始,F(xiàn)indClass將設(shè)法找到與當(dāng)前的本地方法關(guān)聯(lián)的類加載器。如果平臺相關(guān)代碼屬于一個(gè)系統(tǒng)類,則無需涉及任何類加載器;否則,將調(diào)用適當(dāng)?shù)念惣虞d器來加載和鏈接已命名的類。換句話說,如果在Java程序中直接調(diào)用C/C++語言產(chǎn)生的機(jī)

5、器碼,該部分代碼的安全性就由Java虛擬機(jī)控制。?2.解決本機(jī)平臺接口調(diào)用問題JAVA以其跨平臺的特性深受人們喜愛,而又正由于它的跨平臺的目的,使得它和本地機(jī)器的各種內(nèi)部聯(lián)系變得很少,約束了它的功能。解決JAVA對本地操作的一種方法就是JNI。JAVA通過JNI調(diào)用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機(jī)器上是SO文件形式)。通過調(diào)用本地的庫文件的內(nèi)部方法,使JAVA可以實(shí)現(xiàn)和本地機(jī)器的緊密聯(lián)系,調(diào)用系統(tǒng)級的各接口方法。?3.嵌入式開發(fā)應(yīng)用“一次編程,到處使用”的Java軟件概念原

6、本就是針對網(wǎng)上嵌入式小設(shè)備提出的,幾經(jīng)周折,目前SUN公司已推出了J2ME(Java2P1atformMicroEdition)針對信息家電的Java版本,其技術(shù)日趨成熟,開始投入使用。SUN公司Java虛擬機(jī)(JVM)技術(shù)的有序開放,使得Java軟件真正實(shí)現(xiàn)跨平臺運(yùn)行,即Java應(yīng)用小程序能夠在帶有JVM的任何硬軟件系統(tǒng)上執(zhí)行。加上Java語言本身所具有的安全性、可靠性和可移植性等特點(diǎn),對實(shí)現(xiàn)瘦身上網(wǎng)的信息家電等網(wǎng)絡(luò)設(shè)備十分有利,同時(shí)對嵌入式設(shè)備特別是上網(wǎng)設(shè)備軟件編程技術(shù)產(chǎn)生了很大的影響。也正是由于JNI解決了本機(jī)平臺接口調(diào)用問題,于

7、是JNI在嵌入式開發(fā)領(lǐng)域也是如火如荼。?不失直觀性,我們首先寫一個(gè)JNI小例子:?Java代碼1.public?class?HelloJni?{??2.????public?native?void?displayHelloJni();??3.??4.????static?{??5.????????System.loadLibrary("helloJni");??6.????}??7.??8.????public?static?void?main(String[]?args)?{??9.????????//System.out.print

8、ln(System.getProperty("java.library.path"));??10.????????new?HelloJni().displayHelloJni();??11.????}??1

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。