温馨提示×

ubuntu编译java内存不足咋办

小樊
42
2026-10-04 10:29:44
栏目: 编程语言

在 Ubuntu 上编译 Java(如使用 javac、Maven、Gradle 或 Android 编译)时遇到内存不足(OutOfMemoryError / 卡死 / 被 kill),可以从以下几个方面解决:


一、先确认是不是真的内存不够

free -h
htop

如果 available 很小,或者编译时被系统 OOM Killer 杀掉(dmesg | grep -i oom),那就是内存问题。


二、给 Java 编译过程增加内存(最常见)

1️⃣ Maven

export MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
mvn clean package

或修改 ~/.mavenrc:

export MAVEN_OPTS="-Xmx2g"

2️⃣ Gradle

export GRADLE_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"

或 gradle.properties:

org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m

3️⃣ 直接 javac(一般不会,但 IDE 会)

IDE(IDEA / Eclipse)里调大:

  • -Xmx
  • -XX:MaxPermSize(Java 8 以前)

三、减少并行编译(很重要)

Maven

mvn -T 1C clean package
# 或
mvn -T 2 clean package

Gradle

org.gradle.parallel=false
org.gradle.workers.max=2

四、开启 Swap(物理内存不够时最有效)

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

永久生效:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

五、关闭不必要的程序 & 限制资源

  • 关掉浏览器、Docker、IDE
  • 如果是 Docker:
docker run -m 2g --memory-swap 4g ...

六、针对大项目(如 Android / 微服务)

  • 拆分模块编译
  • 使用 --offline
  • 清理缓存:
mvn clean
rm -rf ~/.m2/repository

七、典型推荐配置(4G 内存机器)

-Xmx2g
-XX:MaxMetaspaceSize=256m
并行数 = CPU 核心数 - 1

如果你能告诉我:

  • Ubuntu 版本
  • 内存大小
  • 用的什么工具(Maven / Gradle / IDE)
  • 报错原文

我可以直接给你最合适的参数配置。

0 踩