运行环境
- 首先本文是在Ubuntu18.04虚拟机环境下进行环境安装
安装Ubuntu环境只能自己看了,这里提供一个网址
参考网站
配置环境总会遇到各种问题,还好有前人已经做了,这里附上链接。对我搭环境帮助很大。
配置环境流程
下载JDK12压缩包
首先是书中提到的jdk12文件
网盘下载地址:提取码:8kel
也可以去网站下载:网址
下载流程如下
![](https://i-blog.csdnimg.cn/blog_migrate/b81d2c4f27507ad6fa455686ee191f3a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/51e8ce14775a6ab2ba38a9d3ce0b2780.png)
到这里你已经拥有了解压包。接下来我们将解压包复制到Ubuntu环境下。
在对应的目录下打开终端执行解压操作
unzip jdk12-06222165c35f.zip
如果没有安装unzip
sudo apt-get install unzip
此时已经解压完成
因为目录的名称太长了,重命名一下,便于后面的操作
![](https://i-blog.csdnimg.cn/blog_migrate/9ce03865813ac678d9c0914e06cc4ffe.png)
配置环境前准备
然后准备后续步骤前先执行一下命令,安装第三方库和GCC编译器
sudo apt-get install build-essential
sudo apt-get install libfreetype6-dev
sudo apt-get install libcups2-dev
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libasound2-dev
sudo apt-get install libffi-dev
sudo apt-get install autoconf
假设要编译大版本号为N的JDK,我们还要另外准备一个大版本号至少为N-1的、已经编译好的JDK,这是因为OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP……)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“Bootstrap JDK”。编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本。在Ubuntu中使用以下命令安装OpenJDK 11:
sudo apt-get install openjdk-11-jdk
提醒
对系统环境的最后一点建议是,所有的文件,包括源码和依赖项目,都不要放在包含中文的目录里面,这样做不是一定会产生不可解决的问题,只是没有必要给自己找麻烦。
生成含Server模式的HotSplot虚拟机
编译FastDebug版、仅含有Server模式的HotSplot虚拟机
到之前解压好的文件夹下\jdk12
![](https://i-blog.csdnimg.cn/blog_migrate/fedf746cd1323c253de5f4772773fa32.png)
执行以下语句
sudo bash configure --enable-debug --with-jvm-variants=server
如果报错
checking for fontconfig/fontconfig.h... no
configure: error: Could not find fontconfig! You might be able to fix this by running 'sudo apt-get install libfontconfig1-dev'.
configure exiting with result code 1
执行提示语句即可
sudo apt-get install libfontconfig1-dev
如果一切顺利就会出现书上的效果(因为是做完后做的记录,所以就不演示了)
![](https://i-blog.csdnimg.cn/blog_migrate/77ecac69c1538a5fe77e077c3cfef6b2.png)
注意
这部分不是必须的,如果上面执行成功则跳过这部分
如果没有使用上述语句而是执行了
sudo bash configure
也没有关系,只需要在jdk12文件夹下依次输入以下命令即可删除。
sudo make clean
sudo make dist-clean
然后重新运行
sudo bash configure --enable-debug --with-jvm-variants=server
查看是否成功
此时我们已经在jdk12文件夹下多出了一个目录build目录,可能看不到,可以通过终端ls -a查看
ls -a
![](https://i-blog.csdnimg.cn/blog_migrate/62dd9775335e089407efac381533df31.png)
到这个文件夹下
cd ./build
ls -a
可以发现已经生成了一个文件夹:linux-x86_64-server-fastdebug
![](https://i-blog.csdnimg.cn/blog_migrate/3248c9ade8bd23e2bb466eedead6f735.png)
此时我们回到jdk目录下
cd ..
编译
执行以下语句
sudo make images
这个会执行很久,书上说大于15分钟。所以这段时间需要等待
![](https://i-blog.csdnimg.cn/blog_migrate/39c7f0b815ed331c09abc3b407210254.png)
注意点
在导入CLion之前,要编译一下,因为某些模块使用了预编译头,如果不编译,CLion会在索引过程中提示找不到各种各样的文件。
make CONF=macosx-x86_64-server-slowdebug
配置环境变量
运行完之后刚刚build-linux-x86_64-server-fastdebug文件夹下的jdk12的环境已经安装好了。我们可以进去看看
我们逐级cd到jdk目录下
cd ./build
cd ./linux-x86_64-server-fastdebug
cd ./jdk
![](https://i-blog.csdnimg.cn/blog_migrate/b5a3607bd9494363d6c0e3097b36b8d8.png)
查看jdk下文件
ll
![](https://i-blog.csdnimg.cn/blog_migrate/e5d552c5277a609d2f7ad01d39f62285.png)
出现以下文件我们就已经完成环境的创建啦。
将环境配置到JAVA_HOME中
因为已经创建了快照,这次环境配置只是做学习用,所以创建了全局
sudo su root
输入密码
注意
这里注意需要将JAVA_HOME中的export JAVA_HOME
路径替换为自己电脑上刚刚配置的jdk12/build/linux-x86_64-server-fastdebug/jdk
sudo vi /etc/profile
·在profile文件末尾加入:
export JAVA_HOME=/home/serendipity-nz/proj/jdk12/build/linux-x86_64-server-fastdebug/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
进去之后点击i编辑
编辑完点击esc健
然后shift+:
最后输入wq(保存退出)
到这里正常没问题的话输入java -version显示如下信息
![](https://i-blog.csdnimg.cn/blog_migrate/54af1c96ce5a1e94fdacf8e7a3c3d461.png)
如果还是有问题的话,关机重启应该就解决啦。验证方式
java -version
安装IDE并进行设置
下载IDE-CLINE(这里推荐使用和书中版本一致,因为新版我没找到NEW Cmark Project from Sources)
进入下载地址
![](https://i-blog.csdnimg.cn/blog_migrate/9e702a8fbf1e0829a922d2aa1292aa95.png)
然后选择2019.1任意linux版本下载即可
![](https://i-blog.csdnimg.cn/blog_migrate/ee05d11764f1bda96311241ed2fd7446.png)
然后将下载完的解压包保存自己指定的路径下(便于寻找和启动),因为我上次安装没有指定路径,直接不见了。
![](https://i-blog.csdnimg.cn/blog_migrate/49ad8581985bbb8a5617f8aa60e37e4e.png)
解压压缩包
sudo tar -zxvf CLion-2019.1.4.tar.gz
也可以右键直接提取
然后进入到解压后文件夹的bin目录下有一个clion.sh
文件
![](https://i-blog.csdnimg.cn/blog_migrate/c9bf176338f95445fccfb54a2de05060.png)
在这个窗口右击打开终端-root进入打开软件,不然可能会权限不足
sudo su root
sudo ./clion.sh
![](https://i-blog.csdnimg.cn/blog_migrate/e45ba273eadf292ef5f9c3db733422e4.png)
配置软件
![](https://i-blog.csdnimg.cn/blog_migrate/3d62f4328f6b716fbe771bb87af7ac2e.png)
找到之前的jdk12文件夹
![](https://i-blog.csdnimg.cn/blog_migrate/cfb88051b9f0991bb11d8e4009023b01.png)
打开,勾上build(毕竟等了这么久弄好的)
![](https://i-blog.csdnimg.cn/blog_migrate/1510b561b8c6254207988ba5632dd339.png)
进去之后进入Settings设置
由于我们已经安装了gcc所以这里应该是不需要配置的,如果没有的话也配置一下
![](https://i-blog.csdnimg.cn/blog_migrate/c57ae38d89d74033bc9a02330e4815a1.png)
注意
这部分可以参考网站,写的比我的好些。不过也是做完演示。
配置CustomBuildTargets
然后是下一个配置-这个比较重要,不配置无法进行调试
![](https://i-blog.csdnimg.cn/blog_migrate/c53f924a3af7c890889e7ab9de610162.png)
step1
我这里已经配置好了,所以就对步骤进行说明
![](https://i-blog.csdnimg.cn/blog_migrate/3fed7f671bed86ed9060d2797f60b364.png)
点击加号
![](https://i-blog.csdnimg.cn/blog_migrate/408241dc19fcaaf40397721c135a62e8.png)
然后输入信息-重点是WorkingDirectory,选择你之前jdk12项目的目录
然后Argument中的信息也在下面给出
CONF=linux-x86_64-server-fastdebug
/home/serendipity-nz/proj/jdk12
![](https://i-blog.csdnimg.cn/blog_migrate/ef5fab42d51c11cbefaa83726a27252a.png)
这部分就配置完成了
step2
然后对第二个进行配置
![](https://i-blog.csdnimg.cn/blog_migrate/3f8ba9d5f4f828062a8f324144ce9480.png)
和上面类似填充信息
![](https://i-blog.csdnimg.cn/blog_migrate/d423e254050560d3fd3a20981b841413.png)
配置Edit Configurations
然后完成之后,配置debug
![](https://i-blog.csdnimg.cn/blog_migrate/a9efc1e533174023d1b5d935b8164f62.png)
然后配置信息
![](https://i-blog.csdnimg.cn/blog_migrate/0dbd0ea495806a4fb935ba9aa0166f37.png)
/home/serendipity-nz/proj/jdk12/build/linux-x86_64-server-fastdebug/jdk/bin/java
![](https://i-blog.csdnimg.cn/blog_migrate/749cd4660a0c24b560fd010501017ca5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/876764cd8278eefdb7309356df064345.png)
测试环境
在/src/java.base/share/native/libjli/java.c
![](https://i-blog.csdnimg.cn/blog_migrate/3eb5ee81440d693de03ba3fd312b6144.png)
选择之后按ctrl+f12选择方法JavaMain,跳转。
![](https://i-blog.csdnimg.cn/blog_migrate/c049373e65aa91e1c06c87cd04e73090.png)
然后打上断点,debug
![](https://i-blog.csdnimg.cn/blog_migrate/96a08064742a134e95be5552149fa928.png)
最后效果
![](https://i-blog.csdnimg.cn/blog_migrate/009b96dda72d9263d337cf7ad455627a.png)
书上效果
![](https://i-blog.csdnimg.cn/blog_migrate/a56083ba43e1ebcfdb1080cb92d315f2.png)
至此就算成功完成啦。
注
本教程是在全部配置完之后写的,中间也查阅了很多技术文档,我已经尽力回想了,但是由于隔了一天可能会有不周之处。每个地方我踩过的坑,我都尽量标注,希望本文对你有所帮助。
杂谈
MarkDown的时候需要传图嫌麻烦,创建了gitee仓库,把图片丢进去,还不错。嘿嘿,算是一个好开端吧,把前几天的git用上。大家加油。
参考
参考书籍
<<深入理解Java虚拟机:JVM高级特性与最佳实践-第三版>>