無(wú)標(biāo)Ubuntu 14.04 GDB調(diào)試OpenJDK8(二)-從main.c開(kāi)始(下)題文章

接著來(lái)看下JavaMain函式坝撑,首先這是一個(gè)線(xiàn)程蜂厅,所以參數(shù)類(lèi)型是void*愉择。進(jìn)入InitializeJVM劫乱,再進(jìn)入ifn->CreateJavaVM,CreateJavaVM是函式指標(biāo)锥涕,調(diào)用hotspot中jni.cpp中的JNI_CreateJavaVM衷戈。

JNI_CreateJavaVM

注意,JNI_CreateJavaVM為STDCALL层坠,函式自己清空調(diào)用堆棧殖妇。

_JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args)

一路往下,注意兩個(gè)重要變數(shù)的賦值破花,thread::create_vm先跳過(guò)谦趣。其中疲吸,在下圖完成賦值,JNIInvokeInterface_裡面都是一些函式指標(biāo)前鹅。

JNI.cpp:JavaVM,JNIEnv
JNIInvokeInterface_

JNIEnv是一個(gè)大結(jié)構(gòu)體摘悴,可見(jiàn)主要是對(duì)functions賦值,過(guò)程如下:

JNI.h

1. 執(zhí)行上述的Thread::create_vm -> JavaThread* main_thread = new JavaThread() -> initialize() ->set_jni_functions(jni_functions());

2. jni_functions返回jni_NativeInterface舰绘,jni_NativeInterface是在jni.cpp中的一個(gè)結(jié)構(gòu)體蹂喻。

JNI.cpp

3. set_jni_functions完成設(shè)置。

thread.hpp

回到JavaMain除盏,接著調(diào)用LoadMainClass叉橱,會(huì)加在LauncherHelper.java中的checkAndLoadMain方法。之後就是hotspot層面的一些工作:GetStaticMethodID者蠕、CallStaticMethodID窃祝,這些都是宏,比較難跟蹤踱侣,舉一個(gè)例子說(shuō)明粪小。

JNI.CPP

1. 最終會(huì)調(diào)get_method_id,之前的宏採(cǎi)用預(yù)處理一下抡句,僅編譯JNI.cpp(gcc工程自行修改探膊,這裡用Visual Studio 2010)。

2. 預(yù)處理後的代碼:

After Preprocessor

3. 最後調(diào)用LEAVE()這個(gè)宏待榔,銷(xiāo)毀虛擬機(jī)的一些工作逞壁。

4. Thread::create_vm較複雜,有興趣的自己分析锐锣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腌闯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雕憔,更是在濱河造成了極大的恐慌姿骏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斤彼,死亡現(xiàn)場(chǎng)離奇詭異分瘦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)琉苇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)嘲玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人并扇,你說(shuō)我怎么就攤上這事趁冈。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵渗勘,是天一觀(guān)的道長(zhǎng)沐绒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旺坠,這世上最難降的妖魔是什么乔遮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮取刃,結(jié)果婚禮上蹋肮,老公的妹妹穿的比我還像新娘。我一直安慰自己璧疗,他們只是感情好坯辩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著崩侠,像睡著了一般漆魔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上却音,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天改抡,我揣著相機(jī)與錄音,去河邊找鬼系瓢。 笑死阿纤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夷陋。 我是一名探鬼主播欠拾,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骗绕!你這毒婦竟也來(lái)了藐窄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤爹谭,失蹤者是張志新(化名)和其女友劉穎枷邪,沒(méi)想到半個(gè)月后榛搔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诺凡,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年践惑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腹泌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尔觉,死狀恐怖凉袱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤专甩,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布钟鸵,位于F島的核電站,受9級(jí)特大地震影響涤躲,放射性物質(zhì)發(fā)生泄漏棺耍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一种樱、第九天 我趴在偏房一處隱蔽的房頂上張望蒙袍。 院中可真熱鬧,春花似錦嫩挤、人聲如沸害幅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)以现。三九已至,卻和暖如春佩抹,著一層夾襖步出監(jiān)牢的瞬間叼风,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工棍苹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无宿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓枢里,卻偏偏與公主長(zhǎng)得像孽鸡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栏豺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容