不爱我就算了
但是你也要跟我说一下吧
没必要对我冷暴力
我大抵是熬不过这一天了
等你的消息就让我生不如死了
前不久,IDEA 2024.3 早期访问计划,也就是 EAP 已经发布了,其中释出了几个很有意思的新特性。
第一个,增强的HotSwap特性
我们知道HotSwap的作用主要是在我们修改代码后,不需要重启就能看到最新的程序效果,俗称热替换,用人话说就是实时加载代码。
这类功能在 IDEA 中本身的支持是非常弱鸡的,所以不得不安装类似 JRebel 之类的插件来实现热替换。
因为这个功能能够肉眼可见的节省很多的项目重启时间,所以也深受大家喜爱,特别是一些老项目,代码库很大,启动一次都要 8 分钟,这怎么能受得了啊!
而 IDEA 这次带来的这个新特性是怎样的呢?
首先你需要以 debug 的形式运行你的项目,然后放你的代码发生改变的时候,IDEA 会给你一个按钮来让改动后的代码生效,并且可以在终端看到 start computation 的标识。
如上,IDEA 会自动检测代码是否有改变,有的话就会在这里给出提醒,然后你可以点击像 debug 的按钮应用 hot swap。
同时在控制台也会有对应的日志出现
但是这个功能也会有一些局限,显得不如 JRebel 这类工具强大。
第一点,对于方法体内部的修改是有效的,但是对于方法签名的修改是没效果的
第二点,添加或者删除类的成员是没有效果的
这几个限制是因为收到了标准 VM 的影响,但是如果使用的是Dynamic Code Evolution VM,简称 DCE VM。下面就简称 DCE 了。
为什么 DCE 可以突破限制呢?
DCE 是标准 VM 的一个补丁,通过修改JAVA HOSTSPOT虚拟机,允许对已加载的class进行任意的修改:增加或删除变量、方法,接口的继承关系等, 来提高开发效率。
它使用了fast in-place instant update算法保证了在性能上与full gc相当。DCE 可以在标准的开发环境中使用,不需要额外的工具或依赖。
DCE 的能力之强,也使得他的应用范围很广,除了我们日常 debug 用它可以提高开发效率之外,还有如下几个应用。
第一个,不停机更新服务
关键性服务可以通过DCE进行不停机升级,这依赖于升级的安全性与正确性。代码升级前或升级后服务速度不会降低。听起来就令人激动的不得了了,居然还有这种神仙技术。
第二个,动态语言的特性
在动态语言中,DCE是最普通的特性,但为了在静态类型虚拟机上运行动态语言,其实需要做多方面努力。
第二个,加速多模块的编译速度
在之前的 IDEA 版本中,项目里面的多个模块是怎么编译的呢?
答案是 one by one。
那可想而知,对于大项目,我们等待的时间会是多么难熬啊!我是经历过这类痛苦的,从下载依赖到项目第一次运行起来,你可以看完一部抓娃娃电影,打一把黑神话悟空,再打开美团点一杯我爱你,你爱我的蜜雪冰城喝起来。
等到太阳落山的时候,再看看程序起来没有。
这次的 IDEA 更聪明了,决定在适合的时候开启并行编译。
可以按如下这样配置
什么是适合的时候呢?就是他觉得并行编译不会耗尽你的 CPU 等资源的时候。
版权归原作者 golang学习记 所有, 如有侵权,请联系我们删除。