2013-08-04 48 views
0

正如我们所知垃圾收集器相信世代收集的哲学。其中短期/小对象放在第0代,我相信L2处理器或核心缓存(纠正我,如果我在这里是错误的)更快的访问。考虑到这一点,Gen 1和Gen 2的位置在哪里?垃圾收集和存储

回答

1

GC代和缓存/内存之间没有直接关系。

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

处理器跟踪内存使用情况,所以最近使用的内容通常存储在处理器可以最快速访问的地方。根据使用模式,最近使用的数据可能来自任何一代。

There is最近创建的对象被频繁使用的趋势以及使用较旧的对象的频率稍低。这往往会导致最近创建的对象位于L1高速缓存中,L2中稍旧的对象并且在主内存中仍然较旧。这只是一个普遍的趋势,而不是内存管理器强制执行的任何事情。在任何时候,每一级缓存很可能包含一些来自两三代的对象。

另请注意,当数据加载到缓存中时,只有正在访问的部分被加载到缓存中。所以,如果你有一个大对象,那么最近被访问过的一部分对象可能在一级缓存中,另外一些在二级缓存中访问较少的部分,而其余部分只在主内存中访问。

+0

基于您的简报,大型对象(大小大于L1或L2大小)在何处被存储,如果它们被频繁访问。我们可以推测,它总是在主内存中生活吗? – Nair