国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java基礎知識:KVM的擴展

2019-11-18 15:33:08
字體:
來源:轉載
供稿:網友

    KVM本身只帶有cldc1.1的類庫,功能十分簡單,不能滿足用戶的需求,本篇介紹如何對KVM進行擴展。

    對KVM進行擴展,在java層十分簡單,只要向在編譯Java代碼時多加一個文件就可以,沒什么要說的,麻煩的是假如在加入的Java類中有本地操作該怎么辦?本地的C語言代碼放在哪里編譯才能夠供KVM調用?

    答案是KNI.下面就以KNI為主要內容介紹如何對KVM加以擴展,在最后附加一個具體的實現例子。

    1. KNI的特點:

    KNI(K Native Interface)是SUN的KVM(K Virtual Machine)所使用的本地方法調用機制。

    JNI(Java Native Interface)是已經為我們所熟悉的Java本地方法調用機制,JNI一般使用在J2SE或J2EE平臺上,本地方法被編進動態鏈接庫,在運行時由Java虛擬機載入。

    KVM中也需要本地調用,但JNI是“重量級”的本地調用方式,在使用時消耗的資源較多,所以針對KVM設計出了KNI,KNI被稱為是JNI的一個簡化版,是“輕量級”的本地調用方式。KVM不能加載動態鏈接庫,所以在KNI機制下,本地方法不是寫在庫中,而是編入虛擬機內部。

    以下是KNI與JNI最重要的一些區別:

    KNI是“實現層”的API,即它是虛擬機實現的一部分,修改KNI的API就要重新編譯虛擬機,這些API的細節對于Java程序員來說是不可見的;而JNI的API是在運行時動態加載進來的,它的修改與虛擬機無關,JNI的API對于Java程序員來說是可見的。

    KNI的函數建在虛擬機內部,只能為此虛擬機所獨享;而JNI的函數放在動態鏈接庫中,可以為多個虛擬機共用。

    由于在虛擬機內部,KNI的很多操作方式與虛擬機有關,在傳遞參數和控制對象的時候都要先經過一些非凡的處理;JNI的調用方式比較直接,但可能會增加安全隱患。

    KNI是JNI的簡化版,功能也會弱一些,它不能創建對象,也不能調用Java層的方法。

    總之,“在虛擬機內部”是KNI所有特點的根源,記得這一點,KNI的所有內容都非常輕易理解。

    下文各節對KNI的各個方面做一下介紹,只詳述那些KNI所特有的內容,更全面的內容可以參考KVM附帶的KNI specification.

    2. 數據類型:

    2.1 原始類型:

java基礎知識:KVM的擴展(圖一)

    上表中間一列是KNI所提供的8種原始類型,它們的長度與所對應的Java原始類型的長度相同。

    2.2 對象類型:

java基礎知識:KVM的擴展(圖二)

    上圖是KNI所支持的對象類型,其實所有對象都可作為jobject,只是對圖中所示的這些object類的子類有非凡的支持,比如為數組類提供了操作數組元素的方法。

    2.3 返回類型:

java基礎知識:KVM的擴展(圖三)

    “返回類型”也就是本地方法的返回值的類型,KNI對它們有專門的定義。

    上表右邊一列即本地方法的返回類型。

進入討論組討論。

    2.4 字符串類型、類描述符、字段描述符:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 井陉县| 赫章县| 宁国市| 安岳县| 博客| 安陆市| 和龙市| 昭觉县| 建平县| 东海县| 洪洞县| 台北市| 康乐县| 大埔县| 桐庐县| 安徽省| 南投市| 宝丰县| 贺兰县| 德惠市| 天全县| 琼中| 林口县| 和平县| 淮滨县| 玉林市| 年辖:市辖区| 青冈县| 洛隆县| 芦山县| 双桥区| 庆元县| 泸水县| 民权县| 仲巴县| 南召县| 南昌县| 区。| 长宁县| 蓝山县| 布拖县|