基于之前面试很多次被问到jvm运行原理及调优问题,以及jvm本身是技能提升不可逾越的一道坎,于是决定深入学习jvm,不久买了周志明的《深入理解java虚拟机--jvm高级特性与最佳实践》一书,拜读学习。写此博客目的1:以前没写过博客,准备以此为开端尝试谢谢;2:记录自己学习历程,同时督促自己不断学习不断提升;3:记录遇到的问题,记录解决的办法和思路,以后重新看时可能会有新的感受。

1.编译环境搭建

可以是win10系统或者LInux系统,因本人工作公司开发环境为win10,于是以win10为搭建系统,具体列表如下:

     1)win10

     2)cygwin 64位最新版本,别太旧就行

     3)freetype 2.7

     4)vs2010

     5)openjdk8

     6)JDK 8 (本地机器安装)

    以上安装软件我是参考博主Lynn的博客https://blog.csdn.net/wqlinloveruby/article/details/80409031,非常感谢他,

   他整理的链接:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密码:yjqh

2.软件安装步骤

2.1安装CYGWIN:在Windows平台下模拟Linux运行环境的软件,提供一系列的Linux命令支持;

需要该软件的原因是在编译中要使用GNU Make来执行Makefile文件(参考周志明《深入理解java虚拟机--jvm高级特性与最佳实践》);

注意:安装CYGWIN时不能直接默认安装,因为下表中所示的工具都不会进行默认安装,而它们是编译过程中需要的,所以需要在装界面中进行手工选择。

                                                               表1 需要手工选择安装的CYGWIN工具

Binary NameCategoryPackageDescription
ar.exeDevelbinutilsThe GNU assembler, linker and binary utilities
make.exeDevelmakeThe GNU version of the ‘make’ utility built for CYGWIN
m4.exeInterpretersm4GNU implementation of the traditional Unix macro processor
cpio.exeUtilscpioA program to manage archives of files
gawk.exeUtilsawkPattern-directed scanning and processing language
file.exeUtilsfileDetermines file type using ‘magic’ numbers
zip.exeArchivezipPackage and compress (archive) files
unzip.exeArchiveunzipExtract compressed files in a ZIP archive
free.exeSystemprocpsDisplay amount of free and used memory in the system

此处如果选择的服务器不合适的话,尽管你的网络本身速度很快,但是此处下载速度很慢。所以,此处需要选择一个速度比较快的服务器。对于国内来说,连接很多国外的服务器,速度一般都很慢。我是参照网上相关方法自己手动添加:

在Use URL处,输入:http://mirrors.163.com/cygwin/

CYGWIN 安装时的定制包选择界面如图:

å®è£çé¢

默认都是default,选择需要必须要安装的点击那个如刷新的按钮,切换成install;

这里有个困扰人的地方是怎么查找上面提到的相关包,可能有的人直接ALL INSTALL ,我第一次就是这样,网上1M/s下载约8个小时,共20G左右库包,下载完后根据库包安装D盘剩余50多G被占完还无法安装成功,磁盘空间不够!在此极不推荐该方法;

综合网上很多想法,本人推荐方法为:根据包名称查找,比对Description信息,其实查找完后相关包已经不是特别多,直接全install也挺快的,9个必须包不到20来分钟即可全下完。

将CYGWIN的安装路径下bin目录配置到环境变量path中,如我的安装路径为:d:\jvm\cygwin\bin

2.2 安装vs2010 

需要该软件的原因:JDK中最核心的代码(Java虚拟机及JDK中Native方法的实现等)是使用C++语言及少量C语言编写的,官方文档中说他们的内部开发环境是Microsoft Visual Studio C++ (VS2003)中进行编译,及Microsoft Visual Studio C++ (VS2010)测试过。

此处省略因为非常简单;(安装路径不要有空格)

2.3 安装FreeType

需要该软件的原因:这是一个免费的字体渲染库,JDK的Swing部分和JConsole这类工具使用到。

将下载的freetype2.7解压。如解压至d:\freetype-2.7,接下来介绍通过vs2010编译64位的freetype-2.7。

编译Freetype

第一次打开vs2010的话,选择使用VC++,选择file-->open-->project/solution...,找到你解压freetype的路径 ,如我的d:\freetype-2.7\builds\windows\vc2010\freetype.sln

打开后,右键项目,选择properties,如图

由于我们想编译64位的openjdk,所以我这里需要64位的,在编译之前的检查中,我们不仅需要dll文件还需要lib文件,都是用同一个工程编译出的只是后缀不太一样。编译两次的时候只需要修改vs2010的配置后缀就OK了,注意在vs2010的配置选中,选择X64的,编译的时候,请右键项目,build,请同学们注意下图:

编译freetype.lib:

编译freetype.dll

两个文件编译完成后,编译的文件在目录:D:\jvm\freetype-2.7\objs\vc2010\x64

然后在d:\freetype-2.7目录下创建lib文件夹,并将编译好的freetype.dll和freetype.lib复制到该目录。

在编译openjdk之前会校验并用到freetype下的include文件夹下的ft2build.h和lib文件夹下的freetype.dll和freetype.lib文件。

然后还需要设置一下freetype的环境变量,FREETYPE_CFLAGS=d:\freetype-2.7\include;FREETYPE_LIBS=d:\freetype-2.7\lib,可以尝试直接设置在path中。如图:

编译openjdk

打开cygwin,切换到解压的openjdk_8的文件夹根目录,如:

执行命令

bash ./configure -with-freetype=/cygdrive/d/freetype-2.7 -enable-debug -with-target-bits=64

-with-freetype参数是使用指定的freetype,-enable-debug是编译可调试的openjdk,-with-target-bits=64,是指编译64位的.

再执行上述操作前如果设置了环境变量JAVA_HOME, CLASSPATH 记得删除,否则会报错

编译时遇到问题:

1)如果cygwin安装的是2.X的版本则在编译的过程中会报cygwin的版本太老,这是检测脚本的一个bug,该脚本在common/autoconf目录下使用文本编辑器打开generated-configure.sh搜索Your cygwin is too old,关注7249行原来是1.7这里我根据自己的cygwin版本改成了2.10。

最终编译效果图如下,本人的有点小问题是:ccache status:not available for your system,但影响不大,以后改进

最后可以通过make all命令进行下一步的工作,编译完的结果在D:\jvm\openjdk-8u40\openjdk\build\windows-x86_64-normal-server-fastdebug中。

参考文章:

https://blog.csdn.net/wqlinloveruby/article/details/80409031

https://blog.csdn.net/tangyongzhe/article/details/53576097

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐