Java虛擬機相當于一個堆棧計算機,它在指令間傳送信息時不使用任何物理寄存器,而使用堆棧的幀來表示方法的狀態、字節碼的操作對象、方法的參數空間及局部變量的空間,它的“程序計數器”為一個偽寄存器,是當前所執行指令的字節碼數組的一個指針。
Java實現方法
Java有兩種實現方法:Java方法和本地方法。Java方法是由Java語言編寫,編譯成字節碼,存儲在class文件中。本地方法是由其他語言(比如C,C++,或者匯編語言)編寫的,編譯成和處理器相關的機器代碼,保存在動態連接庫中,格式是各個平臺專有的,它是聯系Java程序和底層主機操作系統的連接方法。Java方法與平臺無關,但是本地方法卻不是,運行中的Java程序調用本地方法時,虛擬機裝載包含這個本地方法的動態庫,并調用這個方法。通過本地方法,Java程序可以直接訪問底層操作系統的資源,使程序和特定的平臺相關,一個本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主機系統的任何一個Java平臺上運行。
J2ME中的CDC移植的解決方案
我們選用的要移植的Java虛擬機是Sun公司提供的J2ME對于數字電視領域CDC配置,該虛擬機是針對Linux的軟件實現(用C語言編寫的虛擬機,該虛擬機也稱為CVirtualMachine,簡稱CVM)。Java虛擬機規范并沒有強求Java虛擬機必須支持任何特定的本地方法接口,但是Sun公司提供了本地方法接口(JavaNativeInterface),是為移植所用。Java程序通過調用本地方法和主機交互。
Java虛擬機
圖2Java虛擬機的位置
虛擬機處于嵌入式操作系統OS20上,因此Sun公司提供的Java虛擬機中與底層操作系統相關的操作都應該替換為OS20的內核函數。因此將Sun公司提供的CDC移植到OS20需要完成一些工作,比如:C語言中關于基本數據類型的數據位的修改,關于線程的創建機制(OS20為任務),關于線程之間的同步、互斥,關于動態連接的實現,關于本地方法的實現等,本節主要介紹關于本地方法的實現過程。