通過調整JVM的最大堆內存(-Xmx)參數,直接擴大編譯時可用的內存空間。
-J-Xmx參數,例如分配2GB內存:javac -J-Xmx2g YourJavaFile.java(多文件或目錄編譯時同理,如javac -J-Xmx2g -d bin src/**/*.java)。~/.m2/settings.xml的<profiles>中配置maven.compiler.jvmArgs,或在命令前設置MAVEN_OPTS環境變量:<!-- settings.xml配置 -->
<settings>
<profiles>
<profile>
<id>default</id>
<properties>
<maven.compiler.fork>true</maven.compiler.fork>
<maven.compiler.jvmArgs>-Xmx2g</maven.compiler.jvmArgs>
</properties>
</profile>
</profiles>
</settings>
或命令行執行:export MAVEN_OPTS="-Xmx2g" && mvn clean install。gradle.properties中設置org.gradle.jvmargs:org.gradle.jvmargs=-Xmx2g(Gradle會自動應用該配置到編譯任務)。若物理內存不足,可通過創建交換文件(Swap)擴展虛擬內存,緩解內存壓力。
# 創建4GB交換文件(可根據需求調整大小,如2G則count=2048)
dd if=/dev/zero of=/swapfile bs=1M count=4096
# 設置文件權限(僅root可讀寫)
chmod 600 /swapfile
# 格式化為Swap分區
mkswap /swapfile
# 啟用Swap
swapon /swapfile
# 持久化配置(重啟后生效)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
fallocate命令快速創建(需root權限):sudo fallocate -l 4G /swapfile # 創建4GB交換文件
sudo chmod 600 /swapfile # 設置權限
sudo mkswap /swapfile # 格式化
sudo swapon /swapfile # 啟用
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # 持久化
swapon --show或free -h,查看Swap分區是否顯示并分配了指定大小。top或htop命令查看內存占用高的進程(如瀏覽器、大型軟件),通過kill -9 <PID>終止無用進程,釋放內存。<dependency>中不必要的scope為compile的庫),減少編譯時的內存消耗。對于大型項目,將代碼拆分為多個獨立模塊(如Maven的<module>或Gradle的subprojects),分模塊依次編譯(如mvn compile -pl module1,module2 -am),避免一次性加載全部代碼導致內存溢出。
java -version確認JDK位數,若為32位,下載并安裝64位JDK(如OpenJDK 11+或Oracle JDK 11+)。java -version檢查版本,使用yum install java-11-openjdk-devel(CentOS)升級至Java 11。通過啟用GC日志分析內存回收情況,優化GC配置。例如,在編譯命令中添加以下參數,生成GC日志文件gc.log:
javac -J-Xmx2g -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log YourJavaFile.java
編譯完成后,使用less gc.log或GC分析工具(如GCViewer)查看日志,判斷是否存在頻繁Full GC或內存回收緩慢的問題,進而調整GC策略(如切換至G1收集器:-XX:+UseG1GC)。