HotSpot源碼閱讀和解析
從零開始閱讀HotSpot源碼
一幽歼、獲取并構建HotSpot 源碼
HotSpot 源碼下載地址:
https://github.com/openjdk/jdk/tree/jdk8-b120
一、準備環(huán)境
1.1谬盐、服務器資源
操作系統(tǒng):Centos 8.5 x64
操作軟件:CLion(JetBrains的產品)
# cat /proc/version
Linux version 3.10.0-1160.59.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Feb 23 16:47:03 UTC 2022
# uname -a
Linux localhost.localdomain 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
二甸私、下載源碼(OpenJDK8)
1.安裝hg 服務
yum install mercurial -y
2.使用hg 下載openjkd到 opt 目錄
cd /opt
3.更新代碼,操作和Git類似
cd /opt/jdk8u
hg pull
4.獲取完整源碼(下載時間較長)
sh get_source.sh
三飞傀、編譯源碼
構建JDK8需要使用JDK7 update 7或者更高的版本作為引導(Bootstrap)JDK,但不應該使用JDK8作為引導JDK砸烦;
JDK7下載: https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
這里下載:jdk-7u80-linux-x64.tar.gz
1.將jdk-7u80-linux-x64.tar.gz文件上傳到linux
使用Xftp 7 或者 rz 命令上傳文件工具即可:
上傳到linux下的:/opt/tools/目錄下
2.解壓jdk7到/opt 目錄下
cd /opt/tools
tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt
3.配置
cd /opt/jdk8u
chmod -x configure
4.安裝編譯所需要的工具包
yum install -y unzip zip libXtst-devel libXt-devel libXrender-devel cups-devel freetype-devel alsa-lib-devel fontconfig-devel
yum group info 'Development Tools'
yum groupinstall -y “Development Tools”
5.配置編譯環(huán)境
./configure --with-target-bits=64 --with-boot-jdk=/opt/jdk1.7.0_80/ --with-debug-level=slowdebug --with-native-debug-symbols=internal
配置說明:
–with-target-bits=64 :指定?成64位jdk弃鸦;
–with-boot-jdk=/opt/jdk1.7.0_80/:jdk7的路徑;
–with-debug-level=slowdebug:編譯時debug的級別幢痘,有release, fastdebug, slowdebug 三種級別唬格;
6.編譯(編譯時間較長、耐心等待)
make all
7.測試
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-root_2022_06_14_21_00-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)
8.復制拷貝一份
zip jdk8u.zip jdk8u -r
四颜说、Windows 遠程調試
1.linux環(huán)境準備
yum install cmake -y
yum install gcc-c++ -y
yum install gdb -y
yum install gdb-gdbserver -y
2.Windows環(huán)境準備
1.首先用Clion新建一個空項目
2.設置遠程調試
3.同步代碼(windows上的代碼需要和CentOS上的代碼一樣)連接信息
4.對應目錄购岗,本地目錄為新建的OpenJDK8項目目錄
5.同步時要排除本地目錄
6.下載遠程代碼(下載之后linux上的代碼,可能會丟失某些文件门粪,所以先把linxu的源碼備份一次)
7.設置遠程調試喊积,地址為CentOs地址,端口隨意
8.Linux環(huán)境準備
將jdk8u還原
unzip jdk8u.zip
linux啟動GDB玄妈,端口與之前的對應(1234)
gdbserver :1234 /opt/jdk8u/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
linux啟動1234端口(防火墻)
vi /etc/sysconfig/iptables
略
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT
重啟防?墻
service iptables restart
4.打上斷點乾吻,啟動的Debug(比較慢,載入libjvm.debuginfo的時候)
結束