Java虛擬機是Java開發(fā)者最常使用的平臺,了解其中的運行原理可以幫助我們成為更好的開發(fā)者、遇到問題更快解決。對于很多虛擬機知識點,大多數(shù)人通常是通過看書或文章來" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 手把手教你構(gòu)建、debug、開發(fā)Java虛擬機

手把手教你構(gòu)建、debug、開發(fā)Java虛擬機

時間:2023-07-01 02:21:01 | 來源:網(wǎng)站運營

時間:2023-07-01 02:21:01 來源:網(wǎng)站運營

手把手教你構(gòu)建、debug、開發(fā)Java虛擬機:

目的







Java虛擬機是Java開發(fā)者最常使用的平臺,了解其中的運行原理可以幫助我們成為更好的開發(fā)者、遇到問題更快解決。對于很多虛擬機知識點,大多數(shù)人通常是通過看書或文章來了解相關(guān)知識的。這樣的缺點是一個知識經(jīng)過了兩次信息理解傳遞,可能導(dǎo)致信息不準,那么為什么不自己去探究虛擬機的實現(xiàn)原理呢。了解自己常使用的工具的原理,便于更好的使用工具,就像更了解輪胎的賽車手能更好地駕駛汽車、更了解鍋和菜刀的廚師可以練出更好的廚藝。而了解虛擬機的最直接的方式就是去構(gòu)建、debug、開發(fā)它!













下載代碼







openjdk的代碼在mercurial中,下載起來很慢。我們使用github上的mirror即可,這里選擇了一個比較新的jdk14分支,代碼比較多,下載時間會稍長一些。







git clone https://github.com/openjdk/jdk14u





編譯







為了構(gòu)建虛擬機、以及debug調(diào)試,需要對代碼進行編譯。







編譯依賴







編譯依賴Xcode,通過AppStore搜索下載安裝就可以。
編譯jdk需要一個低一些版本的jdk作為boot jdk,對于jdk14先到j(luò)dk官網(wǎng)下載安裝一下jdk13







然后安裝編譯需要的一些依賴包







brew install autoconf freetype ccache





開始編譯







#首先cd到代碼目錄中cd jdk14u# 進行configurebash configure --with-debug-level=slowdebug --enable-dtrace --with-jvm-variants=server --with-target-bits=64 --enable-ccache --with-num-cores=8 --with-memory-size=8000 --disable-warnings-as-errors# 進行make,這個過程稍久一些make all


make成功



















驗證下build出來的熱乎的jdk










./build/macosx-x86_64-server-slowdebug/jdk/bin/java -version

















導(dǎo)入IDE







openjdk中的代碼包含了Java(jdk各種jar包)和C++(hotspot虛擬機部分),本文主要針對hotspot部分。
現(xiàn)代化的IDE是閱讀、開發(fā)、調(diào)試代碼的好工具,這里推薦使用Jetbrains公司(也是開發(fā)IntelliJ Idea的)提供的CLion。







打開CLion后,選擇File -> New CMake Project from Sources..

選擇jdk14u下面的src/hotspot目錄,然后點OK。
CLion會幫助我們配置好CMake項目使用的CMakeLists.txt,并且構(gòu)建代碼索引、符號表等,等待加載完成。
加載后完成點擊Clion右上角部分的hotspot|Debug這里,添加一個新的Configuration。












點擊Configure Custom Build Targets,點擊Add target。



















name設(shè)置成build openjdk,點擊Build右邊的…,創(chuàng)建External Tools, 點擊左下角加號,創(chuàng)建一個Tool,name填make, Program填make,Working directory填下載的openjdk的代碼的目錄的路徑位置,點擊OK,保存。































然后在Run/Debug Configurations頁面中,Target選擇剛才創(chuàng)建好的target。Executable選擇build出來的jdk的java文件,即上兩層目錄下的jdk14u/build/macosx-x86_64-server-slowdebug/jdk/bin/java。Program arguments暫時填一個 -version。最后點擊Apply OK保存。



















然后點擊debug



















經(jīng)過幾個斷點后,可以看到熟悉的java -version的結(jié)果



















解決IDE代碼大量紅色提示







我們隨便打開幾個cpp文件,發(fā)現(xiàn)里面有大量的紅色的提示,讓不是強迫癥的我都有些難受,并且問題較大的是不能夠跳轉(zhuǎn),給代碼閱讀帶來了很大困難,還是要解決一下。
這里主要原因是一些代碼路徑問題,我們修改下CMakeLists.txt,先加上這幾行,然后點擊Reload changes,大部分代碼都正常了,如果有遇到其他的,可以按照類似方法解決。并且即使是紅色提示,大部分代碼都是可跳轉(zhuǎn)的。







include_directories(share)include_directories(../java.base/unix/native/include)include_directories(../java.base/share/native/include)include_directories(../../build/macosx-x86_64-server-slowdebug/jdk/include)include_directories(../../build/macosx-x86_64-server-slowdebug/hotspot/variant-server/gensrc)include_directories(../../build/macosx-x86_64-server-slowdebug/hotspot/variant-server/gensrc/jvmtifiles)














修改hotspot代碼







這里我們對代碼進行一些簡單的修改,驗證一下修改流程。
找到執(zhí)行java -version的相關(guān)代碼, abstract_vm_version.cpp,用目前不太熟悉的C++語言打印出一個Hello World。然后重新點擊debug按鈕。



















其他問題







根據(jù)jdk版本不同,編譯主機環(huán)境不同,上述步驟可能會遇到一些其他問題,不過定位問題、解決問題的方法還是不變的。







總結(jié)







上述部分就是編譯、debug、開發(fā)openjdk的一個簡單流程了,授人以魚不如授人以漁,有了這些方法就可以更方便的查看實現(xiàn)以及排查問題了。
但是最后也要提醒大家保持初心、不要過于沉溺于底層實現(xiàn)、不要盲目崇拜開發(fā)虛擬機認為是什么高深莫測的工作。這里引用王垠的一段話




每當有人向我表示編譯器高深莫測,向往卻又高攀不上,我都會給他打一個比方:做編譯器就像做菜刀。你可以做出非常好的菜刀,然而你終究只是一個鐵匠。鐵匠不知道如何用這菜刀做出五花八門,讓人心曠神怡,米其林級別的菜肴,因為那是大廚的工作。要做菜還是要打鐵,那是你自己的選擇,并沒有貴賤之分。



























本文使用 文章同步助手 同步

關(guān)鍵詞:虛擬,把手

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉