西西河

主题:【原创】Java和.NET哪个运行的更快? -- Highway

共:💬24 🌺19
全看分页树展 · 主题 跟帖
家园 Garbage collector的效率

与程序类型/风格有关.最早使用Garbage collector

的是Functional languages. 这类语言的程序有大量

short-lived small objects, Garbage collector很

有兢争力.Mark-and-sweep虽然可能比malloc/free

慢一点,但是可以有效解决fragmentation.Copying

collection(尤其是generational GC)则进一步在速度上

也有一争.

另外,比较效率也要从整体上比.举一个例子.我正在

写的一个程序有一个producer和多个independent consumer.

每个object都要接收多个consumer的处理,也可能被一个

consumer传给另一个consumer,还可能需要存下来.如果没有GC,要么用

single-thread固定流程,要么create one copy for each consumer,

要么每个consumer都要执行reference-counting routine以

决定是否free一个object.每个选择都对系统的结构/效率有不

好的影响.

我觉得GC被贬的原因主要有:

1. GC 不适合memory-scarce environment.

2. GC memory footprint 较大影响cache效率. (不过对绝大多数

人, 包括C programmers, 比cache效率大的问题多了去了.)

3. 早期GC implementation对Stack处理不好造成retention.

元宝推荐:Highway,

本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河