通过调整JVM的堆内存参数,直接扩大编译时可用的内存空间。
-J-Xmx参数指定最大堆内存(如2048MB),例如:javac -J-Xmx2048m YourJavaFile.java
pom.xml的maven-compiler-plugin中添加maxmem配置:<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<fork>true</fork>
<maxmem>2048m</maxmem>
</configuration>
</plugin>
运行前设置MAVEN_OPTS环境变量:export MAVEN_OPTS="-Xmx2048m"
mvn clean install
gradle.properties中设置:org.gradle.jvmargs=-Xmx2048m
Gradle会自动应用该配置。当物理内存不足时,交换空间可作为虚拟内存缓解压力。
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=4096 # 创建4GB交换文件
sudo chmod 600 /var/swapfile # 设置权限
sudo mkswap /var/swapfile # 格式化为swap
sudo swapon /var/swapfile # 激活swap
/etc/fstab,确保重启后自动启用:echo '/var/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf # 持久化
javac -J-XX:MetaspaceSize=256m -J-XX:MaxMetaspaceSize=512m YourJavaFile.java
-XX:+UseCompressedOops参数:javac -J-XX:+UseCompressedOops YourJavaFile.java
编译前通过以下命令清理后台进程,释放内存:
top或htop命令找出占用高的进程(按M键按内存排序)。kill -9 <PID>终止非必需进程(如浏览器、大型软件)。sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
若上述方法均无法解决,考虑升级服务器硬件:
以上方法可根据实际情况组合使用,优先通过调整JVM参数和扩展swap解决临时问题,长期建议升级硬件或优化代码减少内存占用。