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

 更新时间:2022年08月05日 14:37:28   作者:Resourceful!  
这篇文章主要介绍了IDEA 2022最新版 基于 JVM极致优化 IDEA 启动速度,需要的朋友可以参考下

IDEA 2022最新版基于 JVM极致优化 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启动速度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用Spring Security实现登录注销功能

    SpringBoot使用Spring Security实现登录注销功能

    这篇文章主要介绍了SpringBoot使用Spring Security实现登录注销功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • SpringBoot整合Retry实现错误重试过程逐步介绍

    SpringBoot整合Retry实现错误重试过程逐步介绍

    重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有,感兴趣的可以了解一下
    2023-02-02
  • SpringBoot HikariCP配置项及源码解析

    SpringBoot HikariCP配置项及源码解析

    这篇文章主要为大家介绍了SpringBoot HikariCP配置项及源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • springboot启动不了也不报错的问题及解决

    springboot启动不了也不报错的问题及解决

    这篇文章主要介绍了springboot启动不了也不报错的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java中equals方法使用及重写练习

    Java中equals方法使用及重写练习

    equals是在object类中的方法,在object中equals是用来看看两个参数是否引用的是同一个对象,下面这篇文章主要给大家介绍了关于Java中equals方法使用及重写练习的相关资料,需要的朋友可以参考下
    2023-05-05
  • lambda表达式解决java后台分组排序过程解析

    lambda表达式解决java后台分组排序过程解析

    这篇文章主要介绍了lambda表达式解决java后台分组排序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java实现简易贪吃蛇游戏

    java实现简易贪吃蛇游戏

    这篇文章主要为大家详细介绍了java实现简易贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Java实现开箱即用的redis分布式锁

    Java实现开箱即用的redis分布式锁

    这篇文章主要为大家详细介绍了如何使用Java实现开箱即用的基于redis的分布式锁,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以收藏一下
    2022-12-12
  • Spring Boot读取自定义配置文件

    Spring Boot读取自定义配置文件

    在Spring Boot项目中我们经常需要读取application.yml配置文件的自定义配置,今天就来罗列一下从yaml读取配置文件的一些常用手段和方法。
    2021-05-05
  • 深入浅析Mybatis的缺陷问题

    深入浅析Mybatis的缺陷问题

    Mybatis是业界非常流行的持久层框架,轻量级、易用,在金融IT领域完全是领军地位,比Hibernate更受欢迎,优势非常多,也是非常值得我们学习的。这篇文章主要介绍了Mybatis的缺陷问题的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论