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

傳遞與操作 Java 物件:JNI 物件引用、欄位/方法存取與區域/全域引用管理

     編輯:Java 相關知識

傳遞自定義 Java 物件給固有方法

可將自建 Java 物件傳遞給固有方法。固有方法內部可存取接收物件的欄位與方法。宣告固有方法採用原始 Java 語法。範例:MyJavaClass 含 public 欄位 aValue 與方法 divByTwo();UseObjects 宣告固有方法 changeObject(MyJavaClass obj),設置欄位、調用固有方法、列印值驗證。

JNI 物件操作實作細節

編譯後用 javah 生成標頭檔,實作固有方法。取得欄位/方法 ID 後,透過 JNI 函數存取。C++ 函數接收 jobject 代表 Java 物件引用。讀取 aValue、列印、修改值、調用 divByTwo()、再次列印。存取欄位/方法必須先獲取標識符,用適當 JNI 函數取得類別物件、元素名、簽名,返回標識符供後續存取。此機制使固有方法不需知曉 JVM 內部物件佈局,不同 JVM 可實現不同內部佈局而不影響固有方法。

區域引用與全域引用生命週期管理

垃圾收集器在固有方法執行期持續運行,但調用期間物件保證不被收集。機制:預先創建「區域引用」,調用後立即清除。生命週期與調用相關,保證物件有效性。區域引用每次調用創建銷毀,不可儲存於 static 變數。需持久有效引用時使用「全域引用」:非 JVM 自動創建,程式設計師調用特定 JNI 函數將區域引用擴展為全域引用。創建全域引用時需負責引用物件「生存時間」,直至明確釋放。類似 C malloc()/free()。

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