1 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是一個(gè)C++中獲得虛擬機(jī)的example,是在JDK 1.1中實(shí)現(xiàn)的,現(xiàn)在已經(jīng)跑不通了,經(jīng)供參考,但是里面得到虛擬機(jī)原理是一樣的。
它用到了3個(gè)方法: Create VM,Attaching VM,Unloading VM.
JNI_CreateJavaVM() 方法用來加載和初始化一個(gè)java虛擬機(jī)并且返回JNI接口的指針(JNIEnv), 這個(gè)線程被看做是主線程。
JNIEnv是在當(dāng)前線程中是合法的,如果其他的線程去訪問java虛擬機(jī),他必須調(diào)用一下AttachCurrentThread()方法,把自己附屬到VM中才能獲得JNIEnv。一旦調(diào)用成功,native的線程就像一個(gè)普通的java線程運(yùn)行在native的線程中(native中的線程都是Linux線程,由內(nèi)核調(diào)用執(zhí)行)。native線程仍然連接到VM,直到它調(diào)用DetachCurrentThread()來分離。
主線程不能從VM中分離自己,必須調(diào)用DestroyJavaVM()方法去卸載整個(gè)VM。
- 1 回答
- 0 關(guān)注
- 866 瀏覽
添加回答
舉報(bào)