众所周知,垃圾收集器相信世代收集的哲学。其中短寿命/小对象放置在第 0 代上,我相信 L2 处理器或核心缓存(如果我在这里错了,请纠正我)以便更快地访问。考虑到这一点,第 1 代和第 2 代放在哪里?
问问题
78 次
1 回答
1
GC 代和缓存/内存级别之间没有直接关系。
内存管理器只是从一块内存开始,然后从中分配。代码使用它。
处理器跟踪内存使用情况,因此最近使用的内容通常存储在处理器可以最快访问它的位置。根据使用模式,最近使用的数据可能来自几乎任何一代。
有一种趋势是经常使用最近创建的对象,而使用较旧的对象则不太频繁。这往往会导致最近创建的对象在 L1 缓存中,在 L2 中稍旧的对象,在主内存中仍然更旧。这只是一般趋势,但不是内存管理器强制执行的任何事情。在任何给定时间,每一级缓存很可能包含来自两到三个不同世代的一些对象。
另请注意,当数据加载到缓存中时,只有正在访问的部分被加载到缓存中。因此,如果您有一个大对象,最近访问的部分可能在 L1 缓存中,其他一些最近访问较少的部分在 L2 缓存中,其余部分仅在主内存中。
于 2013-08-04T23:10:08.283 回答