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

152 天前
 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

20438 次点击
所在节点    Java
152 条回复
repus911
151 天前
以前 python 写的程序常驻内存 400-500M ,换了 go ,大概 50-100M
itakeman
151 天前
@Chinsung 说 java 触发你逆鳞了?
itakeman
151 天前
一对 Javaer 好急哟,急得不得了
ymy3232
151 天前
成本里,最贵的是人工(牛马除外),其次是带宽,其他 cpu 、gpu 、内存、硬盘啥的,在前两个面前不值得一提
jeesk
151 天前
对比一下:
巴菲特买一套房子: 可能只需要 1s.
网红买一套房可能: 可能要半年
我等牛马: 应该要很多年才能付清欠款。


上面的目的都是买一套房而已, 就像你就是采集一个数据而已。 巴菲特问你们, 你们为什么不能 1s 买一套房呀? 你们怎么回答?


再举个例子:
java : 第一个版本 1996 年就出来了
golang: 2010 第一个版本才出来。

就像娶老婆一样, 别人 15 年年就娶了老婆,孩子都很大了。15 年后,一个小伙子还没结婚, 选择的有很多,既可以选择比自己大 15 岁的女人,也可以选择和自己一样大的女人。然后小伙子给这次结婚的人科普, 你看现在的小姑娘多漂亮, 你老婆太丑了, 为什么你们不换。 这里的问题在于, 有的人可以随便换老婆(比如马斯克), 有的人就只能这样过一辈子了。 这里换成企业看看? 为什么有的企业能够直接从 java 换到 go, 有的就只能用一直用 java 了?
itakeman
151 天前
@kenvix 人家说实话,也是吹?见不得说实话? block 了
xjzshttps
151 天前
不写 Java 所以不了解具体情况,
有一个疑问,Java 内存占用大是只是运行时占用?
是否会随着业务量大而同样同比例的增加?

例如高业务量的后端程序,go 占用 10G 内存,Java 是同样 10G+200M 运行时,不到 11G ,还是会同样同比例增加内存占用,达到 20G 甚至更高?
karottc
151 天前
@xjzshttps 就是基础运行时大,go=10G, java=10G+200M 。不会同比例增加。
jqtmviyu
151 天前
加上 .net 和 nodejs 吧, 好奇这两个.

自从学了 python, 这种简单的脚本类任务连 nodejs 都嫌弃麻烦了.
sagaxu
151 天前
@karottc Go=10G 时,Java 非 native 估计 20G 左右了
mightybruce
151 天前
人家背地里谈论,孔乙己原来也是计算机硕士,但终究是因为打撸啊撸时间太长,忘了新生代和老年代的区别,去 IT 类培训学校做了一名学生



幸而凭着一手垃圾回收算法进入了一家名叫外包的典当行,从此温饱不愁。但是有一个毛病就是,经常内存泄露



上线的程序运行了几天,stackOverflowError 和 OutOfMemoryError 三次直接让 2 核 4G 的保险箱启动不了,再找他时,已经微信不回,电话不接了



如是几次,掌柜的直接给他三个铜板求他回家了,据说差点跪下



那时 IT 的小村子不算小,也许走路需要很长时间,但是信息的传播速度不得不让人心服口服,村东头到村西头都知道了孔乙己这个人,所以开始变得温饱不接了



孔乙己没有法,便免不了写写文章骗一下村北头中关村的技术小白。



文章写的好,间或有人给打赏一二,也够在 stackflow 酒坊买上一杯哈啤和半碟花生米了



在酒坊里,品行却比别人都好,就是从不拖欠



虽然间或没有现钱,暂时记在名单上,但不出一月,定然还清,从门口的挂牌上拭去了孔乙己的名字



孔乙己填了一个空投,吃着花生,涨红的脸渐渐复了原,旁人就问:"孔乙己,你当真会写 java 代码吗"



孔乙己看着问他的人,显出不屑置辩的神气



他们便接着说道,“你怎的连个稳定工作也搞不到呢?”



孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话,这回可是全是詹姆斯·高斯林( java 之父)缺德,jvm 搞的那么复杂之类,一些不懂了。在这时候,众人也都哄笑起来:店内外充满了快活的空气。



在这些时候,我可以附和着笑,老板娘是决不责备的。而且老板娘见了孔乙己,也每每这样问他,引人发笑。



孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你学过 java 编程么?”我略略点一点头。他说,“学过编程,……我便考你一考。-Xms 和-Xmn 分别指的什么吗”



我想,臭名昭著的一个人还来考我!便语气轻慢的说:"分别指的是初始化堆内存大小和新生代大小"



孔乙己显出极高兴的样子,"那这两个有什么关联和区别,知道不"



我想格鲁特一样低能的人还来问我,便撇撇嘴,不予理睬。



孔乙己等了许久,很恳切的说道,“不知道罢?……我教给你,记着! JVM 内存大小=年轻代大小 + 年老代大小 + 持久代大小,是包含的关系,在内存优化的过程中是极有用的,没事多看看 java 一日一条公众平台,学习一下 java 成神之路,以后总会用到滴”说完得意洋洋捡起一个花生米丢入嘴中



如是这样的沟通经常出现在孔乙己身边,往往引来大家的笑语



"你这么懂 JVM ,为啥经常犯内存异常的错误呢"



"内存溢出错误怎么叫错误。。。程序员的事,能算错误吗"



接连便是难懂的话,什么"强引用","弱引用","虚引用“之类的。引得众人都哄笑起来



有几回,酒坊里的小年轻听得笑声,也赶热闹,围住了孔乙己



他便给他们发一些 java 一日一条的平台的文章,大家看完文章,仍然不散,都看着孔乙己的 V**账号



“不行,我这 V**宽带只有一兆,自己都不够用,不能共享,改天写个爬虫,爬一些文章发到平台上,大家一起看”



于是这一群小年轻都在笑声里走散了



有一天,大约是年关前的两三天,老板娘正在慢慢的结账,取下粉板,忽然说,“孔乙己长久没有来了。还欠十九杯酒钱呢!”



我才也觉得他的确长久没有来了。



一个上网的人说道,“他怎么会来?……他打折了腿了”



老板娘说“哦”



“他这次不做爬虫了,改偷别人账号了,据说这次偷了川普的脸谱账号,还说要支持国产中兴呢”



"后来怎么样?"



"怎么样?先吊起来,后来是打,直接浩克变身开大打了半夜"



"后来呢?"



"后来幸亏灭霸来了,才救下了他,但也打折了一条腿"



老板娘再也不问,仍然慢慢的往门牌上写某某今天赊了一杯哈啤
mightybruce
151 天前
javaer 请继续表演哈哈,除了那些吃到早年电商红利的那批人挺 java 的确没问题,其他人我只有鄙夷的态度来看。
HaroldFinchNYC
151 天前
@saranz #2 请教一下,solid 最大的问题是缺乏配套的 UI framework ,比如 antd 和 arco design ,都没有 solid

其实我还学过 solid ,然后发现不想手写 css ,就放弃了

所以,这个问题:请问你用 solid ,有什么好的 UI framework 推荐吗

谢谢
saranz
151 天前
@HaroldFinchNYC 直接用 css 库咯。

https://picturepan2.github.io/spectre/index.html
https://bulma.io/
https://designmodo.github.io/Flat-UI/
https://bulma.io/

我常用这几个,你也可以用 bootstrap 这此老牌库。
layxy
150 天前
我对 go 很纠结,语法简单,写个小项目还好或者个人项目还行,逻辑复杂了看着那么多 error 有点烦
yuheCai
150 天前
@HaroldFinchNYC 现在有 solid + tailwind 的组合起来的用法。但也只是解决了 UI
gerefoxing
150 天前
经典三大主题:内存占用,前端加密,跨域问题
Chinsung
150 天前
@itakeman #122 孝
Chinsung
150 天前
@itakeman #123 这 OP 天天发这种主题的帖子踩一捧一,摆明了就是带节奏,你要么是 OP 的小号,要么就是他的纯种野生大孝子,我 java python go 都用,php 也用,你这上来就一定 javaer 急了的🎩,和 OP 一样经典的贴吧套路啊。大孝子
lirijie1
150 天前
就你这个需求点,代码行数少>内存占用

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

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

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

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

© 2021 V2EX