您的位置:首页 > 教程 > JAVA/JAVA编程 > 最新IDEA 2022基于JVM极致优化 IDEA启动速度的方法

最新IDEA 2022基于JVM极致优化 IDEA启动速度的方法

2022-08-05 18:07:07 来源:易采站长站 作者:

最新IDEA 2022基于JVM极致优化 IDEA启动速度的方法

目录
IDEA 2022最新版基于 JVM极致优化 IDEA 启动速度1. 引言2. 开始结语

IDEA>

1.>

相信做 Java 开发的同学,对 IDEA 这个工具应该都不陌生,即使不使用 IDEA 做开发,那么对 Eclipse 这个工具应该也不会陌生,如果这两个都不用的同学,我就想弱弱问一句,您不会是在使用记事本吧?

上面除了那个记事本,我相信所有的同学都对 IDEA 或者说 Eclipse 这两个工具的打开速度深有印象吧。

只要你没自己改过启动参数,不管电脑多高的配置,我相信这个打开速度应该都快不到哪去。

前面写了这么多篇的 JVM 相关内容,今天我尝试优化一下 IDEA 的启动速度(手头没有 Eclipse ),这算是小试牛刀,希望最后不要翻车。

2.>

我使用的是 JDK 自带的 VisualVM 可视化工具,主要使用的是它的那个 GC 插件。

首先第一次打开 IDEA ,加载时长按照 IDEA 所有组件加载完成进行人工卡点(本来想找个插件的,结果 IDEA 这方面的插件还真没找到)。

IDEA 在打开的过程中,右下角会有一个进度条在一直读条,我就大约等那个条读完了进行计时。

后续操作的过程中发现其实完全没必要,因为差距简直太明显了。

首先在默认配置的情况下第一次打开 IDEA ,然后看下 VisualVM 的数据图:

GC 情况:

概览情况:

我直接被这个 Class Loader 加载速度惊呆了,活活消耗了 3m 34s 的时间,由于其他操作都是并行的,这一项的耗时直接撑破天了。

不过同时可以看到 GC 的消耗,好像并不是很大, Minor GC 发生了 147 次,但是 Full GC 一次都没有发生过,共计耗时 712ms 。

但是看到下面的概览图还是能发现一些端倪的,就比如当前堆大小在一直不停的扩容。

先找到 IDEA 的配置文件,看下默认配置,我本地的路径是 D:\Program Files\JetBrains\apps\IDEA-U\ch-0 ,这个路径每个人都不一样,大家自己找自己的,找到以后打开 idea64.exe.vmoptions 这个文件:

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true

可以看到最小堆是设置 128MB ,而最大堆是 750MB ,使用的是 CMS 收集器,我使用的电脑硬件内存是 16GB ,这么大的内存空间,果断直接把最小堆改成 1G ,最大堆改成 2G ,关掉 IDEA 再重启看下效果。

修改后的配置如下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50

GC 情况:

概览情况:

可以看到,Class Loader 时长瞬间就下来了,从 3m 变成了 24s ,并且 Minor GC 的时长整整缩短了一半,从 712ms 下降到了 342ms ,次数也由之前的 147 次下降到了现在的 9 次,依然没有 Full GC 产生(废话,内存开了这么大又填不满)。

并且看概览图的时候可以看到,堆内存扩容只扩容了一次。

那么还能不能再短点呢?看下整个图,感觉 ClassLoader 还有空间嘛,我们还可以把加载时的验证给关掉,使用 -Xverify:none ,这样应该还能再降低一些加载的耗时。

修改后的配置如下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TbJhzwT7-1659670388731)(https://c1.lmlphp.com/user/master/2020/10/15/b70f015221dc66e421548ed45ae44ce0.jpg)]

概览情况:

果然,加载时长从之前的 24s 继续下降到了 19s ,差不多减少了有 1/4 左右,还是卓有成效的。

接着我想如果直接把最小堆也设置成 2G ,那么堆大小就无需扩容,会不会有更加正向的影响?

修改后的配置如下:

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1o44sy8W-1659670388732)(https://c1.lmlphp.com/user/master/2020/10/15/d9d2d0aa8157c552c568e077c769c88f.jpg)]

概览情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flkIWGKA-1659670388733)(https://c1.lmlphp.com/user/master/2020/10/15/0726bcc652721803625ce34f90346e4a.jpg)]

实际上并没有什么太大成效。

从概览中可以看到,我当前版本的 IDEA 使用的是自带的 JDK11 :

JDK11 中是有 G1 收集器的,我要么开启 G1 试一下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mpjef1SR-1659670388733)(https://c1.lmlphp.com/user/master/2020/10/15/45124de759ef88e3050d9456c82abc14.jpg)]

概览情况:

看起来好像 Minor GC 的耗时还略有上涨,并且 GC 的次数从 9 次变成了 19 次。

不过看到概览图发现了一个更神奇的事情,当使用 G1 的时候,整个使用堆大小竟然没有突破 1G ,看来电脑内存不够大的同学更加推荐使用 G1 回收器,虽然 GC 的耗时稍有增加,不过能减少内存的使用,而 G1 的 GC 机制又是大量并行的,这点根本无伤大雅。

最后我放一下我修改后的整体的配置:

 -Dide.no.platform.update=true
-Dtoolbox.notification.token=ZATtXMyB3ZsNhTvmYivkW7tYp5ZT4GlqKFIx3Bp4_Ik=
-Dtoolbox.notification.portFile=D:\IDEA\apps\IDEA-U\ch-0\222.3345.118.vmoptions.port
-Didea.plugins.path=D:\\IDEA\\apps\\IDEA-U\\ch-0\\222.3345.118.plugins

# 上面部分为最新版本IDEA 默认配置,保留即可,新增下面这些配置即可
-Xms6g
-Xmx8g
-XX:ReservedCodeCacheSize=2048m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-Dide.no.platform.update=true
-Djdk.attach.allowAttachSelf=true
-Dfile.encoding=UTF-8

当然,如果不用 IDEA 的同学,只要是用 Jetbrain 全家桶套件,例如写 Python 最常用的 Pycharm ,同样也可以按照本文的方式进行配置,我自己又给 Pycharm 修改了一下配置,启动速度绝对大幅提升,肉眼可见的那种。

结语

到此这篇关于最新IDEA 2022基于JVM极致优化 IDEA启动速度的文章就介绍到这了,更多相关idea200优化 IDEA启动速度内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!

如有侵权,请发邮件到 [email protected]

相关文章

  • Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    什么是SkyWalking 查看官网https://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 安装 进入下载页面https://
    2020-06-18
  • 成功解决IDEA2020 Plugins 连不上、打不开的方法

    成功解决IDEA2020 Plugins 连不上、打不开的方法

    IntelliJ IDEA 2020.1 插件中心一直打不开,鉴于有部分同学反馈设置http proxy不能解决,所以可按以下顺序检查 一、设置 http proxy—勾上Auto-detect proxy setting,参照下图,加上地址 http://127.0.0
    2020-06-25
  • Java后台实现微信支付和微信退款

    Java后台实现微信支付和微信退款

    微信支付流程 都是我自己工作中开发的,亲测可用,不喜勿喷。 controller中我是这么写的,你们需要根据自己的业务需求改动。ResponseBean是我自己封装的,你们可以改成你们想要的形式
    2020-03-27
  • IDEA2020 1.1中Plugins加载不出来的问题及解决方法

    IDEA2020 1.1中Plugins加载不出来的问题及解决方法

    进入File-Setting 如图,取消勾选,点击确认后重启,点击了以后等一会就可以正常显示 ps:下面看下解决IDEA 2020.1.1 找不到程序包和符号 问题描述 IDEA 2020.1.1 maven项目build的时候报错,找
    2020-06-28
  • Intellij idea热部署插件JRebel的使用

    Intellij idea热部署插件JRebel的使用

    项目需求,一直用eclipse的我,也要改用IDEA了,一开始,很不习惯。经过几天的慢慢摸索和习惯之后,发现IDEA确实很好用。dark的界面是我喜欢的,智能的提示也让写代码不再枯燥。 遗
    2020-06-25
  • 详解基于IDEA2020.1的JAVA代码提示插件开发例子

    详解基于IDEA2020.1的JAVA代码提示插件开发例子

    之前因为项目组有自己的代码规范,为了约束平时的开发规范,于是基于2019.1.3版本开发了一个代码提示的插件。但是在把IDEA切换到2020.1版本的时候,却发现疯狂报错,但是网上关于
    2020-06-25
  • springboot + rabbitmq 如何实现消息确认机制(踩坑经验)

    springboot + rabbitmq 如何实现消息确认机制(踩坑经验)

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷
    2020-07-01
  • JetBrains IntelliJ IDEA 2020安装与使用教程详解

    JetBrains IntelliJ IDEA 2020安装与使用教程详解

    对于JetBrains IntelliJ IDEA 2020的认识 IntelliJ IDEA 2020是一款JAVA编程软件,捷克IntelliJ公司研发推出。该软件提供了一个非常强大的JAVA集成开发环境,不仅添加了对Records的完整代码洞察支持,
    2020-06-28