🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 配置文件位置 **默认** 默认的IDEA JVM参数配置较低,其中配置存放在`/Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions`文件中. IntelliJ IDEA 版本升级时,除非用户自行控制,默认情况IDEA会将全局的`idea.vmoptions`文件覆盖,因此,选择用户的`idea.vmoptions`文件可避免升级配置覆盖。 **修改`Info.plist`文件** 定位`Info.plist`文件 该文件存放在`/Applications/IntelliJ IDEA CE.app/Contents`目录下 打开`Info.plist`,其中存在一个 key 元素内容为`VMOptions`的设置,如下所示: ~~~ <key>VMOptions</key> <string>-Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log -XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar</string> ~~~ **修改用户`idea.vmoptions`文件** 切换当前用户的IDEA 配置目录 通过命令行,cd到`~/Library/Preferences/IntelliJIdeaXX/`目录下,如本人的机器路径: ~~~ /Users/Mercy/Library/Preferences/IdeaIC2017.1 ~~~ **新建或更新用户`idea.vmoptions`文件** 将新建或者待更新的`idea.vmoptions`文件,更新以下JVM 配置项 ~~~ -server -XX:+UseG1GC -XX:+UseNUMA -Xms512m -Xmn512m -Xmx8g -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=240m ~~~ # 设置JVM的启动参数 idea64.exe文件同目录的`idea64.exe.vmoptions` 或者 help下面的`Edit Custom VM Options...` ~~~ -XX:ReservedCodeCacheSize=1024m //增加codeCache容量 -XX:+UseCodeCacheFlushing //codeCache回收 ~~~ 重启idea发现cpu依旧占用严重,那就说明JVM在启动初期解释字节码进行执行,当方法执行次数达到指定阈值后,触发JIT把字节码编译成机器码,这个过程消耗CPU资源比较严重,我直接把所有代码编译成机器码 ~~~ -Xcomp   //可以使jvm运行在纯编译模式下,所有方法在第一次被调用的时候就会被编译成机器代码 ~~~ 这样设置有一个弊端,第一次启动特别慢,之后就特别流畅, 网上的参数 ~~~ -Xms6G -Xmx6G -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseG1GC //使用G1 gc -XX:+UseNUMA  //优先使用速度较快的内存 -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log -XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof -Dsun.awt.keepWorkingSetOnMinimize=true //让IDEA最小化后阻止JVM对其进行修剪 ~~~ numa 是一个 CPU 的特性。SMP 架构下,CPU 的核是对称,但是他们共享一条系统总线。所以 CPU 多了,总线就会成为瓶颈。在 NUMA 架构下,若干 CPU 组成一个组,组之间有点对点的通讯,相互独立。启动它可以提高性能。 NUMA 需要硬件,操作系统,JVM 同时启用,才能启用。Linux 可以用 [numactl](http://linux.die.net/man/8/numactl) 来配置 numa,JVM 通过-XX:+UseNUMA来启用 ~~~ # custom IntelliJ IDEA VM options ##################JVM模式############################ # IDEA的JVM以Server模式启动(新生代默认使用ParNew) -server ##################内存分配############################ # 堆初始值占用3G,意味着IDEA启动即分配3G内存 -Xms3g # 堆最大值占用3G -Xmx3g # 强制JVM在启动时申请到足够的堆内存(否则IDEA启动时堆初始大小不足3g) -XX:+AlwaysPreTouch # 年轻代与老年代比例为1:3(默认值是1:4),降低年轻代的回收频率 -XX:NewRatio=3 # 栈帧大小为16m -Xss16m ##################老年代回收器############################ # 使用CMS老年代回收器 -XX:+UseConcMarkSweepGC # CMS的重新标记步骤:多线程一起执行 -XX:+CMSParallelRemarkEnabled # CMS的并发标记步骤:启用4个线程并发标记(理论上越多越好,前提是CPU核心足够多) -XX:ConcGCThreads=4 ##################JIT编译器############################ # 代码缓存,用于存放Just In Time编译后的本地代码,如果塞满,JVM将只解释执行,不再编译native代码。 -XX:ReservedCodeCacheSize=512m # 分层编译,JIT编译优化越来越好,IDEA运行时间越久越快 -XX:+TieredCompilation # 节省64位指针占用的空间,代价是JVM额外开销 -XX:+UseCompressedOops # 增大软引用在JVM中的存活时长(堆空闲空间越大越久) -XX:SoftRefLRUPolicyMSPerMB=50 -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false ~~~ # 查看内存的设置及使用情况 开启设置中的`Show memory indicator` ![](https://img.kancloud.cn/c9/65/c965d9e581cfd148564444b9f7da2458_570x498.png) # 设置编译和Maven的JVM内存 因为设置成了自动编译,并且发现保存文件的时候CPU瞬间飙高,所以需要将编译进程和Maven的堆值设置大一些,见下图: `compiler->Build process heap size` 设置大一点 ![](https://img.kancloud.cn/ed/96/ed968c4822783c28fbe8e8b1c402550f_852x224.png) # 取消Error以外的代码检查 IntelliJ的代码检测功能非常强大,但同时也占用了一些资源,可以将默认的除 Error之外的其他级别的检测都去掉,先做下面的筛选,然后逐个勾掉即可: ![](https://img.kancloud.cn/c5/d2/c5d20675a0959235dfe3579781af1cb4_851x368.png) # 其他方法 ## 更改启动的JDK 更改启动的JDK的方法在[JetBrains系列(IntelliJ IDEA、WebStorm等)中文输入法无提示问题的解决](http://www.javatang.com/archives/2017/08/27/52101751.html)这篇文章里面有详细的介绍,针对IntelliJ 2018.1来说,最后检测下来最新版的`jbsdk8u152b1248.5`整体感觉还不错,可以在[https://dl.bintray.com/jetbrains/intellij-jdk/](https://dl.bintray.com/jetbrains/intellij-jdk/)进行下载。 ## 清空缓存并重建索引 在做完上述设置之后,最好通过点击`File -> Invalidate Caches / Restart...`菜单,然后点击`Invalidate and Restart`按钮清空并重建索引,然后重启。再次启动程序之后,会首先重建索引和缓存。 ## maven参数设置 ~~~ -Xms256m -Xmx2048m -XX:MaxMetaspaceSize=200m -XX:PermSize=128m -XX:MaxPermSize=512M ~~~ # 调优 ![](https://img.kancloud.cn/6c/8d/6c8da26b1cfaf1f83a573e9f37970949_1284x54.png) ~~~ jstat -gc 20918 ~~~ 查看YGC和FGC次数 还有一个很耗时的操作是字节码验证,去掉字节码验证的参数是`-Xverify:none`