[9] RFR(M): 7194669: CodeCache::mark_for_deoptimization should avoid verifying dependencies multiple times

Roland Westrelin roland.westrelin at oracle.com
Fri Jan 10 06:04:49 PST 2014


Hi Albert,

> I've evaluated the performance difference (nashorn + octane) between binary search
> and a linear search. The linear-search version uses one GrowableArray<DependencySignature*>
> for each dependency type. The difference in dependency checking time is 15-20%, i.e., binary
> search is 15-20% faster than linear search. However, using linear search to cache checked
> dependencies is still ~4X faster compared to checking all dependencies.

Thanks for making the experiment.

> I guess 15-20% is not enough to justify using the new data structure. Here is the new
> webrev that uses linear search:
> http://cr.openjdk.java.net/~anoll/7194669/webrev.01/

Can a safepoint occur during verification? It doesn’t look like it to me. It could be verified with a No_Safepoint_Verifier. No safepoint would mean that objects don’t move and then:

uintptr_t Dependencies::DepStream::get_identity_hash(int i) {
  if (has_oop_argument()) {
    return (uintpr_t)argument_oop(i);
  } else {
    return (uinptr_t)argument(i);
  }
}

And then there’s no need to worry about the issue that Dean raised: identity hash not being unique.

Roland.


More information about the hotspot-compiler-dev mailing list