pjy19960808
FatFat-Whale
2016-06-08 03:01
采纳率: 100%
浏览 1.9k
已采纳

堆数据放在二级缓存而栈数据放在一级缓存是什么意思?

堆数据如果存放在二级cache中,那么CPU读取堆数据的时候是不是就要先去一级缓存查看没有之后再去二级缓存中查找呢?会不会把二级缓存的内容加到一级缓存中呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • caozhy
    已采纳
     不知道你从哪里看来的,cpu的缓存对于程序执行是透明的,并且cpu才不管你是堆还是栈呢。那个是编程语言/操作系统人为划分的,对计算机来说,只有内存和指令。
    而且cpu的实现本身都不同。比如说,intel的cpu,使用的是一级追踪缓存,所以所有的数据都是存在二级缓存中的,一级缓存存的只是二级缓存的地址,而不存任何数据。所以intel的处理器一级缓存很小,二级缓存很大。
    而amd不同,amd的一级缓存本质上相当于intel的二级缓存。
    
    点赞 评论
  • u011606457
    _1_1_7_ 2016-06-08 03:17

    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
    堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

    CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。最初缓存只有一级,二级缓存(L2 CACHE)出现是为了协调一级缓存与内存之间的速度。二级缓存比一级缓存速度更慢,容量更大,主要就是做一级缓存和内存之间数据临时交换的地方用。实际上,现在Intel和AMD处理器在一级缓存的逻辑结构设计上有所不同,所以二级缓存对CPU性能的影响也不尽相同。

    按照上面的说明:”二级缓存比一级缓存速度更慢,容量更大,主要就是做一级缓存和内存之间数据临时交换的地方用。“,二级缓存的内容会加到一级缓存中。
    缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
    读取缓存就是先一级再二级,写入就是先二级再一级。

    为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将固定时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。

    点赞 评论

相关推荐