通过调整JVM的最大堆内存(-Xmx参数),为编译过程分配更多内存。
-J-Xmx参数,例如分配2GB内存:javac -J-Xmx2g YourJavaFile.java settings.xml(~/.m2/目录下),添加以下配置:<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=-Xmx2g 这会同时设置Gradle守护进程和编译任务的内存上限。若系统物理内存不足,可通过创建交换文件扩展虚拟内存,缓解内存压力。
sudo fallocate -l 2G /swapfile # CentOS 8推荐(更快) # 或 sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 # CentOS 7 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile /etc/fstab,添加以下行:/swapfile none swap sw 0 0 swapon --show # 查看当前启用的交换空间 free -h # 查看内存与交换空间使用情况 注:交换空间虽能缓解内存不足,但性能远低于物理内存,建议仅在物理内存不足时临时使用。
编译时,关闭占用大量内存的后台程序(如浏览器、视频编辑软件、数据库服务等),释放更多内存供编译使用。
top或htop命令查看内存占用排名,终止高内存进程:top # 按“M”键按内存排序,找到占用高的进程 kill -9 <PID> # 终止指定进程(替换<PID>为实际进程ID) 使用高效的构建工具(如Maven、Gradle),并通过配置减少内存消耗:
pom.xml中配置maven-compiler-plugin,启用fork并设置内存:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <fork>true</fork> <meminitial>1024m</meminitial> <!-- 初始堆内存 --> <maxmem>2048m</maxmem> <!-- 最大堆内存 --> </configuration> </plugin> </plugins> </build> gradle.properties中的org.gradle.jvmargs,还可通过命令行临时调整:./gradlew build -Dorg.gradle.jvmargs="-Xmx2g" 构建工具的配置能避免全局环境变量影响,更精准地控制编译内存。对于大型项目,将代码拆分为多个模块(如Maven的<module>或Gradle的subprojects),分模块编译可减少单次编译的内存消耗。
pom.xml中定义模块:<modules> <module>module1</module> <module>module2</module> </modules> 然后分别编译:mvn clean install -pl module1 -am # 编译module1及其依赖 mvn clean install -pl module2 -am # 编译module2及其依赖 分模块编译能降低单次内存峰值,提升编译稳定性。mvn dependency:analyze分析Maven依赖),减少编译时的内存加载量。jdk-11-linux-x64.bin)。以上方法可根据实际情况组合使用(如“增加JVM内存+分模块编译”“增加交换空间+关闭后台程序”),优先通过调整JVM参数和构建工具配置解决问题,若仍不足再考虑扩展系统资源。