我为什么要自己编译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以及那些坑的更多相关文章

  1. JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5906359.html 1. 编译环境的准备 1.1 JDK源码下载 OpenJDK是JAVA发展史中的一个开源项 ...

  2. 64位windows8.1编译openjdk8

    首先下载openjdk8http://hg.openjdk.java.net/jdk8/jdk8/这里用到版本管理工具Mercurial,与git有些类似,不了解的话可以查一下.clone后,里面有个 ...

  3. JVM-Ubuntu18.04.1下编译OpenJDK8

    近期开始学习JVM,看的是周老师的<深入理解Java虚拟机>,打算先自己编译个JDK来提升对JVM的兴趣.本文分三部分来描述编译OpenJDK的过程,分别是编译前准备工作.构建编译环境.进 ...

  4. Centos7 下编译 Openjdk8

    本文主要介绍如何在 Centos7 下编译 Openjdk8 源码,<深入理解java虚拟机>第二版网上好多 openjdk7 的帖子,编译 jdk8 和 7 还是有些差别的,比如大家经常 ...

  5. 在docker上编译openjdk8

    以前曾经试过在VMware上安装linux,再在linux上编译openjdk8,但是每次都不顺利,例如linux环境,预装依赖软件,openjdk源码的选择等环境都会遇到问题,一旦失败再重新开始挺费 ...

  6. Win10下编译OpenJDK8

    导航目录 Win10下编译OpenJDK8 相关参考文章 编译环境 编译前准备 1.安装 Visual Studio 2010 Professional 2. 准备OpenJDK8 3. 编译JDK环 ...

  7. Ubuntu16.04编译Openjdk8,笔者亲测编译成功

    现在很多语言都不开发运行环境了,都选择在JRE上运行,足以证明JVM的优越.你精通了JVM,未来的路才可能走得轻松.这篇文章是你走近jvm的第一篇,编译Openjdk8源码 编译环境 操作系统:Ubu ...

  8. JDK---00Linux上编译openjdk8

    Centos 7 编译自定义jdk8 1. 安装所需的依赖 yum install alsa-lib-devel cups-devel libX* gcc gcc-c++ freetype-devel ...

  9. c/c++ 多线程 ubuntu18.04 boost编译与运行的坑

    多线程 boost编译与运行的坑 背景:因为要使用boost里的多线程库,所以遇到了下面的坑. 系统版本:ubuntu18.04 一,安装boost 1,去boost官网下载 boost_1_XX_0 ...

随机推荐

  1. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  2. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  3. 基于SignalR实现B/S系统对windows服务运行状态的监测

    通常来讲一个BS项目肯定不止单独的一个BS应用,可能涉及到很多后台服务来支持BS的运行,特别是针对耗时较长的某些任务来说,Windows服务肯定是必不可少的,我们还需要利用B/S与windows服务进 ...

  4. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

  5. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

  6. 树莓派 基于Web的温度计

    前言:家里的树莓派吃灰很久,于是拿出来做个室内温度展示也不错. 板子是model b型. 使用Python开发,web框架是flask,温度传感器是ds18b20 1 硬件连接 ds18b20的vcc ...

  7. 28个你必须知道的HTML5的新特性,技巧以及技术

    崭新新的页面布局 传统的: HTML5: 1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用<f ...

  8. 似懂非懂的localStorage和sessionStorage

    一.区别 相信很多人都见过这两个关于HTML5的新名词!HTML5种的web storage包含两种存储方式:localStorage和sessionStorage,这两种方式存储的数据不会自动发给服 ...

  9. [OC] NSURLSession

    有的程序员老了,还没听过NSURLSession 有的程序员还嫩,没用过NSURLConnection 有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSUR ...

  10. CentOS下Zabbix安装部署及汉化

    搭建环境:Centos6.5_x86_64,Zabbix2.4.5,epel 源 服务端: 1.安装开发软件包yum -y groupinstall "Development Tools&q ...