通过调整JVM堆内存参数,为编译过程分配更多内存,是解决编译时内存溢出的直接方法。
-J-Xmx参数设置最大堆内存(如2GB),例如:javac -J-Xmx2g YourJavaFile.java
MAVEN_OPTS环境变量传递参数,例如:export MAVEN_OPTS="-Xmx2g"
mvn clean install
gradle.properties中添加:org.gradle.jvmargs=-Xmx2g
根据项目规模调整-Xmx值(如4GB、8GB),避免设置过小导致溢出。当物理内存不足时,Swap空间可作为临时扩展,缓解内存压力。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 # 创建2GB Swap文件
sudo chmod 600 /swapfile # 设置权限(仅root可写)
sudo mkswap /swapfile # 格式化为Swap空间
sudo swapon /swapfile # 启用Swap
/etc/fstab文件,添加以下行,确保重启后自动启用:/swapfile swap swap defaults 0 0
free -h命令查看Swap使用情况,确认已启用。通过调整编译器参数,降低内存消耗或提升编译效率。
-XX:MetaspaceSize和-XX:MaxMetaspaceSize限制元空间(替代永久代)大小,例如:javac -J-Xmx1g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m YourJavaFile.java
-XX:+UseCompressedOops(默认开启),突破32GB堆内存限制,减少内存占用。-parallel选项启用多线程编译,加快编译速度并减少单线程内存峰值,例如:javac -parallel -d outputFolder src/*.java
编译时释放系统内存,避免其他进程占用过多资源。
top或htop命令查看内存占用高的进程(按M键排序),终止非必要进程(如浏览器、大型软件)。systemctl stop <service_name>命令停止。构建工具(如Maven、Gradle)可缓存编译结果、并行处理任务,减少重复编译的内存消耗。
mvn clean install -T 1C启用多线程编译(-T 1C表示每个CPU核心一个线程)。gradle.properties中设置并行编译:org.gradle.parallel=true
org.gradle.caching=true # 启用缓存
构建工具的优化可显著降低单次编译的内存峰值。