我为什么要自己编译openjdk8以及那些坑
我为什么要自己编译openjdk8以及那些坑
这是笔者第二次编译openjdk, 第一次编译的是openjdk7,那么好多人会好奇,为什么要自己编译openjdk呢,官方不是已经发布了安装包了么?
要回答这个问题就要明白c\c++是什么?Java又是什么?
记得有位业内同行说过,C++和Java之间隔着一堵由内存管理围成的墙,里面的人想出去,外面的人想进来。笔者从业多年确实见过不少内存管理高手,但是还是有一部分朋友是不喜欢内存管理的,但是如果想成为C++大牛,这关恐怕绕不过去。笔者第一次编译openjdk时候的想法很简单,就是打破这堵墙,如果连openjdk也是我自己编译的,那么就都是我C++的天下,可以任意调试,无所不能。由于时间的原因,第一次利用openjdk编译,我只研究了Java垃圾回收机制也就是GC相关的内容,后来工作太忙就没来得及自己研究其余的部分。今天终于有些时间,于是泡了一杯黄山毛峰,开始了下面的故事。下面我们来说说openjdk8的编译,和openjdk7的编译过程还是稍有区别的。
1. openjdk8代码构成
C\C++\Java, 不要问我为什么openjdk代码里面为什么还有Java, 这是一个鸡生蛋还是蛋生鸡的死循环..
2. 选择什么环境编译openjdk8
可供选择的环境按照OS分为三种,第一种是Windows, 由于openjdk8编译需要linux工具链,所以需要同时配置MingW比较复杂,第二种是Mac OSX, 由于openjdk8的编译需要借助xcode,而更麻烦的是需要老版本的xcode,不推荐,第三种就是Linux 但是需要选对版本,否则还是出问题,比如ubuntu2014和openjdk8就更配,如果用ubuntu2016就需要用hg下载最新的开发版代码,一共将近1g的单个文件,还不压缩,如果网速不行,恐怕得下载几天。笔者最终选择的是ubuntu2014和openjdk8无更新版本。
3. 编译过程详解
<1>下载openjdk-8-src-b132-03_mar_2014.zip,官网下载就成,如果网速不行,就找找工具可以事半功倍。
<2>笔者用了虚拟机VirtualBox,然后在VirtualBox里面装了一个ubuntu2014,最开始用的ubuntu2016由于和openjdk8气场不和,又装了一个ubuntu2014,如果真想用ubuntu2016,代码需要用hg拉最新的开发分支,网速不行的慎重。
<3>sudo mount -t vboxsf SHare /media/sf_SHare将共享文件夹在ubuntu2014里面挂载一下,否则共享文件夹在ubuntu2014里面看不到。
<4>sudo bash configure 安装所有提示的安装包用apt-get install。
<5>sudo bash configure --with-debug-level=slowdebug。
<6>sudo make all CONF=linux-x86_64-normal-server-slowdebug
4. 编译结果
----- Build times -------
Start 2016-10-02 15:07:35
End 2016-10-02 16:15:20
00:02:54 corba
00:02:18 demos
00:11:41 docs
00:21:11 hotspot
00:04:42 images
00:01:32 jaxp
00:02:00 jaxws
00:17:21 jdk
00:02:42 langtools
00:01:13 nashorn
01:07:45 TOTAL
-------------------------
5. 运行结果
solidos@solidos-pc:~/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin$ ./java -version
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-root_2016_10_02_15_06-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70-debug, mixed mode)
6.GDB调试结果
solidos@solidos-pc:~/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin$ gdb java
GNU gdb (Ubuntu 7.7-0ubuntu3) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from java...done.
(gdb) b main
Breakpoint 1 at 0x4006dd: file /home/solidos/openjdk/jdk/src/share/bin/main.c, line 97.
(gdb) r -classpath PossibleReordering
Starting program: /home/solidos/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -classpath PossibleReordering
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Breakpoint 1, main (argc=3, argv=0x7fffffffdde8) at /home/solidos/openjdk/jdk/src/share/bin/main.c:97
97 const jboolean const_javaw = JNI_FALSE;
(gdb) list
92 int
93 main(int argc, char **argv)
94 {
95 int margc;
96 char** margv;
97 const jboolean const_javaw = JNI_FALSE;
98 #endif /* JAVAW */
99 #ifdef _WIN32
100 {
101 int i = 0;
(gdb)
7. 结论
本文详细的列出了openjdk8编译的推荐环境和步骤,希望对有需要的人有所帮助,可以少走弯路..
我为什么要自己编译openjdk8以及那些坑的更多相关文章
- JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8
转载请注明源地址:http://www.cnblogs.com/lighten/p/5906359.html 1. 编译环境的准备 1.1 JDK源码下载 OpenJDK是JAVA发展史中的一个开源项 ...
- 64位windows8.1编译openjdk8
首先下载openjdk8http://hg.openjdk.java.net/jdk8/jdk8/这里用到版本管理工具Mercurial,与git有些类似,不了解的话可以查一下.clone后,里面有个 ...
- JVM-Ubuntu18.04.1下编译OpenJDK8
近期开始学习JVM,看的是周老师的<深入理解Java虚拟机>,打算先自己编译个JDK来提升对JVM的兴趣.本文分三部分来描述编译OpenJDK的过程,分别是编译前准备工作.构建编译环境.进 ...
- Centos7 下编译 Openjdk8
本文主要介绍如何在 Centos7 下编译 Openjdk8 源码,<深入理解java虚拟机>第二版网上好多 openjdk7 的帖子,编译 jdk8 和 7 还是有些差别的,比如大家经常 ...
- 在docker上编译openjdk8
以前曾经试过在VMware上安装linux,再在linux上编译openjdk8,但是每次都不顺利,例如linux环境,预装依赖软件,openjdk源码的选择等环境都会遇到问题,一旦失败再重新开始挺费 ...
- Win10下编译OpenJDK8
导航目录 Win10下编译OpenJDK8 相关参考文章 编译环境 编译前准备 1.安装 Visual Studio 2010 Professional 2. 准备OpenJDK8 3. 编译JDK环 ...
- Ubuntu16.04编译Openjdk8,笔者亲测编译成功
现在很多语言都不开发运行环境了,都选择在JRE上运行,足以证明JVM的优越.你精通了JVM,未来的路才可能走得轻松.这篇文章是你走近jvm的第一篇,编译Openjdk8源码 编译环境 操作系统:Ubu ...
- JDK---00Linux上编译openjdk8
Centos 7 编译自定义jdk8 1. 安装所需的依赖 yum install alsa-lib-devel cups-devel libX* gcc gcc-c++ freetype-devel ...
- c/c++ 多线程 ubuntu18.04 boost编译与运行的坑
多线程 boost编译与运行的坑 背景:因为要使用boost里的多线程库,所以遇到了下面的坑. 系统版本:ubuntu18.04 一,安装boost 1,去boost官网下载 boost_1_XX_0 ...
随机推荐
- clr 元数据
clr相关编译器编译生成的托管模块由四部分组成:PE32或32+头.clr头.元数据.IL代码. 元数据和IL代码完全对应,保持一致(:>)性. 元数据有很多用途: VS的智能感知,自动补全: ...
- Matlab 高脚杯模型切片
前言:此文为去年我替人做的一个课题,觉得比较简洁,图形也比较美观,因此放在博文里 数据源我放到了百度云盘高脚杯数据源 有兴趣的可以下载数据,跑程序试一下.也可以单独看看代码,看下实现过程. 主函数 % ...
- 从netty-example分析Netty组件
分析netty从源码开始 准备工作: 1.下载源代码:https://github.com/netty/netty.git 我下载的版本为4.1 2. eclipse导入maven工程. netty提 ...
- Java 时间类-Calendar、Date、LocalDate/LocalTime
1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- BPM配置故事之案例11-操作外部数据源
小明:可以获取ERP数据了-- 老李:哦,这么快?小伙子,我非常看好你,来来,别急着走,再陪我聊会-- 小明:--您老人家不是又要改流程吧? 老李:没有没有,哎嘿嘿嘿,我们这不都是为公司效率着想嘛,这 ...
- 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...
- C#开发中使用配置文件对象简化配置的本地保存
C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...
- The Coroutine
关于Coroutine 说到coroutine就不的不说subroutine,也就是我们常用到的一般函数.调用一个函数开始执行,然后函数执行完成后就退出,再次调用的时候,再从头开始,调用之间是没有保存 ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...