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.
简单讲, JamVM 是使用 C 语言实现的精简版的 JVM. 作为入门虚拟机的项目比较适合. 下文用来搭建 JamVM 的开发调试环境, 为进一步分析实现打基础.
为方便起见, 个人在 Github 建了镜像, 由于原项目自2015年后便停止更新, 个人修改会直接推送到主分支.
以下为编译步骤, 假设用户为 macos 用户.
使用 vagrant 来管理虚拟机, 在虚拟机里编译.
# 安装必要依赖 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.
gdbserver :1234 /usr/local/jamvm/bin/jamvm HelloWorld 复制代码
注意点1, gdb 不要使用 clion 自带的. 注意点2, localpath 改为项目根目录
与正常 Debug 一致, 断点, next, step, continue.....
记录了 macos 系统下 JamVM 的开发调试环境搭建. 如果是 linux 系统, 环境就更简单了, 不需要使用虚拟机了.
个人记录, 如有错误遗漏之处, 请看官指出, 以修正.