温馨提示×

ubuntu编译java内存不足怎办

小樊
49
2026-09-28 13:41:01
栏目: 编程语言

在 Ubuntu 上编译 Java 时提示内存不足(OutOfMemoryError / 编译卡死 / 系统变慢),通常可以从以下几方面解决:


一、最常见原因 & 对应解决办法

1️⃣ JVM 堆内存不够(javac / maven / gradle)

编译时 JVM 默认堆太小。

✅ javac 直接编译

javac -J-Xmx2g -J-Xms512m *.java

✅ Maven

export MAVEN_OPTS="-Xmx2g -Xms512m"
mvn clean compile

或:

mvn -Xmx2g clean package

✅ Gradle

export GRADLE_OPTS="-Xmx2g -Xms512m"

或在 gradle.properties 中:

org.gradle.jvmargs=-Xmx2g -Xms512m

2️⃣ 系统物理内存不足(swap 没开)

Ubuntu 默认可能没开 swap。

✅ 查看内存

free -h

✅ 创建 swap(推荐 2–4G)

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

3️⃣ 并行编译太多(CPU / 内存爆了)

特别是 Maven / Gradle。

✅ Maven 限制线程

mvn -T1 clean compile

✅ Gradle 限制并行

org.gradle.parallel=false

4️⃣ 单个模块太大 / 注解处理器吃内存

如 Lombok、MapStruct、Annotation Processor。

✅ 加大内存
✅ 关闭不必要的 processor
✅ 分模块编译


5️⃣ 容器 / 云服务器限制(Docker / VPS)

如果是 Docker:

docker run -e MAVEN_OPTS="-Xmx2g" ...

如果是小内存 VPS(1G):

  • 至少 2G swap
  • 编译时关闭其他服务(nginx / mysql)

二、快速排查 checklist ✅

free -h          # 看内存和 swap
top / htop       # 看谁吃内存
java -version    # 确认 JDK

三、推荐配置(经验值)

场景 建议
普通项目 -Xmx2g
大项目 -Xmx4g
1G 服务器 必须开 swap

如果你愿意,可以告诉我:

  • 用的 javac / Maven / Gradle
  • 报错原文
  • 服务器内存大小

我可以给你精确命令。

0 踩