在 Ubuntu 上用 javac 或 java 编译/运行时提示内存不足(OutOfMemoryError / 编译卡死 / 被杀),可以从下面几个方面解决。
free -h
top
free 很小、swap 也没了,就是系统内存不够Java heap space 或 GC overhead limit exceeded,是 JVM 参数问题javac 本身内存较小,大型项目容易炸:
export JAVA_TOOL_OPTIONS="-Xms512m -Xmx2g"
javac YourFile.java
或 Maven / Gradle 项目:
export MAVEN_OPTS="-Xms512m -Xmx2g"
mvn compile
export GRADLE_OPTS="-Xms512m -Xmx2g"
# 或
./gradlew compileJava --max-workers=2
java -Xms512m -Xmx2g -jar app.jar
参数说明:
-Xms:初始堆内存-Xmx:最大堆内存(最重要)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
Maven:
mvn -T 1 compile
Gradle:
./gradlew build --parallel=false
编辑 IDE 的 VM 参数:
IntelliJ
Help → Edit Custom VM Options
-Xms512m
-Xmx2048m
| 报错 | 解决 |
|---|---|
| Java heap space | 加大 -Xmx |
| GC overhead | 加大内存 + 减少并发 |
| killed (dmesg) | 系统 OOM,加 swap |
| javac 很慢 | 关注解处理器 / 减线程 |
sudo swapon --show
java -Xms256m -Xmx768m -jar app.jar
如果你能贴出: