zoukankan      html  css  js  c++  java
  • 我为什么要自己编译openjdk8以及那些坑

    我为什么要自己编译openjdk8以及那些坑

    这是笔者第二次编译openjdk, 第一次编译的是openjdk7,那么好多人会好奇,为什么要自己编译openjdk呢,官方不是已经发布了安装包了么?

    要回答这个问题就要明白cc++是什么?Java又是什么?

    记得有位业内同行说过,C++和Java之间隔着一堵由内存管理围成的墙,里面的人想出去,外面的人想进来。笔者从业多年确实见过不少内存管理高手,但是还是有一部分朋友是不喜欢内存管理的,但是如果想成为C++大牛,这关恐怕绕不过去。笔者第一次编译openjdk时候的想法很简单,就是打破这堵墙,如果连openjdk也是我自己编译的,那么就都是我C++的天下,可以任意调试,无所不能。由于时间的原因,第一次利用openjdk编译,我只研究了Java垃圾回收机制也就是GC相关的内容,后来工作太忙就没来得及自己研究其余的部分。今天终于有些时间,于是泡了一杯黄山毛峰,开始了下面的故事。下面我们来说说openjdk8的编译,和openjdk7的编译过程还是稍有区别的。

    1. openjdk8代码构成

    CC++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编译的推荐环境和步骤,希望对有需要的人有所帮助,可以少走弯路..

  • 相关阅读:
    .NET框架程序设计三个概念:.NET,.NET平台(PlatForm),.NET框架(Framework)
    解决AVI格式的文件不能删除的问题
    加载项目失败的解决办法
    由Codebehind所引发的
    由Duwamish学习web.config的配置
    JDK、JRE、JVM之间的关系
    hadoop等的下载地址
    eclipse代码自动补全
    UML 类图中的几种关系
    fedora 14 的163的yum源
  • 原文地址:https://www.cnblogs.com/pugang/p/openjdk8.html
Copyright © 2011-2022 走看看