我在阅读这篇生成的HTML(可能会过期),内容来自原始PS文件。
GC迷思3:垃圾回收器总是比显式内存释放慢。
GC迷思4:垃圾回收器总是比显式内存释放快。
这让我很困惑。GC怎么可能比显式内存释放更快呢?它不就是在释放内存或使其再次可用时调用显式内存分配器吗?所以...它到底是什么意思呢?
非常小的对象和大型稀疏堆==>GC通常更便宜,特别是对于线程
我还是不明白。这就像说C++比机器码更快一样(如果你不理解这个句子中的 WTF,请停止编程。让 -1 开始吧)。经过快速的谷歌搜索,有一种说法是当你拥有大量内存时,GC会更快。我的理解是,它不会受到释放的影响。当然,这可能很快,我也写过一个自定义分配器,在一个应用程序中根本不释放任何对象(只有在终止时才释放),而且在库和STL之类的情况下定义得比较多。因此...我相信这也会比GC更快。如果我仍然希望释放,我想我可以使用一个使用deque或其自己的实现的分配器,这些分配器本质上是
if (freeptr < someaddr) {
*freeptr=ptr;
++freeptr;
}
else
{
freestuff();
freeptr = freeptrroot;
}
我相信这种方式肯定非常快。我已经回答了自己的问题。如果GC收集器从未被调用,那么它会更快,但是...我确信文档所指的两个收集器都会被测试到,因此这不是文档的意思。无论使用哪种GC,如果GC收集器被调用一次,我相信同一个应用程序的速度都会变慢。如果已知永远不需要释放,则可以使用空的释放体,就像我遇到的某个应用程序一样。
总之,我发布这个问题是为了进一步了解。