深入理解JVM之 04——Linux下自己动手编译OpenJDK

前言

学习《深入理解JAVA虚拟机—JVM高级特性与最佳实践》(周志明,第二版),作者在开篇第一章作了一些介绍后就提出:

想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原型。虽然门槛会高一点,但肯定比阅读各种书籍、文章更加贴近本质。另外,JDK中的很多底层方法都是本地化(Native)的,需要跟踪这些方法的运作或对JDK进行Hack的时候,都需要自己编译一套JDK。

看后激起了自己些许兴趣、况且“纸上得来终觉浅,绝知此事要躬行”,想更深刻的认识jvm,还得自己亲自去研究一番。于是利用业余时间自己编译一套jdk,现将编译过程分享如下。

编译前注意问题

编译openjdk时,需要提供一个启动jdk(即编译Java的JDK(也称为Bootstrap JDK)),这里我用得是JDK 1.8 ,Bootstrap JDK需为当前编译的openjdk的上一个版本。例如这里编译的openjdk8,就要用>=jdk7作为启动jdk;

环境、工具的准备 
OS:CentOS 7 64bit 
OpenJDK:openjdk-8u40 
Bootstrap JDK:jdk-1.8

依赖准备:
yum groupinstall "Development Tools"  
深入理解JVM之 04——Linux下自己动手编译OpenJDK_第1张图片

yum install libXtst-devel libXt-devel libXrender-devel  

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第2张图片

yum install cups-devel  
深入理解JVM之 04——Linux下自己动手编译OpenJDK_第3张图片

yum install freetype-devel  
深入理解JVM之 04——Linux下自己动手编译OpenJDK_第4张图片    yum install alsa-lib-devel 

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第5张图片

可能以上类库还不够,但在以后的configure操作会有提示你缺哪些类库或者哪些工具,然后根据提示一 一安装好。

过程中若需要安装ccache,点我

构建并编译

//打开要编译的openjdk目录(我的openJDK放在了/usr/local下)
cd /usr/local/openjdk-8u40-src-b25-10_feb_2015
//生成配置信息并构建编译环境
bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/local/jdk1.8.0_121/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
深入理解JVM之 04——Linux下自己动手编译OpenJDK_第6张图片

以上的参数简单作一些说明: 
–with-target-bits=64 :指定生成64位jdk; 
–with-boot-jdk=/usr/local/jdk1.8.0_121/:启动jdk的路径; 
–with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别; 
–enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,并且不压缩;

若在configure过程中提示安装工具,则在安装完工具后执行make clean进行清理方可再次configure,否则会config不成功。

configure成功后执行make 编译工作,这将是个漫长的等待过程,网上说这个过程很长,不过讲真,我这里还是挺快。我用的还是VirtualBox虚出来的,只用了23分钟。
深入理解JVM之 04——Linux下自己动手编译OpenJDK_第7张图片

//开始编译

make all ZIP_DEBUGINFO_FILES=0

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第8张图片

接下来要反安装掉CENTOS里内置的OPENJDK7和8

yum list installed |grep java

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第9张图片

继续下面几步删除操作

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第10张图片

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第11张图片

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第12张图片

验证

删除完了配置环境变量

vim /etc/profile

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第13张图片

source /etc/profile 使配置文件重新生效

深入理解JVM之 04——Linux下自己动手编译OpenJDK_第14张图片

java -version 查看编译后的结果

至此、编译完成。

参考资料:

  • 《深入理解JAVA虚拟机—JVM高级特性与最佳实践》(周志明,第二版)
  • https://blog.csdn.net/hjm4702192/article/details/82380749

你可能感兴趣的:(深入理解JVM,手动编译,openJDK,Linux)