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

Gradle同步Minecraft模组项目时反编译步骤内存占用过高导致崩溃的解决请求

Gradle同步Minecraft模组项目时反编译步骤内存占用过高导致崩溃的解决请求

我完全懂你现在的崩溃——用IntelliJ搞MC模组,Gradle同步到反编译步骤就疯狂吃内存,4G物理内存加4G swap都扛不住,改了JVM参数还像石沉大海一样没效果,确实糟心。结合你的Linux环境、Java 21和Gradle 8.14.3的配置,我给你整理几个针对性的解决方案,从修复参数不生效的问题到手动执行反编译都有:


一、先搞清楚:为什么你改的org.gradle.jvmargs没起作用

你设置了-Xmx512m但Gradle还是吃到2G,核心原因是:Minecraft模组的反编译任务(比如decompileClient)是独立于Gradle主进程的子任务,它有自己的JVM参数,根本不鸟你给Gradle主进程设的内存限制!

所以你要给反编译这个子任务单独配参数,而不是Gradle主进程。

方案1:给反编译任务单独设置JVM内存限制

找到项目根目录的build.gradle(如果用Kotlin DSL就是build.gradle.kts),添加以下配置,专门限制反编译子任务的内存:

如果你用Groovy DSL(build.gradle)

// 给所有带decompile的任务设置JVM参数
tasks.withType(JavaExec) {
    if (name.contains('decompile')) {
        // 设1G内存足够完成反编译,根据你的情况可以降到768M
        jvmArgs = ['-Xmx1G']
    }
}

如果你用Kotlin DSL(build.gradle.kts)

tasks.withType<JavaExec> {
    if (name.contains("decompile")) {
        jvmArgs = listOf("-Xmx1G")
    }
}

这个配置会直接作用于反编译的子进程——它才是那个吃内存的元凶,设1G绝对够完成MC的代码反编译了。


二、优化Gradle主进程的内存(辅助)

虽然主进程的参数不影响反编译,但优化它能避免和子进程抢内存。修改项目根目录的gradle.properties,确保这些配置:

# Gradle主进程的JVM参数,512M完全够用
org.gradle.jvmargs=-Xmx512m -XX:+UseG1GC -XX:MaxMetaspaceSize=256m
# 关闭Gradle的冗余特性,减少内存消耗
org.gradle.daemon=true
org.gradle.parallel=false
org.gradle.configureondemand=true
org.gradle.caching=true

注意:-XX:MaxPermSize在Java 8之后就被移除了,Java 21用的是MaxMetaspaceSize,你之前加这个参数报错是正常的,直接删掉就行。


三、手动执行反编译步骤(彻底掌控)

如果你不想被IDE自动同步牵着走,完全可以手动执行反编译,跳过IDE的自动同步:

步骤1:单独执行反编译任务

打开终端,进入项目根目录,执行:

./gradlew decompileClient

这个命令会单独运行客户端反编译任务,执行过程中你可以实时看内存占用,也可以临时给它加参数:

./gradlew decompileClient -Dorg.gradle.jvmargs="-Xmx1G"

步骤2:让IDE只负责编辑,不自动同步Gradle

  1. 打开IntelliJ IDEA,进入File > Settings > Build, Execution, Deployment > Build Tools > Gradle
  2. 把Build and run using和Run tests using都改成IntelliJ IDEA
  3. 在右侧的Gradle Projects面板里,右键你的项目,选择Unlink Gradle Project
    这样IDE就不会自动触发Gradle同步了,你完全手动控制什么时候执行反编译、构建等任务,从根源上避免IDE触发的不必要内存消耗。

四、Linux环境的额外优化

你的系统有4G swap,可以调整swap的使用策略,避免系统突然OOM:

  1. 临时生效:执行sudo sysctl vm.swappiness=10
  2. 永久生效:编辑/etc/sysctl.conf,添加vm.swappiness=10,然后执行sudo sysctl -p

默认Linux的swappiness是60,改成10后系统会优先用物理内存,只有物理内存快耗尽时才用swap,这样不会一下子把swap榨干,也能减少频繁换页的卡顿。


五、关于Gradle 9.0不兼容的警告

这个警告暂时不用管——Minecraft的模组工具链(Forge/Fabric)还没更新到兼容Gradle 9.0,你用当前的Gradle 8.14.3是完全没问题的,等模组工具链更新后再考虑升级Gradle就行。


最后再检查一个坑

确保你修改的是项目根目录的gradle.properties,而不是用户目录下的~/.gradle/gradle.properties(虽然用户目录的配置也会生效,但项目根目录的优先级更高)。如果两个地方都有org.gradle.jvmargs,以项目根目录的配置为准。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:43:09