You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AssertJ assertThat调试时执行耗时过长问题求助

AssertJ调试时单步执行assertThat耗时过长的原因排查

环境信息

  • 平台:Mac系统上的IntelliJ IDEA
  • Java版本:openjdk 11.0.20 2023-07-18 LTS
    OpenJDK Runtime Environment (build 11.0.20+8-LTS)
    OpenJDK 64-Bit Server VM (build 11.0.20+8-LTS, mixed mode)
  • AssertJ版本:org.assertj:assertj-core:3.16.1

已查阅Baeldung、Project Lombok及AssertJ官方网站等平台,未找到有效解决思路。

简化后的测试代码如下:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

@DisplayName("This is just a test of AssertJ")
public class testAssertJ  {

    @Test
    public void assertJTest() {
        assertThat("actualMessage").isEqualTo("actualMessage");
    }
}

代码正常执行仅需毫秒级完成,但调试时(在assertThat所在行设置断点并单步执行),该步骤耗时可达30秒。

可能的原因及排查方向

  1. IDE调试器的类加载/字节码处理延迟
    IntelliJ IDEA调试器在处理AssertJ的assertThat方法时,需要加载大量内部辅助类、处理字节码增强逻辑。旧版本IDEA对Java 11的调试兼容性可能存在优化不足,导致类加载过程阻塞。

  2. JIT优化禁用导致的初始化开销放大
    调试模式下JVM会禁用即时编译(JIT)优化,AssertJ创建StringAssert实例时的内部初始化逻辑(如加载断言模板、初始化比较器链)原本依赖JIT优化提速,调试时失去优化后耗时被放大,加上调试器的逐行追踪进一步拉长时间。

  3. Mac文件系统或权限限制
    调试时IDE需要频繁读取依赖包中的类文件,Mac的APFS文件系统在某些场景下存在文件访问延迟,或者IDE没有足够权限快速读取AssertJ的Jar包内容,导致类加载缓慢。

  4. AssertJ版本与Java版本的兼容性问题
    你使用的AssertJ 3.16.1发布于2020年,与2023年发布的Java 11.0.20可能存在兼容性缝隙。新版本AssertJ已针对Java 11+优化了调试性能,升级到3.24.x等较新版本可尝试解决问题。

  5. IDE调试配置冗余
    若开启了“Force early class loading”等调试选项,会导致调试时提前加载大量不必要的类,增加耗时。可检查IDEA调试配置,关闭不必要的类加载追踪选项。

内容的提问来源于stack exchange,提问作者yorkshireflatcap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:55:20