把之前的 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 之类的,欢迎各位来分享结果),只是为了以后碰到各种情况的时候,做合适的技术选型。
当然很多结论是我个人的主观感受,当然涉及到个人看法肯定都是主观的,我年纪越大现在反而越讨厌那些看似中立的观点(实际啥用都没有)。
101
DOLLOR 109 天前
|
103
abcbuzhiming 109 天前
@DOLLOR 很简单嘛,按你这个解释,既然要降本增效,阿里应该就直接把 web 版的淘宝砍掉,那岂不是降的更多呢?
经济不好的情况下,企业当然会选择降本,但是这个降本的途径,会从其他渠道走。相反的是。在经济不好的时期,但凡可以引来流量和更多用户的渠道,都必须重视,不光阿里,好几家大厂都开始增强自己的 web 端。为啥,缺流量了呗,每个入口都必须重视了呗。这就是你不干有的是帕鲁干 |
104
zpxshl 109 天前 via Android
@abcbuzhiming 淘宝没落跟 pc 端关系也不大。 它核心竞争对手
|
106
sagaxu 109 天前 1
@idblife 以我了解的某个 800 万/年的机房为例,1U 服务器的年成本,采购价 5 万按 5 年生命周期算每年 1 万,托管费 5000 ,总成本每年 15000 ,内存按 256G 算,1 万左右,分摊到 5 年每年 2000 ,占年均摊成本的 13%。
5000 万年成本的机房,内存大概占六七百万,省一半就是省三四百万。如果配的是 128G 内存,能省一两百万。 实际上不可能全部拿来跑业务服务,很多是拿去跑 DB 等基础设施的,以上节省费用还要减半。 5000 万里省个几十万到一两百万,不知道你的 2000 万是怎么计算出来的。 |
107
abcbuzhiming 109 天前
@zpxshl
淘宝的没落和 PC Web 端是没有关系,有关系的是他没落后的态度,按 101 楼说的,你没落了更应该减员增效对吧,为啥还回来重新升级 PC web 。 本质是上升期看不上那点入口,那点流量,下降期就必须重视了。 PDD 的崛起也是差不多的道理——市场一直有低成本的需求,淘宝在上升期是看不上的,就像 92 楼那位老兄说:他会在这个时期考虑为用户节省吗?反正又没竞争对手怎么都能增长。结果 PDD 就跳出来了。 市场就是这样,你永远想不到刺头会从哪里蹦出来,需求是客观存在的。经济高速发展期,可能用户的需求反而得不到满足,因为这个时期作为商家都忙着吃肉,谁关心你用户怎么想呢?但是经济进入衰退那就要绞尽脑汁去掏以前看不上的“某一小撮群体”手里的钢镚了 |
108
DOLLOR 109 天前
@abcbuzhiming
砍东西肯定要先砍成本高的。 web 版本身成本就低,性价比也不错。 把其他成本高的开发砍了之后,最后留下来的,反而正是 web 、webview 、electron 这些东西,而不是去卷那几个内存。 |
109
murmur 109 天前
@abcbuzhiming 淘宝现在是没活了啊,自己搞产品转型失败,放弃低端用户,把假货和山寨下放到咸鱼,咸鱼体验一坨屎,客服更是摆设,本体促销跟计算题一样,四处投资然后空降把产品搞黄,钱全浪费了
但是这玩意跟技术、electron 有半点关系么,他但凡少投资点产品,把钱拿来做正经的促销,早行了 |
110
bk201 109 天前
分析了太浅了,那为什么造成这样的现象呢?
|
111
SouthRiverMatt 109 天前
有没有可能 php 是世界上最好的语言(
|
113
bugfan 109 天前 1
golang 就是现代化的 C 语言
|
114
artiga033 109 天前 via Android
都在争论企业怎么怎么样,资本家确实不在乎这点成本。可你们不混开源社区的吗?我个人选择自用的开源软件时都是绕着 Java,Python,Node.js 走,除非实在没有替代,企业吃得起个人用户可不一定,假如是树莓派之类的场景下那是跑 java 好还是跑 golang 好?
这么一想我脑子里有印象的 java 开源项目基本都是 kafka,lucene 这些基本只有企业级使用场景的,企业选择 java 无可厚非,但是其他语言的开源软件生态明显比 java 好多了。 |
115
INCerry 109 天前 1
还是那句话,不如用 C# .NET ,开发效率高,资源占用还低
|
116
murmur 109 天前
@artiga033 你说的对,但是现在所有软件开发, 除了国内因为政策原因没放开的地方,全是黑海
已经没多少粥可以分了 这次信创转型是最后一次机会,老企业 gov 系统重构 至于互联网,就现在的大公司 app ,立刻瘦身 50%,对于企业裁员增效,对于用户享受真的小而美 app ,不好吗 真就是没需求在那硬造需求,没痛点硬在那重构,不折腾干嘛,等着被优化么 |
117
kenvix 109 天前
魔怔 go 小子一天都在吹些什么东西,我建议直接 cgi ,没人访问零内存占用
|
118
yazinnnn0 109 天前
怎么从黑 java(spring)一转黑苹果了.....
|
119
GoRoad 109 天前 1
作者几句话,论坛吵翻天,几天一次,快速拿币
|
120
murmur 109 天前
@yazinnnn0 黑安卓资源占用多,内存大,不就是吹苹果好,这年头还有什么移动设备内存硬盘双吃紧的
不会是鸿蒙吧,鸿蒙这种放弃所有兼容性,行政力量要求所有 app 重做,并且砍掉自己功能的,第二家都做不出来 |
121
repus911 109 天前
以前 python 写的程序常驻内存 400-500M ,换了 go ,大概 50-100M
|
123
itakeman 109 天前 via Android
一对 Javaer 好急哟,急得不得了
|
124
ymy3232 108 天前
成本里,最贵的是人工(牛马除外),其次是带宽,其他 cpu 、gpu 、内存、硬盘啥的,在前两个面前不值得一提
|
125
jeesk 108 天前
对比一下:
巴菲特买一套房子: 可能只需要 1s. 网红买一套房可能: 可能要半年 我等牛马: 应该要很多年才能付清欠款。 上面的目的都是买一套房而已, 就像你就是采集一个数据而已。 巴菲特问你们, 你们为什么不能 1s 买一套房呀? 你们怎么回答? 再举个例子: java : 第一个版本 1996 年就出来了 golang: 2010 第一个版本才出来。 就像娶老婆一样, 别人 15 年年就娶了老婆,孩子都很大了。15 年后,一个小伙子还没结婚, 选择的有很多,既可以选择比自己大 15 岁的女人,也可以选择和自己一样大的女人。然后小伙子给这次结婚的人科普, 你看现在的小姑娘多漂亮, 你老婆太丑了, 为什么你们不换。 这里的问题在于, 有的人可以随便换老婆(比如马斯克), 有的人就只能这样过一辈子了。 这里换成企业看看? 为什么有的企业能够直接从 java 换到 go, 有的就只能用一直用 java 了? |
127
xjzshttps 108 天前
不写 Java 所以不了解具体情况,
有一个疑问,Java 内存占用大是只是运行时占用? 是否会随着业务量大而同样同比例的增加? 例如高业务量的后端程序,go 占用 10G 内存,Java 是同样 10G+200M 运行时,不到 11G ,还是会同样同比例增加内存占用,达到 20G 甚至更高? |
129
jqtmviyu 108 天前
加上 .net 和 nodejs 吧, 好奇这两个.
自从学了 python, 这种简单的脚本类任务连 nodejs 都嫌弃麻烦了. |
131
mightybruce 108 天前 2
人家背地里谈论,孔乙己原来也是计算机硕士,但终究是因为打撸啊撸时间太长,忘了新生代和老年代的区别,去 IT 类培训学校做了一名学生
幸而凭着一手垃圾回收算法进入了一家名叫外包的典当行,从此温饱不愁。但是有一个毛病就是,经常内存泄露 上线的程序运行了几天,stackOverflowError 和 OutOfMemoryError 三次直接让 2 核 4G 的保险箱启动不了,再找他时,已经微信不回,电话不接了 如是几次,掌柜的直接给他三个铜板求他回家了,据说差点跪下 那时 IT 的小村子不算小,也许走路需要很长时间,但是信息的传播速度不得不让人心服口服,村东头到村西头都知道了孔乙己这个人,所以开始变得温饱不接了 孔乙己没有法,便免不了写写文章骗一下村北头中关村的技术小白。 文章写的好,间或有人给打赏一二,也够在 stackflow 酒坊买上一杯哈啤和半碟花生米了 在酒坊里,品行却比别人都好,就是从不拖欠 虽然间或没有现钱,暂时记在名单上,但不出一月,定然还清,从门口的挂牌上拭去了孔乙己的名字 孔乙己填了一个空投,吃着花生,涨红的脸渐渐复了原,旁人就问:"孔乙己,你当真会写 java 代码吗" 孔乙己看着问他的人,显出不屑置辩的神气 他们便接着说道,“你怎的连个稳定工作也搞不到呢?” 孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话,这回可是全是詹姆斯·高斯林( java 之父)缺德,jvm 搞的那么复杂之类,一些不懂了。在这时候,众人也都哄笑起来:店内外充满了快活的空气。 在这些时候,我可以附和着笑,老板娘是决不责备的。而且老板娘见了孔乙己,也每每这样问他,引人发笑。 孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你学过 java 编程么?”我略略点一点头。他说,“学过编程,……我便考你一考。-Xms 和-Xmn 分别指的什么吗” 我想,臭名昭著的一个人还来考我!便语气轻慢的说:"分别指的是初始化堆内存大小和新生代大小" 孔乙己显出极高兴的样子,"那这两个有什么关联和区别,知道不" 我想格鲁特一样低能的人还来问我,便撇撇嘴,不予理睬。 孔乙己等了许久,很恳切的说道,“不知道罢?……我教给你,记着! JVM 内存大小=年轻代大小 + 年老代大小 + 持久代大小,是包含的关系,在内存优化的过程中是极有用的,没事多看看 java 一日一条公众平台,学习一下 java 成神之路,以后总会用到滴”说完得意洋洋捡起一个花生米丢入嘴中 如是这样的沟通经常出现在孔乙己身边,往往引来大家的笑语 "你这么懂 JVM ,为啥经常犯内存异常的错误呢" "内存溢出错误怎么叫错误。。。程序员的事,能算错误吗" 接连便是难懂的话,什么"强引用","弱引用","虚引用“之类的。引得众人都哄笑起来 有几回,酒坊里的小年轻听得笑声,也赶热闹,围住了孔乙己 他便给他们发一些 java 一日一条的平台的文章,大家看完文章,仍然不散,都看着孔乙己的 V**账号 “不行,我这 V**宽带只有一兆,自己都不够用,不能共享,改天写个爬虫,爬一些文章发到平台上,大家一起看” 于是这一群小年轻都在笑声里走散了 有一天,大约是年关前的两三天,老板娘正在慢慢的结账,取下粉板,忽然说,“孔乙己长久没有来了。还欠十九杯酒钱呢!” 我才也觉得他的确长久没有来了。 一个上网的人说道,“他怎么会来?……他打折了腿了” 老板娘说“哦” “他这次不做爬虫了,改偷别人账号了,据说这次偷了川普的脸谱账号,还说要支持国产中兴呢” "后来怎么样?" "怎么样?先吊起来,后来是打,直接浩克变身开大打了半夜" "后来呢?" "后来幸亏灭霸来了,才救下了他,但也打折了一条腿" 老板娘再也不问,仍然慢慢的往门牌上写某某今天赊了一杯哈啤 |
132
mightybruce 108 天前 1
javaer 请继续表演哈哈,除了那些吃到早年电商红利的那批人挺 java 的确没问题,其他人我只有鄙夷的态度来看。
|
133
HaroldFinchNYC 108 天前
@saranz #2 请教一下,solid 最大的问题是缺乏配套的 UI framework ,比如 antd 和 arco design ,都没有 solid
其实我还学过 solid ,然后发现不想手写 css ,就放弃了 所以,这个问题:请问你用 solid ,有什么好的 UI framework 推荐吗 谢谢 |
134
saranz 108 天前
@HaroldFinchNYC 直接用 css 库咯。
https://picturepan2.github.io/spectre/index.html https://bulma.io/ https://designmodo.github.io/Flat-UI/ https://bulma.io/ 我常用这几个,你也可以用 bootstrap 这此老牌库。 |
135
layxy 108 天前
我对 go 很纠结,语法简单,写个小项目还好或者个人项目还行,逻辑复杂了看着那么多 error 有点烦
|
136
yuheCai 108 天前
@HaroldFinchNYC 现在有 solid + tailwind 的组合起来的用法。但也只是解决了 UI
|
137
gerefoxing 108 天前
经典三大主题:内存占用,前端加密,跨域问题
|
139
Chinsung 108 天前 3
@itakeman #123 这 OP 天天发这种主题的帖子踩一捧一,摆明了就是带节奏,你要么是 OP 的小号,要么就是他的纯种野生大孝子,我 java python go 都用,php 也用,你这上来就一定 javaer 急了的🎩,和 OP 一样经典的贴吧套路啊。大孝子
|
140
lirijie1 108 天前
就你这个需求点,代码行数少>内存占用
|
143
HaroldFinchNYC 108 天前
|
145
MoYi123 108 天前
还是 go 没什么话语权, 我看 rua 友天天脚踩一切语言, 也没人反驳, 反对就是不懂 PL 的菜鸟.
|
147
Tenlearn 108 天前
@javak 我输出个 1+1 用个 spring boot 对比 Javac java ,结论是 spring boot 垃圾,搞这么多没用的依赖占用还大,这叫研究?
|
148
lxh1983 107 天前 via iPhone
好处就是可以糊弄客户工作量和复杂度了啊,毕竟本站大多数人都从没想过安卓手机动辄 8G 内存甚至 12G,16G 是因为 JAVA 太占资源不得已而为之的
|
149
bitfly 107 天前
C#的确省过 java,php 也是,但这 3 个语言都有个共同麻烦点,就是需要依赖平台框架,op 用 go 和 r 语言的目的就是脱离平台框架,go 确实好学易懂,写 sql 也很湿滑,的确是不二选择,c 就算了,难度系数 * N
|
150
maxzhang1985 107 天前
Go 的组件生态也很完善啊, 我框架不好用可以自己搞, 我用自己的跑业务已经好多年了,宣传一波
https://github.com/yoyofx/yoyogo |