在Ubuntu 12.04编译OpenJDK 7 HotSpot后为何显示JDK1.6?
问题解析:编译OpenJDK7 HotSpot后看不到预期版本的原因及解决办法
嘿,这个问题我以前折腾OpenJDK编译时也踩过坑,咱们来一步步理清楚:
为什么输出显示的是JDK1.6.0_45?
你看到的版本信息,是**用来启动测试程序的引导JDK(也就是你ALT_BOOTDIR指定的JDK1.6)**的版本,不是你刚编译出来的HotSpot版本。
仔细看输出里的这句:
Using java runtime at: /home/jdk1.6.0_45/jre
这说明test_gamma这个测试脚本是用你的JDK1.6来运行的,它打印的自然是JDK1.6的版本信息,和你编译的HotSpot本身没关系。
你编译的OpenJDK7 HotSpot在哪里?
你的ALT_OUTPUTDIR设置为/home/jdk1.7,编译产物就存放在这个目录的对应架构子文件夹里:
- 从你的脚本和输出来看,是32位Linux环境,所以编译好的调试版HotSpot(gamma)在
/home/jdk1.7/linux_i486_compiler1/jvmg目录下,里面的gamma或者jvmg就是你编译出来的虚拟机二进制文件。 - 如果后续要编译完整的OpenJDK7,执行
make all后,完整的JDK镜像会生成在/home/jdk1.7/j2sdk-image目录下。
如何验证自己编译的HotSpot版本?
直接运行你编译出来的虚拟机,指定简单的测试类或者查看它的版本:
- 切换到虚拟机所在目录:
cd /home/jdk1.7/linux_i486_compiler1/jvmg - 运行虚拟机查看版本(或者运行一个简单Java程序):
或者写个简单的./gamma -versionHello.java,编译后用它运行:
这时显示的版本就是你编译的OpenJDK7 HotSpot的版本了。javac Hello.java ./gamma Hello
补充小提示
你当前的make命令只编译了jvmg和jvmg1,这是HotSpot的调试版本(gamma是专门的调试虚拟机)。如果要编译完整的OpenJDK7发行版,建议执行make all或者make jdk目标,这样会生成完整的JDK环境。
内容的提问来源于stack exchange,提问作者holmes jingj5
相关产品推荐
相关产品推荐

