为什么字节映射比位图更快?

时间:2018-03-07 06:00:13

标签: java algorithm garbage-collection jvm-hotspot garbage

我读过“垃圾收集手册”。它说当做卡表时,他们使用字节图而不是位图,并说它比位图更快,是否是由于高速缓存线?但正如我所知,缓存行通常是64字节,如果我们对字节进行更改,竞争争用仍然存在,其他cpu仍会使该行无效,它与位图相同,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

不确定我是否正确使用了上下文,但总的来说:

  1. 位图访问

    需要地址操作和读写整个BYTE / WORD / ...因为大多数架构不支持位读/写内存访问。

    对于8位位图,如:

    BYTE map[];
    

    读取的代码是:

    readed_bit=(map[bit>>3]>>(bit&7))&1;
    

    组:

    map[bit>>3]|=1<<(bit&7);
    

    明确:

    map[bit>>3]&=255^(1<<(bit&7));
    

    其中bit是您要访问的位。如您所见,需要进行掩蔽和位移。

  2. BYTE地图访问

    可以在大多数架构上直接访问

    readed_byte=map[byte];
    

    组:

    map[byte]=1;
    

    明确:

    map[byte]=0;
    

    byte是您想要访问的BYTE。正如您所看到的,如果只是布尔值存储在单个BYTE中,则会浪费内存空间。

  3. 因此,除非你得到专门设计用于位图和平面的 HW ,否则BYTE贴图会更快......但是对于每个规则都有一个例外,所以有一些算法你已经掩盖了在这种情况下,地址和位掩码位图比字节映射更快或更快......