真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JNI本地接口如何在Java中使用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)JNI本地接口如何在Java中使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供白堿灘企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為白堿灘眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

詳解Java 本地接口 JNI 使用方法

對(duì)于Java程序員來(lái)說(shuō),Java語(yǔ)言的好處和優(yōu)點(diǎn),我想不用我說(shuō)了,大家自然會(huì)說(shuō)出很多一套套的。但雖然我們作為java程序員,但我們不得不承認(rèn)java語(yǔ)言也有一些它本身的缺點(diǎn)。比如在性能、和底層打交道方面都有它的缺點(diǎn)。所以java就提供了一些本地接口,他主要的作用就是提供一個(gè)標(biāo)準(zhǔn)的方式讓java程序通過(guò)虛擬機(jī)與原生代碼進(jìn)行交互,這也就是我們平常常說(shuō)的java本地接口(JNI——java native Interface)。它使得在 Java 虛擬機(jī) (VM) 內(nèi)部運(yùn)行的 Java 代碼能夠與用其它編程語(yǔ)言(如 C、C++ 和匯編語(yǔ)言)編寫的應(yīng)用程序和庫(kù)進(jìn)行互操作。JNI 最重要的好處是它沒(méi)有對(duì)底層 Java 虛擬機(jī)的實(shí)現(xiàn)施加任何限制。因此,Java虛擬機(jī)廠商可以在不影響虛擬機(jī)其它部分的情況下添加對(duì) JNI 的支持。程序員只需編寫一種版本的本地應(yīng)用程序或庫(kù),就能夠與所有支持 JNI 的 Java 虛擬機(jī)協(xié)同工作。我們來(lái)看一下為什么要與原生代碼進(jìn)行交互:

一:提高應(yīng)用程序性能。我們知道java對(duì)于c/c++、匯編語(yǔ)言來(lái)說(shuō),顯得比較“高級(jí)”。其實(shí)這里的高級(jí)就是簡(jiǎn)化了程序員的工作。很多底層的東西都讓java虛擬機(jī)做了。但畢竟相對(duì)于直接訪問(wèn)底層來(lái)講,java多了一步虛擬機(jī)的過(guò)程,所以在性能上比著這些原生語(yǔ)言稍微有點(diǎn)慢。

二:實(shí)現(xiàn)一些與底層相關(guān)的功能。Java平臺(tái)提供的標(biāo)準(zhǔn)類庫(kù),還有強(qiáng)大的API,雖然能完成大部分功能。但有些和底層硬件打交道的功能在java API提供的類庫(kù)中還是無(wú)法完成。

三:與已有的使用原生代碼編寫的程序進(jìn)行集成。在于操作系統(tǒng)上由c或者c++等原生語(yǔ)言編寫的軟件進(jìn)行集 0成的時(shí)候,可以用JNI。

JNI 接口函數(shù)和指針

     平臺(tái)相關(guān)代碼是通過(guò)調(diào)用 JNI 函數(shù)來(lái)訪問(wèn) Java 虛擬機(jī)功能的。JNI 函數(shù)可通過(guò)接口指針來(lái)獲得。接口指針是指針的指針,它指向一個(gè)指針數(shù)組,而指針數(shù)組中的每個(gè)元素又指向一個(gè)接口函數(shù)。每個(gè)接口函數(shù)都處在數(shù)組的某個(gè)預(yù)定偏移量中。下圖說(shuō)明了接口指針的組織結(jié)構(gòu)。

                   JNI本地接口如何在Java中使用

           JNI 接口的組織類似于 C++ 虛擬函數(shù)表或 COM 接口。使用接口表而不使用硬性編入的函數(shù)表的好處是使 JNI 名字空間與平臺(tái)相關(guān)代碼分開(kāi)。虛擬機(jī)可以很容易地提供多個(gè)版本的 JNI 函數(shù)表。例如,虛擬機(jī)可支持以下兩個(gè) JNI 函數(shù)表:

· 一個(gè)表對(duì)非法參數(shù)進(jìn)行全面檢查,適用于調(diào)試程序;

· 另一個(gè)表只進(jìn)行 JNI 規(guī)范所要求的最小程度的檢查,因此效率較高。

JNI 接口指針只在當(dāng)前線程中有效。因此,本地方法不能將接口指針從一個(gè)線程傳遞到另一個(gè)線程中。實(shí)現(xiàn) JNI 的虛擬機(jī)可將本地線程的數(shù)據(jù)分配和儲(chǔ)存在 JNI 接口指針?biāo)赶虻膮^(qū)域中。

本地方法將JNI 接口指針當(dāng)作參數(shù)來(lái)接受。虛擬機(jī)在從相同的 Java 線程中對(duì)本地方法進(jìn)行多次調(diào)用時(shí),保證傳遞給該本地方法的接口指針是相同的。但是,一個(gè)本地方法可被不同的 Java 線程所調(diào)用,因此可以接受不同的 JNI 接口指針。                     

JNI本地接口如何在Java中使用

(1)編寫Java類代碼

    其中,需要JNI實(shí)現(xiàn)的方法應(yīng)當(dāng)用native關(guān)鍵字聲明。在該類中,用System.1oadLibrary()方法加載需要的動(dòng)態(tài)鏈接庫(kù)。關(guān)鍵代碼如下:

 //Compute.java
 public class Compute{
 public native double sqrt(double params);
 static{
 //調(diào)用動(dòng)態(tài)鏈接庫(kù)
 System.loadLibrary(“compute”);
 }

分享標(biāo)題:JNI本地接口如何在Java中使用-創(chuàng)新互聯(lián)
本文路徑:http://weahome.cn/article/doeeoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部