`
hatedance
  • 浏览: 60676 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JVM学习-2 编译并调试openjdk的zero版

 
阅读更多

上次我成功用netbeans编译并调试openjdk7以后,发现call stack里有一部分居然是汇编,后来了解到openjdk为了优化性能,把核心解释器全部用汇编写的,叫做template interpreter。结构如下图左侧:

汇编这个东西我是看不懂了,所以我必须编译一个C++解释器版本(右侧图),确切的说,jdk编译的时候,在make命令后面加上CC_INTERP=1这个参数。的确是有人写过帖子说在x86 32位机器上经过小小的修改源码就能编译成功c++ interpreter版本。然而我不行。我下载了整个openjdk7的代码库,尝试切换到不同的tag,均告失败,基本上人家openjdk团队就没打算维护c++ interpreter这个东西,我看到一堆编译错误。

 

后来我发现有一个叫icedtea的东西,可以用来编译zero版本的openjdk.zero的意思就是zero-assembly,即零汇编,没有汇编。上图中c++ interpreter下的support layer也用c++写成。icedtea原本的目的是帮助提供编译一个完全开源的openjdk。同时它还能简化openjdk的编译过程,即采用先configure,再make的方式。这里我只关心icedtea能帮助我实现编译一个zero版本在我的x86 i32上。我下载了binary的icedtea版本,结果无法编译成功。后来我专心看了zero作者的个人主页上的每一篇博客,发现一篇很有用:http://gbenson.net/?p=100

我按照这篇文章,忽略llvm的部分,采用编译icedtea源码的方式,成功编译了openjdk6的zero版本。icedtea很方便,甚至自己会去下载openjdk的源码,然后打patch,然后编译。

具体的命令如下:

./configure --enable-zero
make icedtea-against-ecj
make hotspot

 

然后,我又想着如何在netbeans里调试这个zero版本的jdk.一开始还想着这个默认编译出来的不是debug版本,后来发现g++后面都跟了-g参数,所以明白即使在product目录下,编译出来的hotspot依然是带debug信息的。在netbeans下要实现代码辅助(code assistance),必须在netbeans里build一次,但是这时nb报错了。原因是LD_LIBRARY_PATH被make reset了,于是我调整了$(root_Icedtea_dir)\Makefile里的LD_LIBRARY_PATH参数.

后来我开始调试,发现很多变量看不到值,原来是被优化了。于是我只好再去修改openjdk-ecj/hotspot/make/linux/makefiles/gcc.make文件,使g++的O3改为O0,彻底不优化。

 

到此为止,在netbeans下调试hotspot的任务算是完成了。但是想到还有一个问题没解决,就是jdk目录下的c++源码还不能代码智能提示。

 

本次重要参考文献:http://gbenson.net

分享到:
评论

相关推荐

    openjdk-17.0.2(openjdk-17.0.2_macos-x64_bin.tar.gz)

    由于"openjdk-17.0.2_macos-x64_bin.tar.gz"文件名中包含"macos-x64",这表明该版本的OpenJDK是专门为64位macOS系统优化的。安装后,开发者可以在macOS环境中编写、编译和运行Java应用程序,享受无缝的跨平台兼容性...

    编译调试jvm, openjdk8源码, openjdk7, make3.81源码

    在IT领域,特别是Java开发中,理解JVM(Java虚拟机)的工作原理并能对其进行编译和调试是一项高级技能。本资源包包含了与这个主题相关的关键元素:OpenJDK8和OpenJDK7的源码,以及make 3.81的源码,这些都是构建和...

    openjdk-17.0.2(openjdk-17.0.2_windows-x64_bin.zip)

    在"openjdk-17.0.2_windows-x64_bin.zip"压缩包内,用户可以找到以下关键组件: 1. **JRE**: 包含运行Java应用程序所需的库和JVM。这包括Java类库、JVM以及其他必要的二进制文件。 2. **javac**: Java编译器,用于...

    openlogic-openjdk-8u432-b06-windows-x64.zip

    OpenLogic-openjdk-8u432-b06-windows-x64.zip是该公司发布的适用于Windows x64系统的Java开发工具包(JDK)的压缩包文件。JDK是Java编程语言的核心组件,它允许开发者编译、调试和运行Java应用程序。 文件名中的...

    最新版windows openjdk-8u41-b04-windows-i586-14_jan_2020.zip

    总的来说,"最新版windows openjdk-8u41-b04-windows-i586-14_jan_2020.zip"是一个针对Windows平台的32位Java开发和运行环境,具备了Java 8的所有核心特性和增强功能,是开发和运行Java应用程序的重要基础。...

    openjdk-11.0.19-windows版本

    在压缩包文件"openlogic-openjdk-11.0.19+7-windows-x64"中,我们可以期待找到以下组件: 1. **JRE**:包含Java运行时环境,用于执行Java应用程序。这包括Java虚拟机(JVM)、类库和其他必要的二进制文件。 2. **...

    openjdk-18.0.1.1(openjdk-18.0.1.1_linux-aarch64_bin.tar.gz)

    `openjdk-18.0.1.1_linux-aarch64_bin.tar.gz` 文件是针对 Linux aarch64 架构的 OpenJDK 18.0.1.1 版本的二进制分发包。这个版本为64位的ARM架构系统提供了Java运行环境和开发工具,使得开发者能够在这些平台上构建...

    openjdk-19_windows-x64_bin.zip

    下载`openjdk-19_windows-x64_bin.zip`后,首先解压到一个合适的位置,然后配置环境变量。将解压后的`jdk-19`目录添加到系统的`PATH`环境变量中,确保可以全局访问Java命令。完成环境变量设置后,可以通过`java -...

    java-8-openjdk-amd64.tar.gz

    sudo mv java-8-openjdk-amd64 /usr/lib/jvm/ ``` 3. **设置环境变量**:接下来,更新系统的`PATH`环境变量以包含OpenJDK的bin目录。编辑`~/.bashrc`或`~/.bash_profile`文件(取决于你的shell类型),添加以下行...

    OpenJdk-7.zip

    这个命令会自动下载并安装OpenJDK-7的deb包,包括Java编译器javac、Java解释器java以及相关的开发和运行库。安装完成后,可以通过`java -version`和`javac -version`命令来验证安装是否成功。 OpenJDK-7包含了以下...

    亲测可用java-1.8.0-openjdk.linux.x86_64.zip

    "java-1.8.0-openjdk-devel.x86_64"这个包是针对CentOS操作系统的64位版本OpenJDK开发工具包。它包含了编译、调试和测试Java应用程序所需的全部工具。开发包通常会包含JDK中的核心组件,如Java编译器(javac)、Java...

    最新版linux openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz

    这个压缩包包含了OpenJDK 8u41-b04的所有组件,包括Java虚拟机(JVM)、Java类库、编译器、调试器和其他开发工具。解压后,你可以找到诸如`bin`目录下的可执行文件(如`java`, `javac`, `javadoc`等)、`lib`目录下...

    java-1.8.0-openjdk.linux.x86_64

    OpenJDK是Java Development Kit(JDK)的一个实现,由Oracle公司发起并维护,它遵循GNU General Public License (GPL)条款。OpenJDK项目的目标是提供一个免费、开放源代码的Java平台,使得开发者可以自由地查看、...

    openjdk-8u43-linux-x64,自测可用

    2. **JDK(Java Development Kit)**:除了JRE之外,JDK还包括编译器(javac)用于将Java源代码编译为字节码,以及各种工具,如Javadoc(生成API文档),JAR(打包工具),JDB(调试器),JConsole(性能监控工具)...

    openjdk-17.0.2_windows-x64_bin.zip

    这个压缩包“openjdk-17.0.2_windows-x64_bin.zip”包含了运行和开发Java应用程序所需的全部组件。OpenJDK是Oracle JDK的开源实现,两者在功能上基本兼容,但OpenJDK遵循GPLv2许可,提供了一个自由、开放源代码的...

    openjdk-18(openjdk-18+36_windows-x64_bin.zip)

    这个版本的OpenJDK是针对Windows x64平台的,其安装包为“openjdk-18+36_windows-x64_bin.zip”。此压缩文件包含了运行和开发Java应用程序所需的一系列组件,包括Java Development Kit (JDK)的核心库、编译器、调试...

    openjdk-11+28_windows-x64_bin.zip

    这个压缩包"openjdk-11+28_windows-x64_bin.zip"是专为Windows 64位操作系统设计的OpenJDK 11版本。该版本的构建号为28,这通常表示它是该版本的一个特定构建,可能包含了自初始发布以来的一些更新和修复。 OpenJDK...

    openjdk-8u342-b07-windows-x64

    这个版本的OpenJDK是Java 8的一个更新,包含了Java运行时环境(JRE)和Java开发工具,用于编写、编译、调试和运行Java应用程序。让我们深入了解一下OpenJDK 8u342-b07在Windows系统中的关键知识点: 1. **Java 8**:...

    openjdk-11.0.2_windows-x64_bin.zip

    在标题中提到的"openjdk-11.0.2_windows-x64_bin.zip"是一个针对Windows 64位操作系统的OpenJDK 11.0.2的安装包。OpenJDK由一群开发者和公司共同维护,遵循GPLv2许可证,提供了一个自由、开放源码的Java平台标准版...

Global site tag (gtag.js) - Google Analytics