Hi Mike,
"needless critical section" is a bit of a vague way to describe what is
fundamentally a change to the caching strategy :) From a synchronization
perspective I concur that the new strategy is valid, but I can't comment
on whether the right access check is actually being performed.
In AccessibleObject.java, a minor nit, but place this comment:
+ // (Test cache[1] first since range check for [1]
+ // subsumes range check for [0].)
before the array access rather than after it.
Cheers,
David
Mike Duigou said the following on 03/18/11 09:04:
Sorry folks--the webrev url:
http://cr.openjdk.java.net/~mduigou/6565585/0/webrev/
Mike
On Mar 17 2011, at 15:07 , Mike Duigou wrote:
Method.invoke(), Contrstuctor.newInstance() and Field.getFieldAccessor() all have a needless critical section, causing large slowdowns. This patch a replaces the synchronizations by volatile references. Finally, the changes remove a doubled reference to another volatile variable. This also simplifies the generated code by commoning up the corresponding load instruction used in the fast execution path.
Speedups from this change are uniformly 2x or better.
The proposed improvement and patch was originated by John Rose.
Thanks,
Mike