JamVM is an open-source Java Virtual Machine that aims to support the latest version of the JVM specification, while at the same time being compact and easy to understand.java
簡單講, JamVM 是使用 C 語言實現的精簡版的 JVM. 做爲入門虛擬機的項目比較適合. 下文用來搭建 JamVM 的開發調試環境, 爲進一步分析實現打基礎.linux
爲方便起見, 我的在 Github 建了鏡像, 因爲原項目自2015年後便中止更新, 我的修改會直接推送到主分支.
如下爲編譯步驟, 假設用戶爲 macos 用戶.
使用 vagrant 來管理虛擬機, 在虛擬機裏編譯.git
# 安裝必要依賴
brew install vagrant
brew install virtualbox
brew install gdb
# 克隆項目
cd $HOME
git clone git@github.com:guxingke/jamvm.git
# 啓動虛擬機
cd jamvm
vagrant up
// 若是初始化報錯了, 執行 vagrant reload , 通常會成功.
複製代碼
vagrant ssh
# 正常狀況下,會進入新的 shell.
複製代碼
cd $HOME
# gnu classpath
wget 'https://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz'
tar -xvf classpath-0.99.tar.gz
cd classpath-0.99/
export ANTLR_JAR=/usr/share/java/antlr4.jar
./configure --disable-gtk-peer --disable-gconf-peer --disable-plugin
make -i
sudo make -i install
# jamvm
cd /vagrant
./autogen.sh
./configure
make
sudo make install
# 驗證
echo "public class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World\"); } }" > HelloWorld.java
javac HelloWorld.java
/usr/local/jamvm/bin/jamvm HelloWorld
# 輸出 hello world 即正常編譯
複製代碼
本地使用 Clion 調試虛擬機內 JamVM.github
gdbserver :1234 /usr/local/jamvm/bin/jamvm HelloWorld
複製代碼
注意點1, gdb 不要使用 clion 自帶的. 注意點2, localpath 改成項目根目錄shell
與正常 Debug 一致, 斷點, next, step, continue.....macos
記錄了 macos 系統下 JamVM 的開發調試環境搭建. 若是是 linux 系統, 環境就更簡單了, 不須要使用虛擬機了.bash
我的記錄, 若有錯誤遺漏之處, 請看官指出, 以修正.ssh