百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

IDEA 2024.3 版本预览:这几个新特性吊炸天了都!!!

bigegpt 2025-05-28 15:33 15 浏览

不爱我就算了

但是你也要跟我说一下吧

没必要对我冷暴力


我大抵是熬不过这一天了

等你的消息就让我生不如死了




前不久,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 等资源的时候。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...