首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

原始原生介面(RNI)詳解:比 J/Direct 更強大、更貼近 JVM 的本地互操作技術

     編輯:Java 相關知識

RNI 特性與定位

RNI(Raw Native Interface)比 J/Direct 複雜但功能更強。RNI 更貼近 JVM,能編寫更高效代碼,處理原生方法中的 Java 物件,實現與 JVM 內部機制更緊密整合。概念上類似 Sun JNI,本文重點說明主要差異,詳細情況請參考 Microsoft 文件。

RNI 與 JNI 關鍵差異

二進制佈局直接存取:RNI 原生方法程式設計師知曉物件二進制佈局,可直接存取所需資訊,無需像 JNI 獲取欄位/方法標識符。代價是此原生方法僅能在 Microsoft JVM 運行。
JVM 控制函數直接調用:JNI 透過 JNIEnv 參數存取大量函數;RNI 將控制 JVM 運作的函數變為可直接調用。部分類似 JNI「兄弟」(如異常控制),但大多數名稱與用途不同。
垃圾收集模型差異:JNI 中垃圾收集在原生方法執行期遵循同 Java 代碼相同規則;RNI 中程式設計師需自行負責原生方法活動期間垃圾收集器啟動與中止。預設進入原生方法前 GC 不活動,程式設計師可假設物件該時段不被收集。長時間執行時需調用 GCEnable() 啟動 GC。
全域控制機制:類似 JNI 全域控制,RNI 稱 GCFrames,保證特定物件在 GC 活動期間不被當作垃圾收集。

msjavah 生成的 C 標頭檔範例

文中展示 msjavah 為 ShowMsgBox 類別生成的 C 標頭檔,包含結構定義、導出函數宣告等,體現 RNI 直接操作物件二進制佈局的特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved