• 编译JDK1.7


    1. 背景

    想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK。

    2. 获取JDK源码

    从http://openjdk.java.net/下载源码,如 openjdk-6-src-b27-26_oct_2012.tar.gz

    解压之后的目录结构:

    3. 编译环境

    3.1 系统环境

    Ubuntu 12.04,64位

    3.2 准备编译脚本

    在openjdk根目录下面创建build.sh文件,内容为编译的设置和编译命令

    build.sh

    设置语言
    export LANG=C
    
    设置Bootstrap JDK
    export ALT_BOOTDIR=/sdf/jvm/openjdk/jdk1.7.0_72
    
    允许自动下载依赖
    export ALLOW_DOWNLOADS=true
    
    并行编译的线程数,设置为何CPU内核数量一致即可
    export HOTSPOT_BUILD_JOBS=12
    export ALT_PARALLEL_COMPILE_JOBS=12
    
    export SKIP_COMPARE_IMAGES=true
    
    使用预编译头文件,不加这个编译会更慢一些
    export USER_PRECOMPILED_HEADER=true
    
    设置要编译的内容
    export BUILD_LANGTOOLS=true
    export BUILD_HOTSPOT=true
    export BUILD_JDK=true
    
    
    BUILD_DEPLOY=false
    
    BUILD_INSTALL=false
    
    编译结果所存放的路径
    export ALT_OUTPUTDIR=/sdf/jvm/openjdk/build
    
    unset JAVA_HOME
    unset CLASSPATH
    unset LD_LIBRARY_PATH
    
    开始编译
    make 2>&1 | tee $ALT_OUTPUTDIR/build.log
    

    3.3 执行sh build.sh编译

    在编译过程中有很多错误,只能说一步步解决。

    下面列举我在编译过程中遇到的问题:

    1. You Seem to not have installed ALSA 0.9.1 or higher

    (1)清除系统原有的alsa模块

    sudo apt-get remove linux-sound-base alsa-base alsa-utils

    (2)重新安装alsa模块

    sudo apt-get install xmlto libasound2-dev

    sudo apt-get install linux-sound-base alsa-base alsa-utils

    这是一类问题,基本就是缺少依赖,只要成功安装就可以了

    具体参考:

    https://blog.csdn.net/qq_29729577/article/details/53706551 

    http://cduym.iteye.com/blog/1892416

    http://caoxudong818.iteye.com/blog/1748869

    2. 

    解决方案:使用jdk1.7.0_72作为ALT_BOOTDIR

    3. 

    https://blog.csdn.net/abountwinter/article/details/52369507

    4. 编译成功

    编译成功的结果:

    编译的输出:

    验证:

    x.参考资料

    深入理解Java虚拟机:JVM高级特性与最佳实践

    https://blog.csdn.net/qq_29729577/article/details/53706551

    http://cduym.iteye.com/blog/1892416

    https://blog.csdn.net/abountwinter/article/details/52369507

    http://caoxudong818.iteye.com/blog/1748869

  • 相关阅读:
    python:利用asyncio进行快速抓取
    os.path.exists(path) 和 os.path.lexists(path) 的区别
    isdigit()判断是不是数字
    switf资源
    51cto培训课程
    51cto运维培训课程
    Python: 在Unicode和普通字符串之间转换
    VC++ CopyFile函数使用方法
    Eclipse断点调试
    AFNetworking2.0后 进行Post请求
  • 原文地址:https://www.cnblogs.com/lujiango/p/8917307.html
Copyright © 2020-2023  润新知