温馨提示×

ubuntujava编译内存不足咋整

小樊
41
2026-10-16 02:47:24
栏目: 编程语言

在 Ubuntu 上用 javac 或 java 编译/运行 Java 程序时遇到内存不足(OutOfMemoryError / 编译卡死 / 被系统杀掉),可以按下面思路处理。


一、先确认是哪种“内存不足”

1️⃣ javac 编译时内存不足

常见报错:

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space

2️⃣ java 运行时内存不足

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

3️⃣ 系统直接把进程杀掉(OOM Killer)

dmesg 里能看到:

Out of memory: Kill process xxxx (java) score xxx

二、javac 编译内存不足怎么办

✅ 方法 1:给 javac 加大堆内存

javac -J-Xmx2g -J-Xms512m YourFile.java

如果是 Maven / Gradle:

Maven

export MAVEN_OPTS="-Xmx2g -Xms512m"
mvn compile

Gradle

export GRADLE_OPTS="-Xmx2g -Xms512m"

或修改 gradle.properties:

org.gradle.jvmargs=-Xmx2g -Xms512m

三、java 运行内存不足

✅ 方法 2:运行时加内存

java -Xms512m -Xmx2g -jar app.jar

常用参数说明:

  • -Xms:初始堆内存
  • -Xmx:最大堆内存
  • -XX:MaxMetaspaceSize=256m(类加载多时)

四、系统内存真的不够(最常见)

✅ 方法 3:加 Swap(强烈推荐)

Ubuntu 没 swap 或 swap 太小很容易炸。

查看 swap

free -h
swapon --show

创建 2G swap

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

开机自动挂载

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

五、服务器/容器环境特别说明

Docker 容器

docker run -e JAVA_OPTS="-Xmx512m" -m 1g my-java-app

云服务器(1G / 2G 内存)

  • 不要同时跑 MySQL + Java
  • Java 堆不要超过物理内存的 60%

六、代码层面也能救

如果是你自己代码:

  • 避免一次性读大文件
  • 避免 List 无限增长
  • 用流式处理(Stream / BufferedReader)

七、快速排查命令

# 看内存
free -h

# 看是谁被杀了
dmesg | grep -i oom

# 看 java 进程
jps
top

如果你愿意,可以把:

  • 报错完整信息
  • free -h 输出
  • 是 javac 还是 java

发给我,我可以直接给你精确参数配置。

0 踩