文档章节

00.编译OpenJDK-8u40的整个过程

凌晨一点
 凌晨一点
发布于 09/24 00:01
字数 1036
阅读 90
收藏 7

前言

历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理解Java虚拟机》这个本书要啃下来。接下来问题来了,读个这个书的人都知道这个书的第一章就是讲如何编译自己的JDK,书上的东西看着简单,自动动手另外是一回事,经过这么几天折腾体会很深刻,做技术的,还是要踏踏实实的一步步来。好高骛远是大忌。废话不多说,下面给出自己编译过程

环境要求

系统:CentOS7

编译源码版本:OpenJDK-8u40

下载地址:链接:https://pan.baidu.com/s/1LRP_67uBezBqn-gfStlH-A 密码:o65r

Bootstrap JDK:Oracle JDK1.7.0_75

下载地址:链接:https://pan.baidu.com/s/1sKuXkNcnjJp-qCe5_4_qVw 密码:n1fq

ccache版本:3.14

下载地址:链接:https://pan.baidu.com/s/1-qvxAMkaJS1ASSVbNZHkFA 密码:m9fj

编译所以需要的安装包以及系统文件下载地址:

链接:https://pan.baidu.com/s/1Jb1iSSmutZKLmzjncIdRXA 密码:myk9

安装前准备

yum update
yum -y install wget
​
###约定以上的安装包下载上传到/usr/local/src目录

安装编译环境

yum groupinstall "Development Tools"  
yum install libXtst-devel libXt-devel libXrender-devel  
yum install cups-devel  
yum install freetype-devel  
yum install alsa-lib-devel

安装ccache

##进入到/usr/local/src目录
cd /usr/local/src
##解压
tar -zxvf ccache-3.1.4.tar.gz
##安装
cd ccache-3.1.4
##配置编译
./configure
##编译安装,默认是安装在/usr/local/bin/ccache
make && make install

安装Oracle JDK1.7.0_75为Bootstrap JDK

##进入到/usr/local/src
cd /usr/local/src
##创建bootstrap jdk安装的目录
mkdir /usr/local/java
##解压jdk-7u75-linux-x64.tar.gz
tar -zxvf jdk-7u75-linux-x64.tar.gz -C /usr/local/java
##配置环境变量
vi /etc/profile
##在最后面加上jdk环境变量
export JAVA_HOME=/usr/local/java/jdk1.7.0_75
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
###保存立即生效
source /etc/profile

开始编译OpenJDK

##进入/usr/local/src
cd /usr/local/src
##解压openjdk源码
tar -zxvf openjdk-8u40-src-b25-10_feb_2015.tar.gz -C /usr/local
##进入解压目录
cd /usr/local/openjdk
##开始编译配置
bash ./configure 
--with-target-bits=64 
--with-boot-jdk=/usr/local/java/jdk1.7.0_75/ 
--with-debug-level=slowdebug 
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0
##开始编译
make all ZIP_DEBUGINFO_FILES=0
!!!!如果运气好,就等着编译结果吧

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

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

编译结果展示图

 

编译成功后进入到/usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin目录执行 ./java -version 查看jdk版本

cd /usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin
./java -version

接下来我们可以修改环境变量为我们现在自己编译的jdk

vi /etc/profile
#export JAVA_HOME=/usr/local/java/jdk1.7.0_75
export JAVA_HOME=/usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
​
##环境变量生效
source /etc/profile
##测试现在的jdk版本信息
java -version

到此编译自己的JDK就算顺利完成了,昨晚为这个还熬夜到凌晨三点,想着放弃,但是想想都投入了这么长时间放弃可惜,作为一个java开发人员不明白jvm,永远不算一个合格的java程序员。所以这个信念让我坚持有了第一次这么认真。就从这个坎作为我的技术深入研究的起点吧!加油,爱生活,更爱程序.....

知识积累链接:https://gitee.com/shxjinchao/java_knowledge_base

© 著作权归作者所有

共有 人打赏支持
凌晨一点
粉丝 10
博文 56
码字总数 32777
作品 0
昌平
程序员
私信 提问
加载中

评论(2)

凌晨一点
凌晨一点

引用来自“MGL_TECH”的评论

人才,这就是自己的jdk?这是编译安装jdk吧?666

@MGL_TECH 见笑了,前辈很厉害嘛请赐教
MGL_TECH
MGL_TECH
人才,这就是自己的jdk?这是编译安装jdk吧?666
ubuntu编译并调试OpenJDK8源码实践

最近打算研究一下 jvm 相关的知识,所以想编译 OpenJDK 的源码,一直在Mac上面编译,但是总是出现莫名其妙的error,还找不到有效的解决方式,所以还是进入 Ubuntu 下面进行编译,虽然中间也出...

ostracod
06/29
0
0
在linux上使用yum安装JDK

1.查找java相关得列表[root@localhost ~]# yum -y list java*Loaded plugins: fastestmirror, refresh-packagekit, securityLoading mirror speeds from cached hostfile base: mirrors.zju.......

罗荣熙
2015/05/04
0
0
openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss
06/18
0
0
在Ubuntu 11.10和12.04 编译构建 OpenJDK 7

如何在Ubuntu 11.10和12.04 搭建OpenJDK 7 这篇文章将会知道你搭建OpenJDK 7 在你的64为Ubuntu Linux机上没有很多的尝试和错误。它基于官方OpenJDK搭建 但是这个README文件是过时的,这就是为...

zhouxingxing
2012/04/11
3K
4
【javac添加python 列表特性1】Ubuntu12.04下编译OpenJDK7的一些问...

刚开始选择在windows的Cygwin下编译,结果问题连连,两天都搞不定。。只有换到Ubuntu下面。。记录一下 不过12.04的Ubuntu使用的是3.2的内核,而openJDK的hotspot的Makefile里面支持的内核没这...

guoliang
2012/10/24
0
3

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
25
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
13
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部