相比windows下編譯openjdk8,linux下的坑並不少,這裡為了方便選擇了Ubuntu 14.04 64位元的作業系統,基本的linux命令操作一筆帶過,有疑問可自行搜索。(別選16.04,問題比較多:make降級、gcc版本高、libfreetype問題等)
1. 不用說,先搭環境,建立虛擬機。安裝完之後,做以下操作:
1). 把當前登入帳戶加入sudoer.
2). 添加國內apt-source mirror:在寫此文時,阿里雲鏡像有些問題,我用的是網易。
3). sudo apt-get update
4). sudo apt-get install openssh-server vim openjdk-7-jdk g++
5). 安裝完openssh-server可用putty登入,此步可選。
2. 安裝依賴庫,並編譯
1). sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libfreetype6-dev libcups2-dev libasound2-dev
2). 把openjdk源代碼解壓,我下載的是"openjdk-8-src-b132-03_mar_2014",可自行搜索或者去github下載。
3). 進入openjdk目錄,chmod +x ./configure
4.) ./configure --with-target-bits=64 --with-debug-level=slowdebug
5). 成功後,為下圖所示。
6). 修改:vim ./hotspot/make/linux/Makefile 228行,添加4%,使其支持4.x內核。
7). make all ZIP_DEBUGINFO_FILES=0 JOBS=16 ( JOBS參數 根據虛擬機不同配置而設置)
8). 編譯成功如下圖:
3. 修改hotspot啟動腳本
1). cd ./build/linux-x86_64-normal-server-slowdebug/hotspot/linux_amd64_compiler2/debug,從名字可見,JDK8默認的是C2編譯,此編譯在啟動時會做一些分析再去優化:逃逸分析、棧上分配等。
2). 修改hotspot,其實是一個shell 腳本。由於目錄過長,可執行export PS1="[\u@\h \W]\$"。找到102行,改為對應的JDK目錄。
3). 找到170行,把break JNI_CreateJavaVM改為break JavaMain(可選)。JavaMain是虛擬機的主入口,在openjdk\jdk\src\share\bin\java.c中。
4). 執行./hotspot -gdb,可看到以下信息:
5). 編譯成功。