把之前的 java 程序,这周学了下 golang ,然后用 golang 重构了下,稳定运行之后内存占用 8M 。
前文:
果然吃内存,一个简单的 Java 程序就占用了 250M 内存
quarkus-graalvm 可以救 Java native 一命
程序功能如下:
这几天的结果如下:
java springboot: 250M
java (无框架):90M
java, quarkus + graalvm + native: 50M
python: 20M
go: 8-10M 。
本来想用下 rust, 发现如果不系统的学习,根本没发写出正常的程序,暂时放弃了。
go 在资源受限的情况下,确实表现很好。之前我是排斥学 go 的,这次做项目发现,也不是不能接受。我之前写 C 的,要啥啥没有,现在有了 go, 就是 c with gc ,而且库多(相比于 c )。而且交叉编译非常方便。
不过工作中暂时用不到 go ,玩完了。 我还是选择 kotlin
今天借助chatGPT,用rust 重构了一版,功能完全是等同的,内存消耗:14M。比go 大,但是执行程序小了很多,只有7M。
内存更大可能是因为我选的库和依赖和实现的问题的,因为我只是之前学过rust 教程,并不能独立写出rust程序,必须要通过chatGPT的帮助才行。
到目前为止,用java、go、rust 都写了一版,这个系列可以结贴了。
这个项目非常小,但是完全可以作为学习后端web开发的起手入门项目,涉及到的知识点和CRUD操作都有了。开发的过程也本着一个原则的:方便后续迭代和维护,方便增加新功能。 (所以那些用shell 命令来做相同的事的,虽然可以,但是不符合这个原则,所以没有去尝试)
有兴趣有时间来做不同语言的实验(目前只做了感兴趣的这几个语言,别的语言平台,比如.net 之类的,欢迎各位来分享结果),只是为了以后碰到各种情况的时候,做合适的技术选型。
当然很多结论是我个人的主观感受,当然涉及到个人看法肯定都是主观的,我年纪越大现在反而越讨厌那些看似中立的观点(实际啥用都没有)。
![]() |
1
tanranran 48 天前
大佬可以试下 kotlin native
|
![]() |
2
saranz 48 天前
其实就和 react 一样,业务代码一丢丢,但是库文件占了线上代码的大部分。
用 Solid 重构之后线上代码变小了很多一个样。 |
3
boqiqita 48 天前 ![]() 试试 shell 命令,估计就几十 kb
|
![]() |
4
potatowish 48 天前 via iPhone
可以再试试用 servlet 实现,少用三方库,springboot 太占内存,
|
![]() |
5
arloor 48 天前
哈哈,我也是一路从 java 走到 go ,后面又走到了 rust ,内存占用真的少。
|
![]() |
7
silvernoo 48 天前 ![]() 总结,Java 一坨屎,落后的毒瘤
|
8
aeiou520 48 天前
不懂你怎么选的依赖。我这边 springboot 按照你的功能点选依赖 jdbc ,mysql 驱动,starter-web ,打出来的包也就 21mb
|
![]() |
10
sagaxu 48 天前
quarkus native 应该能优化到 20M 以内
|
11
keepRun 48 天前
我为了测试 web 占用大小,还测试过 rust ,可以做到 4m
|
12
keepRun 48 天前
这我以前写的应该有点作用:《 graalvm 拯救了 Java 的启动速度,但没法拯救 Java 的内存占用》 https://v2ex.com/t/1005841
|
13
mark2025 48 天前
@keepRun go, rust 偏底层,写应用业务没那边顺畅,折衷选 TS+nodejs:既有 js 灵活以及 TS 类型保护,也没有 spring 全家桶那么重(占用资源太多)
|
![]() |
14
inframe 48 天前
写代码实现功能,最快的估计还是 python
|
![]() |
15
darkengine 48 天前 ![]() 没有坏的语言/框架,只有坏的实现。
这个需求选 Java/SpringBoot 是杀鸡用牛刀。 |
16
si 48 天前
打包看了下,JAR 文件 24MB ,运行起来用了 350MB 内存。
|
![]() |
20
zzzmh 48 天前 ![]() 说的没毛病,但我作为一个不会 go 的 java 也要给 java 说几句好话找补一下
现在服务器没那么贵的离谱的情况下,多 1 个 G 的内存,也没那么重要 N 年前的 JAVA ,也没比他以前的老同行省内存过,照样不耽误卷死同行, 个人认为 Java 的优势在培养一个程序员成本低,开发大型项目难度小周期成本低。 反过来想,理论上假如说你全部手搓代码,C 搓一个程序,肯定比 Java 性能强 N 倍,多系统运行不在话下,但培养一个员工的成本血贵,开发大型项目时间周期太长,这些成本远超内存上的这点小钱 |
![]() |
21
bronyakaka 48 天前 ![]() 非要用 springboot 这种重量级框架那还怪 java 吃内存干什么,java 技术栈也有很多轻量级框架。go 写 web 真的超级难用,只适合很简单的业务逻辑
|
22
keepRun 48 天前
现在手机普遍都 12g 内存了,内存其实很便宜,国内的流量带宽才是跟金子一样
|
23
march1993 48 天前
内存虽然越来越便宜,但是 CPU 的 cacheline 其实近十年也没有太大的长进,省内存可能会带来性能上的优势
|
25
jackmod 48 天前
golang 学起来确实快,需求驱动,入门不到 4 小时。
我也准备把 python 写的差不多稳定的原型改成 go 作为学习。 至于 rust ,真就下次一定了( |
![]() |
26
darrh00 48 天前
gin 和 springboot 相比,完善度有多少?
|
27
maigebaoer 48 天前 via Android
@bronyakaka 同意。Go 写 web 真的不够酸爽
|
![]() |
28
qping 48 天前 via Android
@karottc 没用过 kotlin native ,为什么会不支持 mysql ,是 kotlin native 不能用 mysql 的 jdbc 驱动包了?
|
29
Leviathann 48 天前
@qping kotlin native 是用 llvm 编译成机器码的,怎么支持运行在 jvm 上的 jar 文件
|
![]() |
30
qping 48 天前
@Leviathann 了解了,看起来是只能用一些 kotlin 的标准库了,不过问 chatgpt 说是可以用 c/c++的 mysql 客户端
|
![]() |
31
BeiChuanAlex 48 天前
|
![]() |
32
SeaTac 48 天前 via iPhone ![]() 你站一天天的都是什么牛鬼蛇神
|
33
irezpeng 48 天前 ![]() 哈哈哈哈,语言无好坏,喜欢博主这种折腾的精神,无非就是多学一门语言而已,以前看左耳朵耗子博客,大佬也同时学了多门语言,还运用的不错 rust 就是跟着左耳朵耗子入坑的,个人主职也是 Java ,除了 Java ,我 vue3 、node 、typescript 、js 、html 、cs 、rust 、shell 、python 也是能通水平、同时我原型也画的还可以,工具只是实现目的的工具
|
![]() |
34
chendy 48 天前 ![]() 连续剧是吧?楼主和 HotSpot 内存占用的爱恨情仇
[Java 很强,但是 Java 的路还很长]( https://v2ex.com/t/950472) [quarkus-graalvm 可以救 Java native 一命]( https://v2ex.com/t/1057699) [果然吃内存,一个简单的 Java 程序就占用了 250M 内存]( https://v2ex.com/t/1055770) 可以理解楼主的心情,因为我年轻的时候也喜欢抠这些东西,什么内存占用什么 gc 时间什么线程池参数 所以还是建议把精力用在更有深度的地方,别天天跟这些玩具较劲 |
![]() |
35
msg7086 48 天前
等人长大了就知道,能早点下班,能多拿点钱,比什么都重要。
要是 Java 能让我一年多拿十万块钱,别说 250M 内存了,250G 内存我都喂给你。 |
![]() |
37
bhoppi 48 天前 via Android
每次见到这种讨论都会有很多人说 Spring 太重了云云。我没学过 Spring ,
|
![]() |
38
bhoppi 48 天前 via Android
我之前在别的语言用过不少很重的框架,基本上不用的模块是不会占用
|
![]() |
39
bhoppi 48 天前
抱歉,不经常在 V2EX 发言,感觉 V2EX 的移动网页版有问题,一不小心就把文字发出去了,而且我没找到删除和修改的地方,因此请忽略上两层的回复。
我想表达的是,每次这种讨论都会有很多人说 Spring 太重了,我就有疑惑,我没用过 Spring 但也用过别的语言的比较重的框架,基本上不用的模块是不会占用内存的。难道 Spring 的设计是,不管你用不用里面的功能,只要引入了库,就会造成大量的基础开销么? |
40
flytsuki 48 天前
有空对比一下 dotnet aot 么。。
|
![]() |
41
skull 48 天前
为老板省钱的其一方法就是优化掉自己
|
42
Ayanokouji 48 天前
@bhoppi spring 采用单例模式,如果启用了(绝大数模块是引入即启用),就会自动创建模块所需的 bean
|
![]() |
43
Daniel17 48 天前
最近为啥这么多吐槽 Java 内存占用的,Java 内存占用多又不是现在才出现的
|
![]() |
44
suyuyu 48 天前
要不怎么会说 PHP 是世界上最好的语言 (
|
![]() |
45
sagaxu 48 天前 ![]() @bhoppi Spring 不重,Spring Boot 很重,启动时扫描每个包每个类,大量使用反射和字节码动态生成织入。在运行时,哪怕只处理一个最简单的 http 请求,它也引入了完整的 tomcat ,执行到你的方法的时候,调用链路深度已经好几十层了。如果访问 DB ,标准姿势是用 JPA ,那就引入 hibernate 那套大家伙了,从 HQL 编译到 SQL ,一级缓存默认开启,不都得消耗内存?更别说有的项目还开二级缓存和查询缓存。Spring 家族是 J2EE 的一个草根实现,各种组件都选取了很重很企业级的实现,默认开启的东西很多,用不到的功能,它也可能占用着内存。大量的类也会占用很多内存,哪怕只调用了一个方法,类加载器不也得把它载入内存么?
|
![]() |
47
xingjue 48 天前 ![]() go 编译速度快 资源占用少 无虚拟机 这的确是当前云原生的优势,java 这几点没法比
|
![]() |
49
tsvico 48 天前
杀鸡用牛刀,你就别怪刀重。要不试试 php 或者 C
|
![]() |
50
yKXSkKoR8I1RcxaS 48 天前
这功能,用 PHP 不好咩?
|
51
brookegas 48 天前 ![]() 看到好多 Javaer 老气横秋教训 op 的,有点三季人的即视感。
“PHP 是世界上最好的语言”,现在可以直接改为“Java 是世界上最好的语言”了。 Java 过于简单,以至于吸引和堆积了大量的跨行业转码人士,他们是重要的屎山贡献者,也是最努力为 Java 辩护和战斗的群体;他们缺乏学习其他语言的能力和动力;由于低门槛易替代,他们也是 35 岁就能轻易被无情替换的螺丝钉。 看到有人发帖说 Java 不好,第一个跳出来反击并对 op 冷嘲热讽的就是他们。 “百万漕工衣食所系” “挡人财路犹如杀人父母” 只能说,理解并祝福吧。。。 |
![]() |
52
listen2wind 48 天前
@Daniel17 这种让我想起来一个段子,一个人说我哥能吃一碗饭,另一个人说我哥能吃一盆饭,再另一个人说我哥能吃答辩
![]() |
![]() |
54
neptuno 48 天前
企业倒是不在乎内存,你这个属于个人需求,确实适合用 go 。我部署在 nas 的程序,都是 java ,不用在乎内存,熟悉的语言好维护,出了问题改的快。
|
55
HaibaraDP 48 天前
技术选型绝了,hello world 写出花来
|
![]() |
56
PaulSamuelson 48 天前
如果遇到一个 Eletron+Java 的桌面端项目,那估计能从 500MB 优化到 5MB 。
|
![]() |
57
wxw752 48 天前 ![]() @brookegas #51 我日常项目 java 和 go 双修,偶尔写写 C#,前端也会,应该不算是单独哪一派,反驳一下你。
你真的看懂上面老哥们说的是什么意思了吗,不是在说 Java 天下第一,而是都在指责 OP 一个很简单的需求用重量级框架,反过头来抱怨内存占用高。毕竟没有最好的工具,只有最适合的工具。 如果你之前是看懂了还要引战,理解不了也祝福不了,如果理解能力捉鸡,那我祝福你 ![]() |
59
Richared 48 天前
怎么每天都有这样的帖子,上次就说了一句,有这个时间给 App 做好点,用户的内存和硬盘就不值钱了?一个 App 安装包动不动 500M 。安卓内存都普遍 16G 了。谁造成的?真有这工匠精神,国内安卓 App 也不能到这个程度。
|
![]() |
62
janda 48 天前
没必要对比,不同需求选择不同方案,也取决于使用者所掌握的语言
|
![]() |
65
MrDarnell 48 天前
@brookegas Java 过于简单-这句话不能苟同,不谈框架,从基础 sdk 使用上来说,别的语言一行可以搞定的事情,java 需要写 5 行,不要谈 spring-boot 带来的简化,只谈语言最基础的东西,php 的确是世界上最好的语言! java 不配!
|
![]() |
67
diagnostics 48 天前
理解并祝福。。。
golang is welcome you |
![]() |
68
dreamage 48 天前
什么场景呀 是在抓利率吗
|
![]() |
70
murmur 48 天前
@Richared 你难道不知道安卓成就成在 java 语言么,要不为啥安卓一开始能迅速构建生态,拉拢全世界开发者
塞班失败有一部分原因就是他开发 c++,太 tm 难学了 现在安卓已经成功了, 选 java 是历史原因改不了,那就升级内存和硬盘呗,反正这俩玩意真不值钱 |
![]() |
71
idblife 48 天前
@zzzmh
一般来说 java 比 go 服务要多占用 1 倍以上的内存,如果你每年数据中心的成本是 5000 万左右,意味着能节省大概 2000 万成本,老板会怎么想呢? |
![]() |
76
murmur 48 天前
@qxdo1234 支持和团队协作、好招人还是有区别的,java 的企业开发太成熟了,这种东西放哪里都是这么开发,人家不看文档凭以前经验就能上手项目
所以 java 成就成在 spring+mybatis/hibernate 包打一切 go 得看咱俩用的轮子是不是一套 |
![]() |
77
murmur 48 天前
国内还有个很重要的因素,java 是信创语言,go 我不知道是不是,java 有阿里的虚拟机这就是国产化
|
![]() |
83
agdhole 47 天前
asp 8 aot 做的网关,只要 45M
|
![]() |
84
storyxc 47 天前
springboot 这种重量级框架内存占用高是事实,但你这个帖子喷歪了,主要是你的选型有问题。
|
![]() |
85
nikenidage1 47 天前
要不试试最新的 .net? aot 之后内存也就 15m 左右吧
|
86
liangch 47 天前
还 14 年的 ID 。
|
88
egfegdfr 47 天前
开发语言之间的比较,不是这么比较的, 你用一个省内存的语言来和一个耗内存高的语言来做比较, 相当于用跑车和五菱宏光比拉货能力。这个不应该是这么比的。
下面的连接是一个比较常用的 27 个语言在耗电、运行时长、运行内存的一个比较的论文的总结, 感兴趣的可以了解下。 https://www.51cto.com/article/629946.html |
![]() |
90
aino 47 天前
梦回 2000 年
|
![]() |
91
abcbuzhiming 47 天前
@idblife 没必要和那些人争,前几年互联网繁荣期,有两拨人吃到了时代红利所以一直忘乎所以,其中一派就是你现在看到的,觉得数据中心的内存很便宜。最狂的时候,我在这里见过人说什么“你连这点内存都买不起来做什么互联网”?还有一拨就是那帮 Electron 。前面那帮人是不把服务器内存当钱,Electron 这帮人则是认为用户电脑的内存不值钱。
|
![]() |
92
murmur 47 天前
@abcbuzhiming electron 是跨平台的主流选择,满足一次开发 5 端( win+mac+linux+信创+阉割后上 web 服务)使用(除了 native 部分),界面开发简单炫酷,而且相比各种奇葩的框架,浏览器是最稳定、成熟,支持界面特性也是最多的,你不知道浏览器为了流畅背后做了什么优化动作
比起用户的流畅性,你是老板,你是要便宜的程序员,炫酷的界面,还是为用户省内存? |
![]() |
93
murmur 47 天前
服务器还有吹逼的余地,毕竟定制硬件,不需要移植,electron 用 h5 开发,单一个可以提供在线服务直接秒了好吧
我连 app 都不需要装,直接浏览器运行,下载 app 有更多特性,在线快速体验,这是爆杀 |
94
FishBear 47 天前
用 nodejs 实现的话 内存会稍微多一点 但是爽多了
|
95
Chinsung 47 天前 ![]() [果然吃内存,一个简单的 Java 程序就占用了 250M 内存]( https://www.v2ex.com/t/1055770#reply125)
你是不是🤡啊,隔三差五就要发一个这样的话题来哗众取宠,然后还隐藏自己的提问记录。 把这当贴吧呢 |
![]() |
96
keppelfei 47 天前
无论你怎么吐槽,嘿,java 市场占有率就是比 GO 要强。
|
![]() |
97
kyuuseiryuu 47 天前
如果你只关注性能,那么这个项目根本就不适合用 Java 。
|
![]() |
98
abcbuzhiming 47 天前 ![]() @murmur 在经济好的时代,你但凡生产出来的东西都卖的出去,自然可以说出:“比起用户的流畅性,你是老板,你是要便宜的程序员,炫酷的界面,还是为用户省内存”。
可现在这个时代不再有了,现在是生产过剩的时代。生产过剩的时代,就是你不卷,有的是人卷,你不愿意为用户省内存,会有人愿意为用户省。汽车行业就是如此。 可以无视用户的想法节约企业成本的套路,仅限于经济高速发展,企业不愁客户的时代,别说 electron 这种恶心用户的东西,淘宝当年恨不得把网页端给砍了,像咸鱼一样彻底用 app ,当时淘宝的前端甚至在各大社区狂言:PC 端用户要对自己的处境有清醒的认知,你们就是一小撮,不值得为了你们去优化用户体验,识相点赶紧往 App 转,移动端才是未来巴拉巴拉。。。结果今年阿里破天荒的跑回来升级自己的 web 端网页。 吃到了时代红利是好事,但是不自知就很成问题了。你可以给用户喂翔,用户有时候也没办法。但是有些人如上面那些,喂用户翔还要硬按着用户的头说翔是香的,真太过分了 |
![]() |
99
jinjiang2024 47 天前
要论写起来快,我会用( python 、php )
|
![]() |
100
javak 47 天前 via iPhone
op 只是分享了下自己的人研究结果….. 各位温柔点
|