在 Ubuntu 上编译 Java(如使用 javac、Maven、Gradle 或 Android 编译)时遇到内存不足(OutOfMemoryError / 卡死 / 被 kill),可以从以下几个方面解决:
free -h
htop
如果 available 很小,或者编译时被系统 OOM Killer 杀掉(dmesg | grep -i oom),那就是内存问题。
export MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
mvn clean package
或修改 ~/.mavenrc:
export MAVEN_OPTS="-Xmx2g"
export GRADLE_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
或 gradle.properties:
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
IDE(IDEA / Eclipse)里调大:
-Xmx-XX:MaxPermSize(Java 8 以前)mvn -T 1C clean package
# 或
mvn -T 2 clean package
org.gradle.parallel=false
org.gradle.workers.max=2
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
docker run -m 2g --memory-swap 4g ...
--offlinemvn clean
rm -rf ~/.m2/repository
-Xmx2g
-XX:MaxMetaspaceSize=256m
并行数 = CPU 核心数 - 1
如果你能告诉我:
我可以直接给你最合适的参数配置。