观 https://www.v2ex.com/t/1052490 有感。
这里的 GC 特指追踪( Tracing GC ,如 JVM 、Go )和引用计数(想不到例子)等一般意义上的运行时垃圾回收制,不包括 C++/Rust 等编译期确定的垃圾回收机制。
问题:
1
passive 143 天前 via Android
引用计数(想不到例子):Perl 和 C++的 shared_ptr 🐶
|
2
LeeReamond 143 天前 1
跑过性能分析的都知道,网络应用里 99%的时间在等待 IO ,所以其实计算影响通常不是主要优化方向-->且计算优化中 GC 优化也通常不是主要方向-->且就算进行 GC 优化首先你得能遇到对应场景,如原贴中所说瞬间回收 8TB 的堆-->且就算遇到了对应的场景,你还得坚持使用 GC 语言开发该部分逻辑。
总的来说感觉就是 0.01%需求会考虑到的问题,与中小公司绝缘。大公司的产品线就算做到百万月活,和这种问题也基本摸不到边。唯一思考这些的可能是阿里的 P8 架构师这种,问题在于人家何必用你的来路不明的东西。。 |
3
qweruiop 143 天前
@LeeReamond 现在 zgc 之后,7 百万日活的游戏产品都没遇到过。。。
|
4
privil 143 天前
不好意思,没达到公司性能目标,决定从 Go 切换到 Rust 。
关于 Discord 为什么从 Go 切换到 Rust https://mp.weixin.qq.com/s/daVBNO19S_nz6ISBF2PbDQ |
5
BiChengfei 143 天前
GC 默认配置的性能 > 我的垃圾代码,向来是写了垃圾代码,导致 GC 不理想
|
6
zvvvvv 143 天前
|
7
yty2012g 143 天前 1
Q: 你对目前使用语言的 GC 性能满意吗?
A: 一路从 jdk8 的 parNew+CMS ,升级到 JDK17 的 G1 ,再到今年的 JDK22 的 G1 ,我对 G1 GC 越来越满意了,堆虽然不大但是延迟也很低(< 10ms ), 吞吐量影响相当小,内存占用也不多,可以说是非常理想了。中途也尝试过 JDK17 的 ZGC 、JDK21 的分代 ZGC ,奈何对吞吐量的影响远大于 G1 ,遂放弃 |
8
nagisaushio 143 天前 via Android
rust 如果滥用 Arc Mutex 就相当于一个很烂的引用计数 GC
|
11
dragonfsky1 142 天前
没遇到过,不过这种要求这么高的场景估计也不会选择带 GC 的语言吧?
|
13
CatCode 142 天前
不会 我写 Python 的
|
14
INCerry 142 天前 1
我目前主要使用 C#语言,回答一下这个问题(之前有在 top 互联网、金融公司使用 C#案例)
1.你在业务中遇到过(或预计遇到)由 GC 带来的、不能接受的性能瓶颈吗(如 STW )?你有过针对 GC 来修改代码,以优化性能的经历吗? 在极端测试中经常遇到慢很多倍,卡好几秒这样的场景,但实际在业务中,没有遇到过这个问题,也没有针对 GC 修改代码来优化性能。 2.如果用可以避免堆分配的语言(如 Go ),你会有意选择减少堆分配的写法,来节约 GC 成本吗? 经常使用这种方式来减少堆分配,比如池化内存,使用堆外内存等方式。 3. 你对目前使用语言的 GC 性能满意吗? 目前.NET GC 还是针对高吞吐量进行优化的,STW 表现从测试来看并不是最好,但是实际场景中从来没有遇到过问题。 4. 你的业务场景下,可能会为避免 GC 的其他缺陷(例如内存颠簸)换到无 GC 语言吗? 并不会,切换到其它无 GC 语言,带来的提升不会很高,有时候 RAII 和引用计数的开销其实更大,特殊场景下无 GC 语言频繁内存申请吞吐量不如带 GC 。(不过本身 C#就可以做到无 GC ,似乎也没有换的必要) |
15
Kumo31 142 天前 1
share 下 JuiceFS 的一篇文章,有提到对 Go 做的内存优化:[极限挑战:使用 Go 打造百亿级文件系统的实践之旅]( https://juicefs.com/zh-cn/blog/engineering/go-build-billion-file-system)
|