关于IDEA 导入 gradle 项目堆内存溢出的解决方法(gradle VM options 配置)

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

2020-1.1及之前 

2020-1.4见底部(所有的都可用底部)

公司项目用的是gradle,项目较大,当重新导入项目时发生了堆内存溢出

找了很长时间没找到解决办法;

之后看到了有关IDEA 导入 Maven 项目 Tomcat  VM options 配置的文章

于是照猫画虎的配置了一下;

因为之前有报错说1024M 内存不够

所以将最大内存设置成了-Xmx2048m

需要设置多项时用空格 隔开

其余可以设置项:

-Xms768m:设置JVM初始堆内存为768m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx768m:设置JVM最大堆内存为768m。
-Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为256K。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。需要注意的是:当这个值被设置的较大(例如>2MB)时将会在很大程度上降低系统的性能。

-Xmn2g:设置年轻代大小为2G。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8。
-XX:NewSize=1024m:设置年轻代初始值为1024M。
-XX:MaxNewSize=1024m:设置年轻代最大值为1024M。
-XX:PermSize=256m:设置持久代初始值为256M。
-XX:MaxPermSize=256m:设置持久代最大值为256M。
-XX:NewRatio=4:设置年轻代(包括1个Eden和2个Survivor区)与年老代的比值。表示年轻代比年老代为1:4。
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的比值。表示2个Survivor区(JVM堆内存年轻代中默认有2个大小相等的Survivor区)与1个Eden区的比值为2:4,即1个Survivor区占整个年轻代大小的1/6。
-XX:MaxTenuringThreshold=7:表示一个对象如果在Survivor区(救助空间)移动了7次还没有被垃圾回收就进入年老代。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代,对于需要大量常驻内存的应用,这样做可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代存活时间,增加对象在年轻代被垃圾回收的概率,减少Full GC的频率,这样做可以在某种程度上提高服务稳定性。
 

标准参数 所有JVM都必须支持这些参数的功能,而且向后兼容();例如:

-client——设置JVM使用Client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试;在32位环境下直接运行Java程序默认启用该模式。
-server——设置JVM使Server模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有64位能力的JDK环境下默认启用该模式。
 

非标准参数(-X),默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,且不保证向后兼容;
非稳定参数(-XX),此类参数各个JVM实现会有所不同,将来可能会不被支持,需要慎重使用;

之后又找到一篇关于 VM options 配置的文章

 

-Xms2048m
-Xmx2048m
-XX:MaxMetaspaceSize=512m
-XX:MetaspaceSize=512m
-XX:InitialBootClassLoaderMetaspaceSize=64M
-XX:NewRatio=2
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=6
-XX:+UseConcMarkSweepGC
-XX:CMSFullGCsBeforeCompaction=5
-XX:+CMSParallelRemarkEnabled
-XX:+CMSClassUnloadingEnabled
-Xss1024k
-XX:+DisableExplicitGC
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-XX:ReservedCodeCacheSize=240m
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:D:/temp/gclog/idea.gc.log
-XX:+PrintHeapAtGC

 

希望可以解决各位遇到的问题

 

 

因为解决问题的方法都来自 Intellij IDEA 的Tomcat Server 配置VM options参数说明 所以文章类型选择了转载

 

以下:2020-1.4及之后的配置

在项目最外层build.gradle 文件同级添加 gradle.properties 文件;

在此文件中添加JVM设置

org.gradle.jvmargs=-Xmx2048m

 

<think>好的,用户现在遇到了IntelliJ IDEA输出乱码的问题,需要帮助解决。首先,我需要回想之前用户提出的问题,之前是内存溢出的问题,现在转向了编码问题,这可能是因为用户在使用IDEA的过程中遇到了不同的挑战。 用户的问题是关于IDEA输出乱码的,这可能出现在控制台、文件内容或者日志中。乱码通常是由于编码设置不一致导致的。接下来,我需要考虑常见的解决方案步骤,并确保回答结构清晰,符合用户之前的需求。 首先,应该分几个方面来考虑:全局编码设置、项目编码设置、控制台编码、配置文件中的编码设置,以及可能的系统环境因素。然后,每个方面需要具体的解决方法,比如修改IDEA的设置,调整VM选项,或者检查系统环境变量。 需要注意的是,用户可能对技术细节不太熟悉,所以步骤要详细,但避免使用过于专业的术语。同时,要确保回答符合之前用户提到的系统级指令,比如使用正确的LaTeX格式,但在这个问题中可能用不上,所以主要关注中文回答的结构和清晰度。 另外,用户可能使用的是不同操作系统,比如Windows、Mac或Linux,不同系统的默认编码可能不同,比如Windows通常是GBK,而Linux和Mac是UTF-8。因此,需要提醒用户检查系统编码是否与项目设置一致。 还需要考虑构建工具如Maven或Gradle的编码设置,因为这些工具在编译或运行时可能会有自己的编码配置,导致与控制台输出不一致。例如,在Maven的pom.xml中配置编码参数。 此外,IDEA配置文件,如idea64.exe.vmoptions中的-Dfile.encoding参数,可能会影响编码。如果用户修改了全局设置但问题依旧,可能需要检查这些配置文件。 最后,如果所有设置都正确,但问题仍然存在,可能需要检查具体的代码文件是否保存为正确的编码格式,或者是否有第三方插件干扰编码。这时候建议用户尝试重新导入项目或清理缓存。 总结下来,回答需要分步骤,覆盖各个可能的编码设置点,并提供具体的操作示例,比如如何修改设置路径,添加VM选项等。同时,语言要简洁明了,帮助用户逐步排查问题,确保他们能一步步解决问题。</think>解决IntelliJ IDEA输出乱码的问题通常与编码设置有关,以下是分步骤排查和解决方案: --- ### 一、**检查IDEA全局编码设置** 1. **统一编码为UTF-8** - 打开设置:`File ➔ Settings ➔ Editor ➔ File Encodings` - 确保以下选项均为`UTF-8`: - `Global Encoding` - `Project Encoding` - `Default Encoding for properties files` - 勾选`Transparent native-to-ascii conversion`(处理properties文件中文) ![编码设置示例](https://example.com/path-to-image) --- ### 二、**配置控制台输出编码** 1. **修改运行配置的编码** - 点击右上角运行配置下拉菜单 ➔ `Edit Configurations...` - 在`VM options`中添加: ```bash -Dfile.encoding=UTF-8 ``` - 适用于Java应用、Spring Boot等运行配置。 2. **修改编译器编码** - 打开设置:`File ➔ Settings ➔ Build, Execution, Deployment ➔ Compiler` - 在`Shared build process VM options`中添加: ```bash -Dfile.encoding=UTF-8 ``` --- ### 三、**调整系统环境编码** 1. **Windows系统** - 打开IDEA安装目录下的`idea64.exe.vmoptions`文件(位于`bin`文件夹) - 添加以下参数: ```bash -Dfile.encoding=UTF-8 ``` 2. **Linux/Mac系统** - 在终端启动IDEA时指定编码: ```bash export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8" ``` --- ### 四、**检查构建工具配置** #### **Maven项目** 在`pom.xml`中配置编译插件编码: ```xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> ``` #### **Gradle项目** 在`build.gradle`中设置: ```groovy tasks.withType(JavaCompile) { options.encoding = "UTF-8" } ``` --- ### 五、**其他可能性** 1. **终端/CMD编码问题** - Windows命令行默认编码为GBK,需手动改为UTF-8: ```bash chcp 65001 # 切换CMD编码为UTF-8 ``` 2. **字体缺失** - 打开设置:`File ➔ Settings ➔ Editor ➔ Font` - 确保选择的字体支持中文(如`Microsoft YaHei`、`SimSun`)。 3. **文件本身编码错误** - 右键文件 ➔ `File Encoding` ➔ 选择正确的编码并`Reload`或`Convert`。 --- ### 六、**终极排查步骤** 1. 重启IDEA并清理缓存:`File ➔ Invalidate Caches... ➔ Invalidate and Restart` 2. 重新导入项目(确保项目路径不含中文或特殊字符) 3. 更新IDEA至最新版本(修复已知编码兼容性问题)。 --- ### 总结 - **优先级**:先检查全局编码 → 控制台VM参数 → 构建工具配置 → 系统环境。 - **典型场景**: - 控制台日志乱码 → 配置`-Dfile.encoding=UTF-8` - 中文变问号`???` → 检查`File Encodings`设置和properties文件转义。 - 编译报编码错误 → 配置Maven/Gradle的编译插件。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值