作为一位程序员,我坚信了解一件事物的最佳方式是深入到它的最底层去研究其运行的原理。既然我大部分时间都在写Java代码,那么就肯定需要了解JVM的运行原理。所以上周尝试了编译了一下JVM的开源实现:OpenJDK。
准备工作
在开始编译之前,首先需要一些准备工作:
- 操作系统:建议在2.x内核的Linux系统上编译,在Windows下编译的话还要装CYGWIN,比较麻烦,如果你在3.0以上内核版本的Linux下编译,首先你会遇到一个This OS is not supported的错误,然后即使你在编译的时候加上了DISABLE_HOTSPOT_OS_VERSION_CHECK=ok这个选项,你可能会遇到一些宏定义找不到之类的编译错误。
- 源代码:编译OpenJDK当然需要OpenJDK的源代码,可以从这里下载
- 依赖:编译OpenJDK所需的东西在下载过来的源代码包里面的README_builds.html中都有列出,这里列出一些大概的依赖,具体所需的版本可以在README_builds.html中找到:OpenJDK(是的,编译OpenJDK需要一个OpenJDK,有点鸡生蛋,蛋生鸡的感觉),make,g++,ant,axel(Linux声音相关),X11(图形相关,编译awt的时候需要),freetype2(字体相关)等
- 环境变量:编译以前请先分别设置语言和编译所需的OpenJDK的路径:
1 |
export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk
|
编译
安装好所需的依赖以后,可以用以下命令检查一下依赖是否都已经正确安装了:
如果输出没有错误,则可以用一下命令编译:
1 |
make ALLOW_DOWNLOADS= true
|
加上ALLOW_DOWNLOADS=true的原因是编译过程中ant可能会需要下载一些东西,如果你要编译一个DEBUG版本,则可以用以下命令
1 |
make debug_build ALLOW_DOWNLOADS= true
|
遇到的问题
我在编译过程还是遇到了不少问题,首先在Ubuntu 11.10下编译,遇到了前面提到的Linux内核3.0的问题,后来改到在CentOS 6下编译。
在CentOS下编译首先遇到了一个ant的一个类找不到的问题(在一个叫optional的package下),后来看了一下我直接用yum install安装的ant默认并没有安装一些optional的包,后来又用yum install安装了那个类对应的包,算是解决了这个错误。如果读者是直接在ant的官方网站下载安装应该不会有这个问题。
再之后就是在编译过程中遇到了很多缺少X11的头文件的错误,幸好发现yum有yum provides这个命令可以找到头文件所在的包,然后用yum install安装。(:-),一直在Ubuntu下用apt-get的孩子伤不起啊~~)
整个编译过程大概需要1个多小时(AMD速龙3800,2G RAM,单Job),这个期间可以搞点下午茶吃吃,搞部小电影看看~~
最后感谢下方攀同学在过程中提供的帮助,^_^
分享到:
相关推荐
OPENJDK-7 windows编译之后版本
具体编译过程可以参考https://blog.csdn.net/u014106644/article/details/89316483
主要是编译openjdk需要的包
openjdk7的langtools源码,可以进行openjdk的编译调试
openjdk 8 编译JDK结果,自己编译,可以代替oracle jdk使用。具体编译方法也在我的共享中上传,希望对你有帮助。
含有Linux jdk7 OpenJdk7 以及编译出错时需要用到的压缩包
内含1.apache-ant-1.9.13-bin.zip 2.jdk-6u45-linux-x64.bin 3.openjdk-7u6-fcs-src-b24-28_aug_2012.zip 4.freetype-2.3.12.tar.gz
java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本
已编译好的java.net官网的windows版的openjdk7下载 part2 请下载共2part以后放在同一个文件夹里面解压(推荐360压缩,我是用这个加压的) 所有下载链接: http://blog.csdn.net/qgmzzn1/article/details/16918153
只能是自己编译了,Linux系统ARM架构的CPU环境通用。 二进制包需要自己配置环境变量,我一般是配置在/etc/profile.d/java.sh JAVA_HOME=/opt/jdk1.8.0_352 PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME PATH 配置...
Ubuntu 16.04.5 LTS下编译openjdk-7u75,包含具体步骤以及截图
openjdk6 源代码,分开也上传一份,省得太大了。
在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供大家自己编译属于自己的jdk版本,已经阅读openjdk源码帮助学习。在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供...
Win7下编译openjdk8源代码 完整版本 原创,希望对于想了解jvm底层的同仁有帮助。好的话,请点个赞。哈哈。
openjdk11 full javafx
openjdk.txt linux上编译指令
已编译好的java.net官网的windows版的openjdk7下载 part1 请下载共2part以后放在同一个文件夹里面解压(推荐360压缩,我是用这个加压的) 所有下载链接: http://blog.csdn.net/qgmzzn1/article/details/16918153
已编译完成的windows安装版openjdk 已编译完成的windows安装版openjdk
openjdk-8-jdk_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jre_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jdk-headless_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jre-headless_8u91-b14-0ubuntu4~14.04_...
openjdk15