编译 OpenJDK
为啥要编译 jdk
通常来说编译 OpenJDK 的目的是为了调试、定制化等需求;和我们使用开源的 Java 中间件一样,如果需要做定制化的话,可以将其源代码下载下来再修改,然后打包出来使用。
准备编译环境
安装 gcc
apt-get install build-essential
安装工具软件项
apt-get install libfreetype6-dev
apt-get install libcups2-dev
apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
apt-get install libasound2-dev
apt-get install libffi-dev
apt-get install autoconf
apt-get install zip
apt-get install libfontconfig1-dev
安装 jdk
,该 jdk
是为了编译 openjdk
,本次准备编译 openjdk-12
,环境要求安装 N-1
版本的 jdk
,所以安装 openjdk-11
。
apt-get install openjdk-11-jdk
下载 OpenJDK
wget https://github.com/openjdk/jdk/archive/refs/tags/jdk-12-ga.tar.gz
解压缩
tar -zxvf jdk-12-ga.tar.gz
进入 jdk 目录
cd jdk-jdk-12-ga
编译配置
开始编译配置,FastDebug 版、仅包含 Server 模式的 HotSpot
虚拟机
bash configure --enable-debug --with-jvm-variants=server
参数介绍祥见 附录
如果失败,控制台会告诉我们缺少的依赖项,按提示安装需要的依赖即可
配置成功,会看到
A new configuration has been successfully created in
/app/jdk-jdk-12-ga/build/linux-x86_64-server-fastdebug
using configure arguments '--enable-debug --with-jvm-variants=server'.Configuration summary:
* Debug level: fastdebug
* HS debug level: fastdebug
* JVM variants: server
* JVM features: server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc'
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.root.jdk-jdk-12-ga (12-internal)Tools summary:
* Boot JDK: openjdk version "11.0.12" 2021-07-20 OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2deb10u1) OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2deb10u1, mixed mode, sharing) (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain: gcc (GNU Compiler Collection)
* C Compiler: Version 8.3.0 (at /usr/bin/gcc)
* C++ Compiler: Version 8.3.0 (at /usr/bin/g++)Build performance summary:
* Cores to use: 4
* Memory limit: 3867 MB
开始编译
make images
编译完成
编译完成之后,进入OpenJDK
源码的build/配置名称/jdk
目录下就可以看到OpenJDK
的完整编译结果了,把它复制到JAVA_HOME
目录,就可以作为一个完整的JDK
来使用
附录:编译配置参数说明
- –with-debug-level=:设置编译的级别,可选值为release、fastdebug、slowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。还有一些虚拟机调试参数必须在特定模式下才可以使用。默认值为release。
- –enable-debug:等效于–with-debug-level=fastdebug。
- –with-native-debug-symbols=:确定调试符号信息的编译方式,可选值为none、internal、external、zipped。
- –with-version-string=:设置编译JDK的版本号,譬如java-version的输出就会显示该信息。这个参数还有–with-version-=的形式,其中part可以是pre、opt、build、major、minor、security、patch之一,用于设置版本号的某一个部分。
- –with-jvm-variants=[,…]:编译特定模式(Variants)的HotSpot虚拟机,可以多个模式并存,可选值为server、client、minimal、core、zero、custom。
- –with-jvm-features=[,…]:针对–with-jvm-variants=custom时的自定义虚拟机特性列表(Features),可以多个特性并存,由于可选值较多,请参见help命令输出。
- –with-target-bits=:指明要编译32位还是64位的Java虚拟机,在64位机器上也可以通过交叉编译生成32位的虚拟机。
- –with-=:用于指明依赖包的具体路径,通常使用在安装了多个不同版本的Bootstrap JDK和依赖包的情况。其中lib的可选值包括boot-jd、freetype、cups、x、alsa、libffi、jtreg、libjpeg、giflib、libpng、lcms、zlib。
- –with-extra-=:用于设定C、C++和Java代码编译时的额外编译器参数,其中flagtype可选值为cflags、cxxflags、ldflags,分别代表C、C++和Java代码的参数。
·–with-conf-name=:指定编译配置名称,OpenJDK支持使用不同的配置进行编译,默认会根据编译的操作系统、指令集架构、调试级别自动生成一个配置名称,譬如“linux-x86_64-server-release”,如果在这些信息都相同的情况下保存不同的编译参数配置,就需要使用这个参数来自定义配置名称。
以上是configure命令的部分参数,其他未介绍到的可以使用bash configure--help
来查看
参考书籍
- 《深入理解Java虚拟机》
编译 OpenJDK相关推荐
- 深入理解JVM(一)编译openJDK
此文总结的很不错:https://www.cnblogs.com/ACFLOOD/p/5528035.html 准备openJDK源码和环境 1.在linux和macOS上编译openJDK更加友好, ...
- 走进JVM之一 自己编译openjdk源码
想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1. 准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...
- 菜鸟编译OPenJDK全过程记录
2019独角兽企业重金招聘Python工程师标准>>> 最近在看周志明的<深入理解java虚拟机>,其中第一章就是讲如何自己编译OpenJDK,根据书中介绍步骤,结合网上 ...
- Java虚拟机(JVM源码):编译OpenJDK源码
为什么要自己编译JDK源码 作为一个搞技术的同学,如果想在技术这条路上走下去,还是多研究些本质性的东西,修炼下内功.尤其是现在JDK都出到10了,如果你没有研究过,还是停留在之前的时代,那么确实说不过 ...
- CentOS 编译 openjdk
1. 概述 <<深入理解Java虚拟机--JVM高级特性与最佳实践>>第一章就谈到自己编译jdk,来吧. 2. 编译环境 VMware12 CentOS-7-x86_64-E ...
- 自己动手编译OpenJDK
个人技术博客:www.zhenganwen.top 笔者环境 64bit / Windows10 / i5-7200U / 4核心CPU,在虚拟机上的Centos7(能连外网)上编译OpenJDK7u ...
- LINUX编译OpenJDK 9
比起初次编译顺利多了. 下载源码 Tags · openjdk/jdk9u · GitHub Tags · openjdk/jdk9 · GitHub 吾下载的是jdk-jdk-9-181.tar.g ...
- 编译OpenJDK及JDK题外话
一:下载并安装JDK,设置JDK环境变量 二:下载openjdk源码 三:下载apache ant jdk的1.7版本安装好后(安装在系统盘真的好吗?)不需要配置环境变量就可以使用,均等说理由是Ide ...
- 编译openjdk源码
http://www.cnblogs.com/ACFLOOD/p/5528035.html
最新文章
- STM32配置一般过程(持续更新中)
- mysql中出现 xC4 xDD_mysql数据库调优总结(二)
- SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)
- .NET Core 2.0 特性介绍和使用指南
- gnss单频软件接收机应用与编程_GNSS/GPS RTK定位 (手机,无人车定位,无人驾驶,因子图优化)...
- 关于lucene2.2部分代码
- VS2005 中关于“LC.EXE已退出,代码为 -1”的错误解决方法。
- VBA 声明 Option Explicit,让代码更规范
- Oracle约束的使用
- android studio撤回快捷键,Android Studio常用快捷键、Android Studio快捷键大全
- 晨曦记账本如何将账本内容导出EXCEL表格
- Lwip的udp编程
- echarts label加边框_ECharts 教程 富文本标签 - 闪电教程JSRUN
- 基于深度学习的行人检测技术
- 企业微信一天最多可以加多少人? 企业微信加好友功能会被限制吗?
- MediaWiki搭建指导
- 坦克大战的网络对战实现C++(客户端+服务端)
- OpenMP并行编程计算π值及PSRS排序
- 超人气思维导图XMind新年新版本,这6个新功能你一定要看
- Flutter高仿微信-第28篇-好友详情-查看个人头像