Java虚拟机学习随笔(一)
2012-09-03 17:22
288 查看
编译JDK
想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理。JDK中的很多底层方法都是Native的,当需要跟踪这些方法的运作或对JDK进行Hack的时候,都需要编译一套自己的JDK。现在网络上有不少开源的JDK实现可供选择,如Apache Harmony、OpenJDK等。考虑到Sun系列的JDK是现在使用得最广泛的JDK版本,所以我们可以选择OpenJDK进行编译。Windows7 x64编译OpenJDK7
首先,从http://openjdk.org下载了最新的openjdk7 update版本;
第二,从http://www.microsoft.com/visualstudio/en-us/products/2010- editions/visual-cpp-express下载了visual studio 2010 express
和从http://www.microsoft.com/download/en/details.aspx?id=8279下载了 microsoft windows sdk for windows 7 and .net framework 4 和 Microsoft DirectX 9.0 SDK(Summer
2004);
第三,下载ant,freetype2.4.9 (关于freetype.lib和freetype.dll的获得上面博客有提到,里面说都了32位和64位分别获得的方式)安装cygwin (上文博客中提到的make在我的实验中在编译hotspot的时候会卡住不响应,)所以我下载了http://www.cmake.org/files/cygwin/make.exe 覆盖cygwin
bin目录下面的make文件(建议备份),关于为什么不用cygwin自带的上文博客有提到,jdk自带的说明里面也有提到;再找一个jdk(用的是1.6_32)作为引导jdk。
第四,到此所有的需要的都准备好了。
安装windows sdk 这个要先安装方便后面的设置;
安装express ,建议安装到C:\Program Files (x86)\Microsoft Visual Studio 10.0目录下面,原因同上;
安装dxsdk;
编译freetype2.4.9,我同时编译了32位的和64位的;
安装ant;
安装cygwin和覆盖make.exe;
安装jdk。
接下来是设置环境变量,虽然可以使用SetEnv.bat自动设置,但是我发现自动设置的东西我不知道怎么把cygwin的bin目录放到path的最后面,所以我使用的是手动设置。
注意:如果采用SetEnv.bat设置环境变量然后再设path=%path%;x:/cygwin/bin目录的方式在编译corba的时候是编译不通过的,会报File not found - *-template错误 ,具体为什么我也不清楚,为了以后编译方便,我做了两个bat文件,一个是32位的、一个是64位的,直接把bat文件放到openjdk目录就可以了。
Make_32.bat代码 @echo off rem call D:\jdkBuild\sdk\Bin\SetEnv.Cmd /Release /x64 /win7 SET WindowsSDKDir= SET VSINSTALLDIR=C:/PROGRA~2/MICROS~1.0 SET WINDOWSSDKDIR=D:/jdkBuild/sdk SET JAVA_HOME= SET ALT_BOOTDIR=D:/jdkBuild/JDK16~1.0_X SET ALT_JDK_IMPORT_PATH=D:/jdkBuild/JDK16~1.0_X SET ANT_HOME=D:/jdkBuild/APACHE~1.4 SET ALT_MSVCRNN_DLL_PATH=D:/jdkBuild/msvcr100 SET ALT_DXSDK_PATH=D:/jdkBuild/msdxsdk SET ALT_FREETYPE_HEADERS_PATH=D:/jdkBuild/freetype64/include SET ALT_FREETYPE_LIB_PATH=D:/jdkBuild/freetype64/lib SET ALT_COMPILER_PATH=%VSINSTALLDIR%/VC/bin/amd64 SET ALLOW_DOWNLOADS=true SET ARCH_DATA_MODEL=64 SET PATH=%WINDOWSSDKDIR%/Bin/NETFX4~1.0TO/x64;%WINDOWSSDKDIR%/Bin/x64;%VSINSTALLDIR%/VC/bin/amd64;%VSINSTALLDIR%/Common7/IDE;E:/cygwin/bin;%PATH% SET VS100COMNTOOLS=%VSINSTALLDIR%/Common7/Tools SET INCLUDE=%VSINSTALLDIR%/VC/INCLUDE;D:/jdkBuild/sdk/INCLUDE SET LIB=%VSINSTALLDIR%/VC/Lib/amd64;D:/jdkBuild/sdk/Lib/X64 rem SET NO_DOCS=true rem SET BUILD_CORBA=false rem SET BUILD_JAXWS=false rem SET BUILD_JAXP =false rem make 2>&1 | tee make_64.log bash
Make_64.bat代码 @echo off rem call D:\jdkBuild\sdk\Bin\SetEnv.Cmd /Release /x32 /win7 SET WindowsSDKDir= SET VSINSTALLDIR=C:/PROGRA~2/MICROS~1.0 SET WINDOWSSDKDIR=D:/jdkBuild/sdk SET JAVA_HOME= SET ALT_BOOTDIR=D:/jdkBuild/JDK16~1.0_X SET ALT_JDK_IMPORT_PATH=D:/jdkBuild/JDK16~1.0_X SET ANT_HOME=D:/jdkBuild/APACHE~1.4 SET ALT_MSVCRNN_DLL_PATH=D:/jdkBuild/msvcr100 SET ALT_DXSDK_PATH=D:/jdkBuild/msdxsdk SET ALT_FREETYPE_HEADERS_PATH=D:/jdkBuild/freetype/include SET ALT_FREETYPE_LIB_PATH=D:/jdkBuild/freetype/lib SET ALT_COMPILER_PATH=%VSINSTALLDIR%/VC/bin SET ALLOW_DOWNLOADS=true SET ARCH_DATA_MODEL=32 SET PATH=%WINDOWSSDKDIR%/Bin/NETFX4~1.0TO;%WINDOWSSDKDIR%/Bin;%VSINSTALLDIR%/VC/bin;%VSINSTALLDIR%/Common7/IDE;E:/cygwin/bin;%PATH% SET VS100COMNTOOLS=%VSINSTALLDIR%/Common7/Tools SET INCLUDE=%VSINSTALLDIR%/VC/INCLUDE;D:/jdkBuild/sdk/INCLUDE SET LIB=%VSINSTALLDIR%/VC/Lib;D:/jdkBuild/sdk/Lib rem SET NO_DOCS=true rem SET BUILD_CORBA=false rem SET BUILD_JAXWS=false rem SET BUILD_JAXP =false rem make 2>&1 | tee make_32.log bash
日志记录需要手动加到make后面
bat文件根据自己的需要文件安装目录手动更改
操作系统我是直接下了一个英文的更新,设置了语言格式为英语
现在所有的都设置好了,可以开始动手了编译了
注意:要使用管理员运行bat文件,而且在编译出impsrc文件夹后,要修改文件的权限,让everyone完全控制,建议直接修改impsrc的权限并让他下面的所有文件文件夹都继承他的权限,不然后面打包doc的时候要报错不能访问文件
好了,所有的准备工作都好了,开始编译吧。
ubuntu编译OpenJDK7请参考http://www.cnblogs.com/haoweishow/archive/2012/02/07/2341323.html。
相关文章推荐
- Java虚拟机学习随笔(四)
- Java虚拟机学习随笔(三)
- Java虚拟机学习 - 类加载器(ClassLoader)
- Java虚拟机第二章2.2 学习笔记
- Android学习随笔(14)------手机多媒体
- Java虚拟机第二章2.3 学习笔记
- OC语言学习——继承和多态的一些随笔记
- 《Oralce9i参考手册》部分学习随笔
- SpringMVC简单入门(注解)<学习随笔>
- Java虚拟机学习 - 类加载器(ClassLoader)
- Java虚拟机学习 - 垃圾收集算法
- 学习随笔(一):Shell脚本批量导入数据到Oracle数据库
- 《利用Python进行数据分析: Python for Data Analysis 》学习随笔
- Java虚拟机学习 - 对象引用强度
- Java虚拟机学习 - 类加载器(ClassLoader)
- Java虚拟机深入学习之四: Java虚拟机的性能监控和故障处理工具
- Java虚拟机学习 - 对象访问
- Java学习随笔1:Java是值传递还是引用传递?
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
- (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ