请教, Go 是如何实现如此夸张的低的内存占用的?

2019-07-29 11:09:47 +08:00
 abcbuzhiming
同样是带有 GC 的语言,Go 的内存占用也太低了点,国外的测试里,同样的功能,Java 都吃到接近 1GB 内存的时候,Go 就十几 MB 的占用;就算不和“家里开矿才能用”的 Java 比,和新锐的 dotnet core 比也有好几倍的差距。我没想明白的是,都是带 GC 的语言,凭什么 Go 就能占这么低的内存?
13548 次点击
所在节点    Go 编程语言
37 条回复
reus
2019-07-29 13:18:26 +08:00
@LokiSharp 看 busy 指标,这几个程序里 go 都比 java 高,就是 GC 的消耗多
niubee1
2019-07-29 13:18:44 +08:00
JVM 你要是不弄块上 G 的内存来跑的话慢得要死
micean
2019-07-29 13:20:41 +08:00
我把 binary-trees 跑了一次,不带参和带参数-Xmx500m -Xms500m,时间差不多,只是带参的 ygc 次数是不带参的 3 倍。所以只是 gc 策略问题。
当然 java 占用内存肯定还是比 go 要多一些
bequt
2019-07-29 13:21:26 +08:00
前段时间还有个 vlang,那个内存更低
dhssingle
2019-07-29 14:07:27 +08:00
LokiSharp
2019-07-29 14:07:51 +08:00
@reus 为了内存占用消耗这么多 cpu 我觉得划不来😹😹😹
reus
2019-07-29 14:39:43 +08:00
@LokiSharp 主要是还没有分代,有了分代,GC 可以少消耗一点 CPU。而且主要目的是降低延迟,而不是降低内存占用,现在 go 的 GC 的暂停时间可以低于 0.5ms
sunwei0325
2019-07-29 16:30:38 +08:00
jvm 的线程栈 Xss 一般都是写死的 1-2M, go 的 goroutine 栈是动态的, 一般 2K 起
BBCCBB
2019-07-29 16:34:37 +08:00
Jvm 默认会一次性申请一个大内存块, 比如你设置了-Xms1G,那就会一次性申请 1G,

默认好像是物理内存的 3/8....
stevenkang
2019-07-29 16:55:53 +08:00
甲方:我这里有一个需求,评估一下多久能完成?

18 岁的程序猿:最多五天,尽量三天,最快一天(分分钟开发好,年少轻狂,什么包袱都没有)
20 岁的程序猿:算上测试这些,预计十五天(改一改 bug,修一修代码)
25 岁的程序猿:设计、开发、测试,预计三十天(流程规范、顺便摸鱼)
30 岁的程序猿:调研、设计、评估、开发、测试、交付,预计两个月(启动开发之前先评估成本)

所以,你说 java 这种嵌套十八层的语言,内存需要多少呢?
wysnylc
2019-07-29 18:59:43 +08:00
@troywinter #16 有理有据令人信服
dodo2012
2019-07-29 19:06:36 +08:00
rust 更低,
5200
2019-07-29 21:06:05 +08:00
没人注意到楼主的头像吗??
hangszhang
2019-07-29 23:47:50 +08:00
我是不信有这么大的差距
wenzhoou
2019-07-30 06:56:25 +08:00
@5200 头像怎么放大了看?
no1xsyzy
2019-07-30 11:02:12 +08:00
@abcbuzhiming JIT 不是内存占用更高了?内存里除了运行时还需要载一个编译器,外加字节码和机器码两套码。
zoharSoul
2021-07-25 15:27:27 +08:00
Java 默认是空间换时间
golang 更倾向于小内存占用

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

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

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

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

© 2021 V2EX