IntelliJ IDEA JDK 8 性能调优

IntelliJ IDEA 问题描述问题原因解决方法调优后观察为什么要选择用户`idea.vmoptions`文件


IntelliJ IDEA 问题描述

IntelliJ IDEA 在 多窗口、多项目协作开发时,MacBook Pro的散热风扇凶猛地转动,相关配置如下:

MacBook Pro 配置

MacBook Pro (Retina, 15-inch, Mid 2015)
型号名称:    MacBook Pro
型号标识符:    MacBookPro11,4
处理器名称:    Intel Core i7
处理器速度:    2.2 GHz
处理器数目:    1核总数:    4
L2 缓存(每个核):    256 KB
L3 缓存:    6 MB
内存:    16 GB
Boot ROM 版本:    MBP114.0172.B16
SMC 版本(系统):    2.29f24

IntelliJ IDEA 版本

IntelliJ IDEA 2017.1.5
Build #IC-171.4694.70, built on July 4, 2017
JRE: 1.8.0_131-b11 x86_64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Mac OS X 10.12.5

问题原因

默认的IDEA JVM参数配置较低,其中配置存放在 /Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions文件中,该文件为IDEA 全局配置文件:

-Xms128m-Xmx750m-XX:ReservedCodeCacheSize=240m

解决方法

修改`Info.plist`文件

定位`Info.plist`文件

该文件存放在/Applications/IntelliJ IDEA CE.app/Contents 目录下:

total 32
16 -rw-r--r--    1 Mercy  admin  421
0  7 11 18:43 Info.plist 
0 drwxr-xr-x@   3 Mercy  admin   102  7 11 16:21 MacOS 
0 drwxr-xr-x@   7 Mercy  admin   238  7  5 14:06 Resources 
0 drwxr-xr-x@   3 Mercy  admin   102  7  5 14:06 _CodeSignature 
0 drwxr-xr-x@  13 Mercy  admin   442  7 11 18:00 bin 
0 drwxr-xr-x@ 116 Mercy  admin  3944  7  5 14:06 lib 
0 drwxr-xr-x@  34 Mercy  admin  1156  4 25 15:49 license 
0 drwxr-xr-x@  33 Mercy  admin  1122  4 25 15:49 plugins 
0 drwxr-xr-x@   3 Mercy  admin   102  7  5 14:06 redist

修改`VMOptions`

用 vi 工具打开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>

其中JVM 参数 -XX:+UseConcMarkSweepGC 为 IDEA 默认配置GC 算法,将其移除,修改为:

<key>VMOptions</key>
<string>-Dfile.encoding=UTF-8 -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

调优后观察

风扇旋转情况

启动 IntelliJ IDEA 2017.1 后一小时有余,发现风扇狂转的问题基本上没有发生。

JVM 概要情况

通过工具JConsole 连接 IDEA 进程,观察相关数据。

连接名称: pid: 9743                                        
运行时间: 1 小时 39 分钟
虚拟机: Java HotSpot(TM) 64-Bit Server 
VM版本 25.131-b11   
进程 CPU 时间: 6 分钟

JVM 参数情况

VM 参数:-Dfile.encoding=UTF-8 -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none-XX:ErrorFile=/Users/Mercy/java_error_in_idea_%p.log 
-XX:HeapDumpPath=/Users/Mercy/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar-server 
-XX:+UseG1GC -XX:+UseNUMA -Xms512m -Xmx8g -XX:MaxMetaspaceSize=512m 
-XX:ReservedCodeCacheSize=240m-Djb.vmOptionsFile=/Users/Mercy/Library/Preferences/IdeaIC2017.1/idea.vmoptions -Didea.java.redist=jdk-bundled-Didea.home.path=/Applications/IntelliJ IDEA CE.app/Contents -Didea.executable=idea -Didea.platform.prefix=Idea -Didea.paths.selector=IdeaIC2017.1

其中用户idea.vmoptions文件中的配置信息已经追加到JVM 启动参数中:

-server -XX:+UseG1GC -XX:+UseNUMA -Xms512m -Xmx8g -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=240m

JVM 内存情况

当前堆大小:   376,068 KB
最大堆大小: 8,388,608 KB
提交的内存: 524,288 KB
暂挂最终处理: 0对象
垃圾收集器: 名称 = 'G1 Young Generation', 收集 = 58, 总花费时间 = 1.583 
秒垃圾收集器: 名称 = 'G1 Old Generation', 收集 = 2, 总花费时间 = 1.930 秒

GC 算法已经由CMS切换成了G1算法!

为什么要选择用户`idea.vmoptions`文件

IDEA 官方的说明

Since version 14.0.0, the file /Applications/IntelliJ Idea XX.app/Contents/bin/idea.vmoptions or /Applications/IntelliJ Idea CE XX.app/Contents/bin/idea.vmoptions should be copied to ~/Library/Preferences/IntelliJIdeaXX/idea.vmoptions or ~/Library/Preferences/IdeaICXX/idea.vmoptions.

避免升级配置覆盖

IntelliJ IDEA 版本升级时,除非用户自行控制,默认情况IDEA会将全局的idea.vmoptions文件覆盖,因此,选择用户的idea.vmoptions文件可避免升级配置覆盖。

原文发布于微信公众号 - 芋道源码(YunaiV)

原文发表时间:2018-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏龙首琴剑庐

OpenJDK8 Windows编译

前言 Open JDK 是开源的JDK。通过对开源JDK的编译调试,我们可以深入了解JVM的运行原理。 以下是我的环境信息: 操作系统: Microsoft W...

81811
来自专栏LanceToBigData

SpringBoot(二)Web整合开发

Spring Boot (二):Web 综合开发 本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功...

3467
来自专栏JadePeng的技术博客

Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

为了规范代码,我们一般会集成静态代码检测工具,比如PMD、FindBugs、Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮...

5303
来自专栏恰童鞋骚年

.NET Core微服务之服务间的调用方式(REST and RPC)

  微服务之间的接口调用通常包含两个部分,序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、by...

2496
来自专栏IT笔记

SpringBoot开发案例之微信小程序文件上传

最近在做一个口语测评的小程序服务端,小程序涉及到了音频文件的上传,按理说应该统一封装一个第三方上传接口服务提供给前段调用,但是开发没有那么多道理,暂且为了省事就...

7377
来自专栏Java学习123

Eclipse报内存溢出

3285
来自专栏用户2442861的专栏

使用IntelliJ IDEA开发SpringMVC网站(四)用户管理

转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 。

2681
来自专栏大闲人柴毛毛

手把手0基础项目实战(三)——教你开发一套电商平台的安全框架

写在最前 本文是《手把手项目实战系列》的第三篇文章,预告一下,整个系列会介绍如下内容: 《手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(S...

4726
来自专栏编程

这款高并发应用框架实在太好用了,伙伴们你造吗?

Titan 框架开发快速入门 Titan Framework是通过Actor模型使用响应式消息传输模式,提供具有高性能、高响应、高可伸缩和高韧性的并发应用框架。...

23410
来自专栏代码拾遗

SpringMVC 教程 - 异步请求

在Servlet容器中启动异步支持之后,controller的方法可以通过DeferredResult包装返回值来支持异步处理。例如:

2333

扫码关注云+社区

领取腾讯云代金券