Java 原生编译的 Solon 回忆录
最近和@雨韵诗泽
、@读钓
两个小伙伴一起(主要是他们两在出力),适配了 Solon Native 的第一个开源项目:dromara/neutrino-proxy (里程碑案例啊!有点修行大成的味道了!)。总体来说:
- 适配调整完后,代码变化不太大
- 整个过程是很麻烦的。因为 graalvm native image 社区版不能调试,只能不断试(发现缺什么,就补什么配置)
1、缘起
2021 年的深秋,有个叫 @馒头虫
的男人。跑过来讲,他有个项目需求是(给一个美国大厂做的):存放空间只有 100M,内存只有 100M,在硬件里运行一个管理界面系统。他研究了 spring native,因为它的基础就太大没过;研究了 go,做复杂的界面系统不好预期没过。所以选择尝试 solon。
于是他种下了一颗 solon native 的种子。开始浇水、施肥。前后一两个月的时间,真的也开花了(最后好像只有 53m 大小)。这365万字省去,他怎么不哭呢?
这个男人总结出了三条经验:
- 所有的反射需要提前登记(放到特定的配置文件里),并通过配置获取反射导引(比如一个类有哪些字段,哪些方法)
- 所有的资源文件获取需要提前登记(放到特定的配置文件里)
- 所有的动态编译、类字节码,不能用
说起来,Solon 框架 真的是好啊(按那男人的讲法:小是真的小,快是真的快):
- 启动快 5 ~ 10 倍;
- qps 高 2~ 3 倍;
- 运行时内存节省 1/3 ~ 1/2;
- 打包可以缩到 1/2 ~ 1/10;
2、认识 APT
后面很长的时间,我没再碰它(主要是无知,无从下手。懵!)。偶然的一天,路过 mybatis-plus 4.x 项目仓库,看到 APT 这几个字眼。我对 java 确实是无知,百度后才知道神器 lombok 就是基于 APT 实现的。然后,我想起了那个男人总结的三条经验:
- 所有的反射需要提前登记
- 所有的资源文件获取需要提前登记
- 所有的动态编译、类字节码,不能用
是不是可以借助 APT,去提前生成类的代理代码,去完成资源文件、反射的登记?我估计是行的。
2023年的初春,花了一周时间,把类的代理用 APT 在编译时生成了。开心是开心的。但是,怎样获取需要代理的类,成了一个不解的题。路很长。然后,暂时没有然后了!
3、认识 AOT
好多年前就听过 AOT,大概知道它是干嘛的。但是,还是一脸懵。
2023年的春后,有个叫 @李总
的男人。他说,我有个项目想要用 solon 的原生编译,而且可以叫个人帮忙搞。最后出现的男人叫 @读钓
,不知道是 @李总
忽悠过来的,还是我把他忽悠过来的(后来,据他说是自己跑来的)。他说,我们应该A,B,C...这么这么搞!
还有个加强版的 AOT。原来如此,原来如此:
- 在编译后 -> 运行项目并获取运行中的信息 -> 然后完成各种预编译和登记 -> 再进行原生编译
- 一气呵成
这个男人从春天搞到了夏天。成了!(当中略过365万字...),一直搞,不知道有没有洗过澡, 有没有换过衣服。
4、我们发布第一个 Solon Native 版本
2023年的夏天,有个新男人来。说是要用 Solon Native。我心里其实没底,原生这东西太难用了。必须得忍住不哭才行。后来他招乎也没打,跑了。
真的是太难用了:
- 目前没有哪个框架是开箱即用的(Spring Native 和 Quarkus 也一样)
- 框架不一定把生态内的所有包都适配好了
- 第三方的包,框架没法照顾到。只能自己试着做些补充登记(没法调试,只能尝试或实验)
- 随便升级某个第三方包,就可能不兼容了(需要重新适配)
5、你信轮回?
2023年的深秋,又是一个深秋。男人 @雨韵诗泽
,说想把他的 dromara/neutrino-proxy 开源项目搞成原生编译的。我说,那得忍住不哭才行。他说,他不会哭(其实,他动得不多。哈哈)。@读钓
又开始忙了。
说起来,@读钓
是从春天干到了秋天。终于成了:《Solon v2.5.12 发布,Java 原生编译再起》。我们也是正经的支持 Java 原生编译的生态型框架了。且是,国产的。
开源,让很多人的愿望和努力汇聚一处,也记录了共同的回忆。
人生路,且短且长,只怪情深缘浅,你信轮回?

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
AlmaLinux 9.3 正式发布,CentOS 最佳替代方案之一
AlmaLinux 9.3 已正式发布,代号“Shamrock Pampas Cat”。目前提供的 ISO 镜像文件支持如下 4 种架构: Intel/AMD (x86_64) ARM64 (aarch64) IBM PowerPC (ppc64le) IBM Z (s390x) AlmaLinux 是开放源码的、社区驱动的项目,它从红帽企业版 Linux (RHEL) 的源码编译而来。AlmaLinux 跟 RHEL 8 完全在二进制上兼容,它由 CloudLinux OS 的创建者打造。AlmaLinux 团队承诺永久免费提供 AlmaLinux 操作系统,项目永久开源且不采取任何限制,不收取任何费用,支持至 2029 年。 2020 年 Red Hat 决定停止将 CentOS Linux 作为独立发行版,改为推出滚动更新发行版 CentOS Stream,把它作为企业发行版 RHEL 的上游 beta 版本。社区立即推出了多个项目替代 CentOS,其中最为突出的是两个项目:Rocky Enterprise Software Foundation 赞助的 Rocky Linux...
- 下一篇
华为与美团达成合作,正式启动鸿蒙原生应用开发
华为迎来又一个鸿蒙生态的重要合作伙伴,宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作,全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原生应用全面启动以来,已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态。此次美团成为最新加速融入鸿蒙生态的行业头部伙伴,形成“鸿蒙千帆起”的景象。 周一,在北京举行的“鸿蒙原生应用开发启动仪式”上,华为终端云服务总裁朱勇刚表示:“很高兴美团成为鸿蒙生态重要的合作伙伴,鸿蒙正在致力于打造一个‘一切皆服务,万物可分享’的新生态。鸿蒙独有的分布式技术,以及一次开发、多端部署,能让美团的服务在手机、平板、车机等设备上无缝流转,为用户提供场景化、智慧化的“服务合时宜”新体验。未来华为希望与美团基于端到端的鸿蒙生态,持续源源不断地的创新,助力美团等互联网企业获取新流量和商机,创造更大的商业价值。” 作为扎根本地的中国科技零售企业,美团通过“零售+科技”的战略践行“帮大家吃得更好,生活更好”的公司使命。美团高级副总裁李树斌表示:“美团始终以客户为中心,不断...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6