调试OpenJDK

本文详细介绍了Java基础类型的内存占用情况,如何使用OpenJDK进行本地方法开发,并在Mac环境下编译OpenJDK18。还指导了使用Clion进行OpenJDK的调试过程,包括设置编译命令、配置CustomBuild和使用JNI示例。
摘要由CSDN通过智能技术生成

1

问题

  • java 基础类型占用多少内存
  • 疯传的new Object() 多少内存
  • native 方法实现逻辑是什么样

java基础数据类型表示

java对象的构成

  • 博客
  • 官网
  • 源码
slowdebug:

bash ./configure --with-debug-level=slowdebug --enable-dtrace --with-native-debug-symbols=external --with-jvm-variants=server --with-target-bits=64  --with-boot-jdk=/Users/eleme/develop/Java/jdk-18.jdk/Contents/Home

调试OpenJDK

排查问题时候如果想要自己调试OpenJDK,那首先要编译一个自己的OpenJDK,之前都是在ubuntu下操作,由于环境限制,不能安装虚拟机,所以在mac下先编译OpenJDK。

mac环境编译 OpenJDK18

对的,没有看错,是18,不是8,因为机器编译环境比较高,8版本OpenJDK里面的语法目前编译器有些不支持,需要自己修改源码,收益不高;也想看看新版本有哪些新变化,所以选择git上比较新的tag,下面就开始操作了:

环境

组件版本
OSmacOS Big Sur 11.4
Xcode12.5
JavaOpenJDK 18ea

步骤

  • 安装字体引擎
brew install freetype
  • 下载源码
wget https://github.com/openjdk/jdk/archive/refs/tags/jdk-18+4.tar.gz
  • 解压后进入源码目录进行配置
bash ./configure --enable-debug --enable-dtrace --with-native-debug-symbols=internal --with-jvm-variants=server --with-target-bits=64  --with-boot-jdk=$JAVA_HOME --disable-warnings-as-errors

$JAVA_HOME 指定的版本17 或 18

  • 编译配置文件compile-commands.json
make CONF=macosx-x86_64-server-fastdebug compile-commands

macosx-x86_64-server-fastdebug 是编译时在 {源码目录}/build 文件夹名称(编译项目名称)

  • 编译
make CONF=macosx-x86_64-server-fastdebug
  • 验证
./build/macosx-x86_64-server-fastdebug/jdk/bin/java -version

在这里插入图片描述

参考

https://github.com/openjdk/jdk/blob/master/doc/building.md

Debug OpenJDK

有了自己的编译的JDK,我们就可以使用它执行我们Java程序了,想看下JVM层面这么运行Java程序,我们可以调试OpenJDK,下面主要介绍使用Clion这么Debug OpenJDK:

导入和配置

  • 导入clion

打开 ./build/macosx-x86_64-server-fastdebug 目录下的 compile-commands.json,选择Open As Project

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

项目root目录更换成源码目录
在这里插入图片描述

  • 配置Custom Build Application

在这里插入图片描述

在这里插入图片描述

配置Custom Build Targets

在这里插入图片描述

上图External Tools 命令

1)make
# Program:make
# Arguments:CONF=macosx-x86_64-server-fastdebug 
# Working directory:源码目录


2)clean
# Program:make
# Arguments:macosx-x86_64-server-fastdebug clean
# Working directory:源码目录

配置调试的程序

在这里插入图片描述

Debug

写一个java程序

在这里插入图片描述

openjdk调试代码输出中看到java程序中的输出

在这里插入图片描述

如果调试过程中有中断错误,在home下添加下面的文件

~/.lldbinit

breakpoint set --file {源码路径}/src/java.base/share/native/launcher/main.c --line 205 -C "pro hand -p true -s false SIGSEGV SIGBUS" --auto-continue true

参考

https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/#step_open_project_in_clion
https://github.com/openjdk/jdk21u/blob/jdk-21%2B35/doc/building.md

节奏:

  1. String intern

  2. class 解析

  3. synchroized

  4. 线程start过程

  5. 一个jni例子

  6. jvm初始化

  7. G1

  8. ZGC

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值