摘要:準備工作假設(shè)源代碼目錄為編譯時啟用了解釋器參考編譯和調(diào)試調(diào)用棧先在函數(shù)參考虛擬機入口中設(shè)斷點,然后在的方法中設(shè)置斷點通過宏獲取當前,然后創(chuàng)建第個棧幀,然后進入解釋執(zhí)行字節(jié)碼
準備工作
假設(shè) openjdk 源代碼目錄為 jdk9dev
編譯 openjdk 時啟用了 zero 解釋器(參考 OpenJDK9 Hotspot Mac OSX 編譯和調(diào)試)
調(diào)用棧先在 JavaMain 函數(shù)(參考 OpenJDK9 Hotpot java 虛擬機入口)中 CallStaticVoidMethod 設(shè)斷點,然后在 CppInterpreter_zero.cpp 的 normal_entry 方法中設(shè)置斷點:
CppInterpreter::normal_entry通過 THREAD 宏獲取當前 thread,然后創(chuàng)建第 0 個棧幀,然后進入 main loop 解釋執(zhí)行 字節(jié)碼
int CppInterpreter::normal_entry(Method* method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread*) THREAD; // Allocate and initialize our frame. InterpreterFrame *frame = InterpreterFrame::build(method, CHECK_0); thread->push_zero_frame(frame); // Execute those bytecodes! main_loop(0, THREAD); // No deoptimized frames on the stack return 0; }CppInterpreter::main_loop
void CppInterpreter::main_loop(int recurse, TRAPS) { ... while (true) { if (JvmtiExport::can_post_interpreter_events()) { BytecodeInterpreter::runWithChecks(istate); } else { BytecodeInterpreter::run(istate); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65924.html
摘要:占用率太高,還出各種奇怪問題,轉(zhuǎn)投調(diào)試安裝下載源代碼漫長等待,中間無數(shù)次中斷安裝安裝可選如果要使用解釋器,需要安裝設(shè)置調(diào)試級別,設(shè)成可以提供更多的調(diào)試信息設(shè)置路徑 Intellij CLion CPU 占用率太高,還出各種奇怪問題,轉(zhuǎn)投 Xcode 調(diào)試 hotspot 安裝 hg # brew install hg 下載 open jdk 9 源代碼 # hg clone http...
摘要:前言網(wǎng)上各路大神總結(jié)過各種關(guān)于內(nèi)部實現(xiàn),看別人的文章總覺得不過癮,所以有了這篇文章,嘗試再扒一次的底褲數(shù)據(jù)結(jié)構(gòu)在分析源代碼之前需要了解相關(guān)概念,比如等,參考網(wǎng)絡(luò)上各種解說或者之前系列文章,這里重點介紹一下,,每個在內(nèi)部都有一個的對象與之對應(yīng) 前言 網(wǎng)上各路大神總結(jié)過各種關(guān)于 hotspot jvm synchronized 內(nèi)部實現(xiàn),看別人的文章總覺得不過癮,所以有了這篇文章,嘗試再扒...
摘要:前言語言可以精確控制對象內(nèi)存分配,出于性能考慮框架系統(tǒng)程序基本都會自己造輪子開發(fā)各種內(nèi)存管理模塊也不例外,它通過和方法的訪問級別以及重載和方法來管理虛擬機內(nèi)部對象的內(nèi)存內(nèi)存管理相關(guān)的基類定義了幾個基類來作為大部分對象的基類顧名思義,它們只能 前言 C++ 語言可以精確控制對象內(nèi)存分配,出于性能考慮 C++ 框架 or 系統(tǒng)程序基本都會自己 造輪子 開發(fā)各種內(nèi)存管理模塊. hotspot...
摘要:前言本文從類的方法的內(nèi)部實現(xiàn)入手,分析多線程相關(guān)的數(shù)據(jù)結(jié)構(gòu)類和原理類方法類的方法用于啟動線程,方法內(nèi)部調(diào)用了方法在源代碼中搜索,可以看到對應(yīng)函數(shù)在源代碼中搜索函數(shù)核心代碼計算線程堆棧大小創(chuàng)建對象初始化啟動線程在創(chuàng)建時傳入了一個函數(shù)指針, 前言 本文從 Java Thread 類的 start 方法的內(nèi)部實現(xiàn)入手,分析 Hotspot JVM 多線程相關(guān)的數(shù)據(jù)結(jié)構(gòu)(類)和原理 Threa...
摘要:假設(shè)源代碼目錄為函數(shù)函數(shù)在,它處理完命令行參數(shù)后跳轉(zhuǎn)到函數(shù)處理命令行選項函數(shù)在,它調(diào)用加載這個就是編譯的產(chǎn)出在系統(tǒng)下在使用加載動態(tài)庫并獲取函數(shù)入口地址在系統(tǒng)下在熟悉的同學(xué),對下面的代碼應(yīng)該會感到很親切創(chuàng)建對象,并將控制流跳轉(zhuǎn)到呵呵,在 假設(shè) openjdk 源代碼目錄為 jdk9dev main函數(shù) main 函數(shù)在 jdk9dev/jdk/src/java.base/share/na...
閱讀 3095·2021-10-15 09:41
閱讀 3167·2021-09-22 16:05
閱讀 2405·2021-09-22 15:19
閱讀 2873·2021-09-02 15:11
閱讀 2446·2019-08-30 15:52
閱讀 832·2019-08-30 11:06
閱讀 1001·2019-08-29 16:44
閱讀 1241·2019-08-23 18:18