正如我们所知,垃圾收集器相信代际收集的哲学。其中短暂的/小的对象被放置在第0代,我相信L2处理器或核心缓存(如果我错了的话纠正我)更快的访问。考虑到这一点,第1代和第2代在哪里放置?
发布于 2013-08-04 23:10:08
GC代与缓存/内存级别之间没有直接关系。
内存管理器只是从一个内存块开始,然后从它分配。代码使用它。
处理器跟踪内存使用情况,因此最近使用的内存通常存储在处理器可以最快访问它的地方。根据使用模式的不同,最近使用的数据几乎可以来自任何一代。
有一种趋势是,最近创建的对象被频繁使用,而较旧的对象被使用得稍微少一些。这往往导致最近创建的对象在L1缓存中,在L2中稍微老一些,在主内存中仍然老一些。这只是一种普遍趋势,而不是由内存管理器强制执行的任何东西。在任何给定的时间,每个缓存级别都很可能包含来自两代或三代的一些对象。
还请注意,当数据被加载到缓存中时,只有被访问的部分被加载到缓存中。因此,如果您有一个大型对象,最近访问的部分对象可能在L1缓存中,另一些部分最近在L2缓存中访问较少,其余部分仅在主内存中访问。
https://stackoverflow.com/questions/18048474
复制相似问题