温馨提示×

centosjava编译内存不足咋办

小樊
38
2026-09-30 11:01:30
栏目: 编程语言

在 CentOS 上用 javac 或 Java 程序编译/运行时提示内存不足(OutOfMemoryError / 编译卡死 / 被 kill),可以从下面几个方面解决。


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

free -h
top
dmesg | grep -i kill

如果看到 Out of memory: Kill process xxx (java) 说明是被系统 OOM Killer 杀掉了。


二、javac 编译时内存不足

1️⃣ 给 javac 增加内存

export JAVAC_OPTS="-J-Xms512m -J-Xmx2g"
javac $JAVAC_OPTS YourFile.java

如果是 Maven 编译:

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

如果是 Gradle:

export GRADLE_OPTS="-Xmx2g"

或修改 gradle.properties:

org.gradle.jvmargs=-Xmx2g

三、Java 运行时内存不足

1️⃣ 增加 JVM 堆内存

java -Xms512m -Xmx2g -jar app.jar

常用参数说明:

  • -Xms:初始堆内存
  • -Xmx:最大堆内存
  • -XX:MaxMetaspaceSize=512m(JDK8+)

四、CentOS 系统级原因

1️⃣ 系统物理内存太小

  • 云服务器(1G / 2G)很容易不够
  • 编译大项目建议 ≥ 4G

2️⃣ 没有 Swap(交换分区)

强烈建议加 Swap

# 创建 2G swap
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo mkswap /swapfile
sudo swapon /swapfile

# 开机自动挂载
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

查看:

free -h

五、减少编译资源占用

Maven 降低并行度

mvn -T 1C clean package

或

mvn -o clean package

(-o 离线模式,少网络 IO)

Gradle

org.gradle.parallel=false
org.gradle.daemon=false

六、JDK 版本问题

  • 老项目用 JDK 8
  • 新项目避免用过高 JDK 编译造成 Metaspace 暴涨

查看:

java -version

七、常见错误速查

现象 解决
Java heap space 加大 -Xmx
Metaspace 加 -XX:MaxMetaspaceSize
编译直接被 kill 加 Swap
卡死不动 降并行、加内存

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

  • CentOS 版本
  • JDK 版本
  • 编译方式(javac / Maven / Gradle)
  • 内存大小

我可以给你精确命令。

0 踩