编译环境 操作系统 centos6.8
调用 auotgen 脚本
autoconf2.1
libtool
安装 zlib
zlib 是 jamvm 的惟一的依赖。下载地址见下面的链接。
在这里使用 zlib-1.2.3
1 2 3 4 5 6 7 tar axvf zlib-1.2.3.tar.gz cd zlib-1.2.3./configure --shared --prefix=/usr make install yum install zlib-devel
编译安装 jamvm
下载到 jamvm-2.0.0.tar.gz
1 2 3 4 5 6 tar axvf jamvm-2.0.0.tar.gz cd jamvm-2.0.0./configure --with-java-runtime-library=openjdk7 ./configure --host=i686-pc-linux CFLAGS="-ggdb3 -O0" CXXFLAGS="-ggdb3 -O0" make install
最后安装完成之后,其目录在 /usr/local/jamvm 中。
安装 openjdk
1 yum install java-1.7.0-openjdk
安装路径 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib/amd64/server
貌似 openjdk 不支持。
使用
在 oracle-jdk 1.7 中可以正常使用。方法就是直接替换 $(JDK_HOME)/jre/lib/amd64/server/libjvm.so 文件,就可以了。
1 2 3 4 5 java -version java version "1.7.0_67" Java(TM) SE Runtime Environment (build 1.7.0_67-b01) JamVM (build 2.0.0, inline-threaded interpreter)
可以看到 jvm 已经从 hotspot 替换为 JavmVM 了。
编译 GNU classpath
1 2 3 4 5 6 7 8 9 yum install GConf2-devel yum install gtk2 yum install gtk2-devel yum install libgcj-devel yum install java-1.5.0-gcj yum install java-1.5.0-gcj-devel yum install antlr ./configure CFLAGS=-fno-strict-aliasing
安装成功之后的class 位于 /usr/local/classpath/share/classpath
路径下分别是 glibj.zip 和 tools.zip
源码学习 使用 gdb 调试 jamvm 1 2 3 4 5 6 7 8 9 10 11 12 13 set print pretty onprint *(ClassBlock*)(main_class+1)print *(<Type>*)(<addr>)print (char*)0x751770
比较 hotspot 定义 Class 是在 openjdk\hotspot\src\share\vm\classfile 这个路径下的所有文件就是用来加载解析,其中 classFileParser.cpp 这个文件中的是核心用来解析 .class 文件。ClassFileParser::parseClassFile 方法向外部提供接口。
编译openjdk 编译环境 centos6.8
编译 hotspot /usr/local/src/openjdk/hotspot/make
1 2 3 4 5 6 7 8 9 10 11 12 13 yum groupinstall "Development tools" wget http://www.java.net/download/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip yum install java-1.6.0-openjdk-devel ALT_BOOTDIR=/etc/alternatives/java_sdk_1.6.0 export ALT_BOOTDIR yum install glibc-devel.i686 yum install libstdc++-devel.i686
http://download.java.net/openjdk/jdk7
安装 cygwin 注意安装32位
安装 cyg-apt 通过 setup.exe 安装 lynx
1 2 3 4 lynx -source https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg install apt-cyg /bin ln -s /bin/apt-cyg /bin/yum yum install wget
此后,就可以使用 yum 进行安装了。
在 cygwin 中编译安装 gnuclasspath 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 yum install gcc-java yum install autoconf yum install libtool yum install automake yum install gettext-devel cd /usr/srcwget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar axvf libiconv-1.14.tar.gz cd libiconv-1.14./configure make && make install wget http://ftp.mirrorservice.org/sites/sourceware.org/pub/java/ecj-4.5.jar gcj -oecj1.exe --main=org.eclipse.jdt.internal.compiler.batch.GCCMain ecj-4.5.jar cd /usr/lib/gcc/i686-pc-cygwin/5.4.0mv ecj1.exe ecj1.exe.origin cp ~/ecj1.exe . cd /usr/local /srcgit clone git@github.com:a-ray-of-sunshine/classpath.git cd classpathgit checkout dev ./autogen.sh ./configure --disable -gtk-peer --disable -gconf-peer --disable -gjdoc --with-antlr-jar=/usr/src/classpath-code/antlr-2.7.5.jar make && make install
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 yum install make yum install gcc-g++ yum install gcc-java cd /usr/src/classpath-0.99wget http://www.antlr.org/download/antlr-4.7-complete.jar ./configure --disable -gtk-peer --disable -gconf-peer --disable -gjdoc --with-antlr-jar=antlr-4.7-complete.jar mkdir /usr/local /lib/javalib wget http://central.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.jar wget http://www.antlr3.org/download/antlr-3.5.2-complete.jar ln -s /usr/local /lib/libiconv.dll.a /lib/libiconv.dll.a gcj -oecj1.exe --main=org.eclipse.jdt.internal.compiler.batch.GCCMain /usr/share/java/ecj.jar gcj -oecj4.exe --main=org.eclipse.jdt.internal.compiler.batch.GCCMain ecj-4.5.jar ./configure --disable -gtk-peer --disable -gconf-peer --disable -gjdoc --with-antlr-jar=/usr/src/classpath-0.99/antlr-3.5.2-complete.jar D:\cygwin\usr\src\classpath-0.99\tools\gnu\classpath\tools\gjdoc\expr>java -cp D :\cygwin\usr\src\classpath-0.99\antlr-2.7.5.jar antlr.Tool java-expression.g
cygwin 安装 gnuclasspath 1 2 3 4 5 6 7 8 9 10 11 yum install gcc-java wget http://www.antlr2.org/download/antlr-2.7.5.jar ./configure --disable -gtk-peer --disable -gconf-peer --disable -gjdoc --with-antlr-jar=/usr/src/classpath-code/antlr-2.7.5.jar
cygwin 中安装 jamvm 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cd /usr/local /srcgit clone git@github.com:a-ray-of-sunshine/jamvm.git git checkout dev ./autogen.sh --host=i686-pc-linux CFLAGS="-ggdb3 -O0" CXXFLAGS="-ggdb3 -O0" make && make install cd /usr/local /classpath/lib/classpathln -s cygjavaio-0.dll libjavaio.so ln -s cygjavalang-0.dll libjavalang.so ln -s cygjavalangmanagement-0.dll libjavalangmanagement.so ln -s cygjavalangreflect-0.dll libjavalangreflect.so ln -s cygjavanet-0.dll libjavanet.so ln -s cygjavanio-0.dll libjavanio.so ln -s cygjavautil-0.dll libjavautil.so
$. 参考
zlib
jamvm
How to download and install prebuilt OpenJDK packages
gnu classpath
Java™ Native Interface
使用jconsole监控JVM虚拟机
classpath-0.99
Strict Aliasing,神坑?
Understanding C/C++ Strict Aliasing
Understanding Strict Aliasing
cygwin setup-x86
gcc
ecj
libiconv
antlr2
ecj–