在 CentOS 上用 Java 编译(javac / Maven / Gradle) 时提示内存不足(OutOfMemoryError / GC overhead / 编译卡死),通常可以从下面几方面解决。
free -h
top
javac -J-Xms512m -J-Xmx2048m *.java
说明:
-J 是把参数传给 JVM-Xmx 最大堆内存(根据机器调整)export MAVEN_OPTS="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m"
mvn clean package
永久生效(推荐):
vi ~/.bashrc
export MAVEN_OPTS="-Xms512m -Xmx2048m"
source ~/.bashrc
mvn -T 1C clean package
或
mvn -T 1 clean package
org.gradle.jvmargs=-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m
org.gradle.parallel=false
free -h
swapon -s
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
✅ 推荐做法:
-Xmxmvn clean package -Dmaven.compiler.fork=true
-Xms512m
-Xmx2g
-XX:MaxMetaspaceSize=512m
| 错误信息 | 原因 |
|---|---|
| Java heap space | 堆内存太小 |
| GC overhead limit exceeded | 内存不够 + 回收频繁 |
| unable to create new native thread | 线程数太多 |
| Killed | 系统 OOM Killer |
如果你能告诉我:
我可以直接帮你给出精确参数配置。