Hi Andrew, I understand your concern, thanks for point it out. I think the reason of not using power of 2 is because it more or less balanced the hash table entries, which may potentially cause more hash conflict and hence lag the entry lookup speed. However, in this case for KlassInfoTable, the hash value is the subtraction of klass address with a reference address, and then 2 bits shift right. Due to the address is limited by the heap size ,I believe that several highest bits of the hash value are same. So the mod by power of 2 in this case may not hit performance, that maybe one reason why I observed speedup in my experiment.
And I just did quick test, that using the constant _num_buckets for modulo, gcc issues several instructions instead of idiv, and the speed up at about 12%, while using 65536 for _number_buckets speedup at 20%. BRs, Lin