文档章节

centos7 mini 系统openjdk9源码编译

骰子红豆豆
 骰子红豆豆
发布于 04/16 01:29
字数 1690
阅读 316
收藏 3

前提先看完这篇博文https://my.oschina.net/u/3829817/blog/1795177

openjdk的来源

根据GNU协议又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。即“反版权”(或称Copyleft)概念。故Sun公司于2009年4月15日正式发布OpenJDK。甲骨文在 2010 年收购Sun之后接管了这个项目。

Oracle JDK只发布二进制安装包,而OpenJDK只发布源码。

学习openjdk的必要性

冯·诺依曼机原理

  • 计算机由运算器、控制器、存储器、输入设备和输出设备五部分组成。
  • 采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
  • 数据以二进制代码表示。
  • 指令由操作码地址码组成。
  • 指令在存储器中按执行顺序存放,由指令计数器指明要执行的指令所在的单元地址,一般按顺序递增,但可按运算结果或外界条件而改变。
  • 机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器。

 由此我们得知计算机上设备的运行是需要二进制代码也就是0,1组合,而计算机处理运算的部分是运算器与控制器也就是现在的微处理器CPU,所以就有了机器码,机器码是给CPU下达指令的,机器识别很容易,而人通过机器码编程太过复杂,于是聪明的人类将机器码0001,0010这种二进制码映射成固定的符号,比如0001代表read,0010代表add,于是就有了汇编语言,汇编语言形成的操作指令就是CPU的操作指令,所以每个CPU都有自己的操作规范,于是就有了8086处理器,Intel 1978年推出的Intel 8086中央处理器中首度出现,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。8086在三年后为IBM PC所选用,之后x86便成为了个人计算机的标准平台,成为了历来最成功的CPU架构。 

8086是16位处理器;后续有了32位的80386处理器,直到2003年AMD对于这个架构发展了64位的扩充,并命名为AMD64。后来Intel也推出了与之兼容的处理器,并命名为Intel 64。两者一般被统称为x86-64x64,开创了x86的64位时代。这里16位32位64位代表的是寄存器的个数。

一来基于x86架构形成的指令集对于人类还是太复杂,二来每个CPU在指令集上都会有所不同,这样基于某个CPU写出来的软件只能给特定的CPU使用,于是在基于x86架构的指令集上开始诞生了汇编语言,汇编语言对人还是不太友好,于是人类又发明高级语言,比如C , C++语言,这样高级语言和汇编语言直接映射指令集,于是在这种映射之间就诞生了编译器,这就是编译原理。

(source language)源程序→编译器 →目标机器代码程序(object code

后来人类又发明了面向对象的编程语言,这种语言更贴合人的思维逻辑,于是主角诞生了--java超高级语言

后来sun公司的程序猿通过JNI将JAVA,C,C++封装在一起就形成JDK,JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。于是在2009年,sun公司将jdk源码公布于众,openjdk就这样诞生了。

openjdk的编译

本人编译的是openjdk9

openjdk9源码地址http://hg.openjdk.java.net/jdk9

这是一个版本树,基于Mercurial搭建的一个代码托管平台,类似于github开源中国的码云

打开本地的centos7虚拟机,请确保本地电脑联网并且网速要很好。网速差就找个网速很好的地方,否则你会哭的。我已经哭过了。

yum install mercurial

下载openjdk9的编译指南项目源码,这个源码下都是需要编译和下载openjdk9源码的bash脚本和编译指南

openjdk9指南项目下载地址http://hg.openjdk.java.net/jdk9/jdk9/

点击zip下载到本地

然后解压zip包进入到\common\doc的目录下

用浏览器打开building.html并翻译成中文

然后根据指南开始你的表演

最好通过root权限登录centos7虚拟机

clone指南项目到/opt目录下 

hg clone http://hg.openjdk.java.net/jdk9/jdk9
cd jdk9
bash get_source.sh

请保持耐心等待源码下载完成

下载编译器,外部库和头文件

sudo yum groupinstall "Development Tools"

然后安装引导jdk8

sudo yum install java-1.8.0-openjdk-devel

运行配置参数

bash configure --with-target-bits=64 --disable-warnings-as-errors --with-debug-level=slowdebug --with-boot-jdk=/usr/jdk1.8.0_161

将这个--with-boot-jdk=/usr/jdk1.8.0_161修改为自己的jdk绝对路径

编译openjdk9源码

make images

 进入到根目录下将jdk环境变量修改成自己的路径./build/*/images/jdk/

vi /etc/profile
source /etc/profile
java -version

验证成功

现在开始openjdk9的调试吧!

© 著作权归作者所有

共有 人打赏支持
骰子红豆豆
粉丝 4
博文 4
码字总数 6110
作品 0
西安
程序员
私信 提问
Linux 安装python3.7.0

我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不同,可通过 python --V 或 python --version 查看系统自带的python版本 有一些系统命令时需要...

宿夜孤妖
07/28
0
0
Mac OSX 10.10 Yosemite编译OpenJDK 9

在Mac OSX 10.10系统上编译了下OpenJDK9,以下仅是个人安装记录,供参考。 编译时间:2015-06-13 系统版本:Mac OS X Yosemite 10.10.4 编译OpenJDK版本:JDK 9 相关软件版本: XCode版本:X...

易水瑶
2015/06/13
0
2
openJDK之JDK9的String

衷心建议读者阅读源码,这篇内容比较简单。 openJDK9开始,String的底层实现不一样了,具体内容如下。 1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使...

克虏伯
09/26
0
0
手动制作mini linux详细步骤—之二

8.2.3、编译mini linux网卡驱动模块 对于网卡驱动,我们是通过在内核中设置为模块形式来动态加载,所以需要再次针对单个内核模块进行编译,编译单个内核模块使用如下命令: # cd /usr/src/li...

zzjiwang
2017/09/18
0
0
4412开发板学习笔记---Linux驱动的学习方法

转自迅为iTOP-4412开发板实战教程书籍:http://www.topeetboard.com 1. Linux驱动的学习方法 Linux内核中有上百个驱动,知识点多且杂,对于想学习驱动的同学来说,需要尽快掌握基础知识:如开...

歌之王子殿下
2016/06/28
260
0

没有更多内容

加载失败,请刷新页面

加载更多

Caffe(二)-Python-自定义网络

这里我们用一个例子先来体验一下 首先定义一下我们的环境变量 $PYTHONPATH,我这儿是Windows开发环境,至于Windows Caffe怎么编译由读者自己下去搞定 我使用的控制台是 Windows PowerShell 添...

Pulsar-V
28分钟前
2
0
ActiveMQ从入门到精通(二)之可靠性机制

ActiveMQ的可靠性机制 缘由( 确认JMS消息) 只要消息被确认之后,才认为消息被成功消费了。消息的成功消费包括三个阶段:客户端接收消息、客户端处理消息以及客户端确认消息。在事务性会话中...

一看就喷亏的小猿
35分钟前
0
0
源码分析 Mybatis 的 foreach 为什么会出现性能问题

背景 最近在做一个类似于综合报表之类的东西,需要查询所有的记录(数据库记录有限制),大概有1W条记录,该报表需要三个表的数据,也就是根据这 1W 个 ID 去执行查询三次数据库,其中,有一...

TSMYK
今天
7
0
IC-CAD Methodology企业实战之openlava

在云计算解决安全问题并成为IC界主流运算平台之前,私有的服务器集群系统仍然是各大IC公司的计算资源平台首选。 现在主流的服务器集群管理系统包括lsf,openlava,SkyForm,三者都属于lsf一系...

李艳青1987
今天
5
0
http response stream 字节流 接收与解码

在接收图片、音频、视频的时候,需要用到二进制流。 浏览器会发给客户端 字节Byte流,一串串的发过来_int8格式 -128~127(十进制),也就是8bit(位)。 客户端接收的时候,对接收到的字节收集,...

大灰狼wow
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部