前段时间因为一个issue接触到了trava-jdk-8-dcevm,其基于 dcevm 并集成了 HotswapAgent ,允许高级热部署,如方法字段添加等等,并了解到了 JDWP 的一个特性,项目以 Debug 形式启动后,重新编译修改的代码文件后会自动进行热加载。
与标准 JDK 不同(只支持方法体内代码修改的热加载),而 trava-jdk-8-dcevm(DCEVM+HotswapAgent)更多场景的热加载(如添加字段、方法等),在结合sdkman进行 JDK 版本管理,日常开发效率可以有很大的提升。
但是因为日常开发中部署分支和开发分支往往不是同一个分支,要想使用此能力,需要一些操作步骤有点繁琐,所以便实现了这个命令行工具,支持一个命令实现代码热加载。原理如下:
效果如下:
趁着这次命令行工具的开发,体验了一下 GraalVM ,虽然享受到了静态编译带来的诸多好处,但也很明显感受到了一些缺陷,比如编译出来的 native 包很大(有 28M 左右),编译成 jar 包只有 3M 左右。同时如果依赖的三方包中使用了反射、动态代理等能力,很容易出问题,而且还是编译成功,运行时错误。如果提供了一些工具的帮助,还是不能 100%的覆盖到所有的反射类型,会有一些边界情况覆盖不到,可能会产生运行时错误。
1
trimleo 2023-10-07 23:48:06 +08:00 1
哈哈 提 issue 的人前来支持下,cli 工具很方便,另外项目也已经用上了 startup 分析了,很棒 https://raw.githubusercontent.com/guozhigq/emoji_storage/main/coolapk/coolapk_emotion_3_ciya.png
|
2
biubiuGolang 2023-10-08 09:52:29 +08:00
@linyimin520812 jdk 17 以上的怎么.. dcvem 还不支持高版本
|
3
linyimin520812 OP |