250M 的 Java 程序,用 go 重构,只需要 8M

2024-07-21 21:48:39 +08:00
 karottc

把之前的 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

24090 次点击
所在节点    Java
152 条回复
bronyakaka
2024-07-21 23:42:26 +08:00
非要用 springboot 这种重量级框架那还怪 java 吃内存干什么,java 技术栈也有很多轻量级框架。go 写 web 真的超级难用,只适合很简单的业务逻辑
keepRun
2024-07-21 23:48:47 +08:00
现在手机普遍都 12g 内存了,内存其实很便宜,国内的流量带宽才是跟金子一样
march1993
2024-07-21 23:53:50 +08:00
内存虽然越来越便宜,但是 CPU 的 cacheline 其实近十年也没有太大的长进,省内存可能会带来性能上的优势
youyang
2024-07-21 23:59:45 +08:00
@keepRun 运营商还天天说亏损呢
jackmod
2024-07-22 00:18:20 +08:00
golang 学起来确实快,需求驱动,入门不到 4 小时。
我也准备把 python 写的差不多稳定的原型改成 go 作为学习。
至于 rust ,真就下次一定了(
darrh00
2024-07-22 00:47:36 +08:00
gin 和 springboot 相比,完善度有多少?
maigebaoer
2024-07-22 00:53:02 +08:00
@bronyakaka 同意。Go 写 web 真的不够酸爽
qping
2024-07-22 01:46:13 +08:00
@karottc 没用过 kotlin native ,为什么会不支持 mysql ,是 kotlin native 不能用 mysql 的 jdbc 驱动包了?
Leviathann
2024-07-22 02:20:38 +08:00
@qping kotlin native 是用 llvm 编译成机器码的,怎么支持运行在 jvm 上的 jar 文件
qping
2024-07-22 03:59:54 +08:00
@Leviathann 了解了,看起来是只能用一些 kotlin 的标准库了,不过问 chatgpt 说是可以用 c/c++的 mysql 客户端
BeiChuanAlex
2024-07-22 04:44:19 +08:00
如果这么说,如果用 c 写,那么不是内存占用更少了
SeaTac
2024-07-22 06:17:14 +08:00
你站一天天的都是什么牛鬼蛇神
irezpeng
2024-07-22 07:37:13 +08:00
哈哈哈哈,语言无好坏,喜欢博主这种折腾的精神,无非就是多学一门语言而已,以前看左耳朵耗子博客,大佬也同时学了多门语言,还运用的不错 rust 就是跟着左耳朵耗子入坑的,个人主职也是 Java ,除了 Java ,我 vue3 、node 、typescript 、js 、html 、cs 、rust 、shell 、python 也是能通水平、同时我原型也画的还可以,工具只是实现目的的工具
chendy
2024-07-22 07:58:49 +08:00
连续剧是吧?楼主和 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 时间什么线程池参数
所以还是建议把精力用在更有深度的地方,别天天跟这些玩具较劲
msg7086
2024-07-22 08:20:39 +08:00
等人长大了就知道,能早点下班,能多拿点钱,比什么都重要。
要是 Java 能让我一年多拿十万块钱,别说 250M 内存了,250G 内存我都喂给你。
dbpe
2024-07-22 08:32:05 +08:00
@chendy +1 现在写复杂业务..搞 java...简单就 GO,影音相关就 C/c++
bhoppi
2024-07-22 08:32:47 +08:00
每次见到这种讨论都会有很多人说 Spring 太重了云云。我没学过 Spring ,
bhoppi
2024-07-22 08:34:39 +08:00
我之前在别的语言用过不少很重的框架,基本上不用的模块是不会占用
bhoppi
2024-07-22 08:44:03 +08:00
抱歉,不经常在 V2EX 发言,感觉 V2EX 的移动网页版有问题,一不小心就把文字发出去了,而且我没找到删除和修改的地方,因此请忽略上两层的回复。
我想表达的是,每次这种讨论都会有很多人说 Spring 太重了,我就有疑惑,我没用过 Spring 但也用过别的语言的比较重的框架,基本上不用的模块是不会占用内存的。难道 Spring 的设计是,不管你用不用里面的功能,只要引入了库,就会造成大量的基础开销么?
flytsuki
2024-07-22 08:53:11 +08:00
有空对比一下 dotnet aot 么。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX