垃圾收集和存储

时间:2013-08-04 23:02:32

标签: c# .net garbage-collection

我们知道垃圾收集者相信世代收藏的哲学。其中短暂​​/小的对象放在gen 0上,我相信L2处理器或核心缓存(如果我在这里错了,请纠正我)以便更快地访问。考虑到这一点,第1代和第2代的位置在哪里?

1 个答案:

答案 0 :(得分:1)

GC生成与缓存/内存级别之间没有直接关系。

内存管理器只是从一块内存开始,并从中分配。代码使用它。

处理器跟踪内存使用情况,因此最近使用的内容通常存储在处理器可以最快速访问它的位置。根据使用模式,最近使用的数据几乎可以来自任何一代。

这往往会导致最近创建的对象位于L1缓存中,L2中的较旧对象在主内存中仍然较旧。这只是一个普遍的趋势,而不是内存管理器强制执行的任何事情。在任何给定的时间,每个级别的缓存很可能包含来自两个或三个不同代的一些对象。

另请注意,当数据加载到缓存中时,只有正在访问的部分会加载到缓存中。因此,如果你有一个大对象,那么最近访问过的部分可能是在L1缓存中,其他一些部分在L2缓存中最近访问的时间较少,而其余部分只在主内存中。