Skip to content

性能调优

综合运用各种技术手段,最大化 Gradle 构建速度。

性能检查清单

properties
# gradle.properties 推荐配置
# JVM 内存(根据项目大小调整,通常 2-4G)
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# 守护进程
org.gradle.daemon=true

# 并行构建(多项目)
org.gradle.parallel=true

# 构建缓存
org.gradle.caching=true

# 配置缓存(Gradle 8+)
org.gradle.configuration-cache=true

# 按需配置(只配置需要的子项目)
org.gradle.configureondemand=true

诊断工具

bash
# 生成构建扫描(最全面的分析)
./gradlew build --scan

# 生成性能报告
./gradlew build --profile
# 报告:build/reports/profile/profile-*.html

# 查看构建时序
./gradlew build --info 2>&1 | grep "took"

常见性能问题

1. 配置阶段太慢

kotlin
// ❌ 配置阶段执行耗时操作
tasks.register("myTask") {
    val data = readHugeFile()   // 每次构建都执行
    doLast { process(data) }
}

// ✅ 推迟到执行阶段
tasks.register("myTask") {
    doLast {
        val data = readHugeFile()
        process(data)
    }
}

2. 依赖解析慢

kotlin
// ✅ 使用依赖缓存
configurations.all {
    resolutionStrategy.cacheChangingModulesFor(24, TimeUnit.HOURS)
    resolutionStrategy.cacheDynamicVersionsFor(24, TimeUnit.HOURS)
}

3. 重复下载依赖

bash
# 离线模式(使用本地缓存)
./gradlew build --offline

# 或配置镜像加速
# 见仓库配置章节

4. 测试太慢

kotlin
tasks.named<Test>("test") {
    // 并行测试(每个 fork 独立 JVM)
    maxParallelForks = Runtime.getRuntime().availableProcessors()
    
    // 只重新运行失败的测试
    // ./gradlew test --tests "*.FailedTest"
}

构建时间基准

优化手段预期加速
增量构建(默认开启)2-10x
构建缓存3-20x(CI 场景)
配置缓存1.5-3x(小项目)
并行构建2-4x(多项目)
国内镜像依赖下载 5-20x
增加 JVM 内存1.2-2x

大型项目建议

kotlin
// 避免 subprojects {} 在大型多项目中的性能问题
// 改用约定插件(Convention Plugin)

// ❌ 低效:根项目 subprojects {} 配置所有子项目
subprojects {
    // 这会在配置阶段处理所有子项目
    apply(plugin = "java")
    dependencies {
        "testImplementation"(...)
    }
}

// ✅ 高效:约定插件(子项目按需应用)
// 子项目 build.gradle.kts
plugins {
    id("java-conventions")  // 只有应用了才配置
}

下一步