量化垃圾回收与显式内存管理的性能
我在这里找到了这篇文章:
量化垃圾回收与显式内存管理的性能
http://www.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf
在结论部分,它的内容如下:
通过比较一系列基准测试的运行时、空间消耗和虚拟内存占用,我们发现,当给定足够的内存时,性能最佳的垃圾回收器的运行时性能与显式内存管理具有竞争力。特别是,当垃圾回收的内存量是所需内存的五倍时,其运行时性能与显式内存管理的内存性能相当或略高于显式内存管理。但是,当垃圾回收必须使用较小的堆时,其性能会大幅下降。内存量是原来的三倍,平均运行速度要慢 17%,内存是内存的两倍,运行速度会慢 70%。当物理内存稀缺时,垃圾回收也更容易分页。在这种情况下,我们在此处检查的所有垃圾回收器都会遭受与显式内存管理相关的数量级性能损失。
因此,如果我的理解是正确的:如果我有一个用本机C++编写的应用程序需要100 MB的内存,那么要使用“托管”(即基于垃圾回收器)的语言(例如Java,C#)实现相同的性能,该应用程序应该需要5 * 100 MB = 500 MB?(如果 2*100 MB = 200 MB,托管应用的运行速度将比本机应用慢 70%?
您是否知道当前(即最新的Java VM和.NET 4.0)垃圾回收器是否遇到上述文章中描述的相同问题?现代垃圾回收器的性能是否得到改善?
谢谢。