通过调整JVM的最大堆内存(-Xmx参数),为编译过程分配更多内存。
javac命令前添加-J-Xmx参数,例如分配2GB内存:javac -J-Xmx2g -d target/classes -sourcepath src/main/java -subpackages com.example
pom.xml中配置maven-compiler-plugin,或在MAVEN_OPTS环境变量中设置:<!-- pom.xml 配置 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<fork>true</fork>
<maxmem>2048m</maxmem>
<compilerArgs>
<arg>-J-Xmx2048m</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
或通过环境变量设置:export MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m"
mvn clean install
gradle.properties中设置JVM参数:org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
运行gradle build时会自动应用这些设置。若系统物理内存不足,可通过创建交换文件扩展虚拟内存,缓解内存压力。
free -h # 查看Swap列
swapon --show # 查看已启用的Swap文件
# 创建Swap文件(CentOS 7/8通用)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile # 设置权限(仅root可读写)
sudo mkswap /swapfile # 格式化为Swap分区
sudo swapon /swapfile # 启用Swap
/etc/fstab文件,添加以下行:echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
交换空间能临时解决内存不足问题,但长期仍需升级物理内存。top或ps命令找出占用内存高的进程(如数据库、Web服务器),临时关闭以释放内存。sync # 将缓存数据写入磁盘
echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项和inode缓存
javac -J-Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ...
-XX:+UseCompressedOops参数,减少内存占用:javac -J-Xmx2g -XX:+UseCompressedOops ...
这些参数需根据项目实际情况调整,避免过度配置。通过以上方法,可有效解决CentOS下Java编译时的内存不足问题。优先推荐增加JVM内存分配和优化构建流程,若仍无法解决,再考虑扩展系统内存或调整内核参数。