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

Albert Noll albert.noll at oracle.com
Thu Jan 9 06:28:54 PST 2014


Hi all,

could I get reviews for this patch?

bug: https://bugs.openjdk.java.net/browse/JDK-7194669
webrev: http://cr.openjdk.java.net/~anoll/7194669/webrev.00/

Problem:
The dependency verification code in CodeCache::mark_for_deoptimization 
walks over all live nmethods in the code cache and checks all 
dependencies for each nmethod. This leads to checking the same 
dependency multiple times which can take a huge amount of time.

Solution:
To avoid checking dependencies more than once, dependencies are 
abstracted by dependency signatures, which consider (i) the type of a 
dependency and (ii) the identity hashes of the arguments
of a dependency. For each dependency that will be checked, a dependency 
signature is generated
and that dependency signature is compared against a set of already 
checked dependency signatures.
If a dependency has already been checked, the check is skipped.
Dependency signatures of a specific type are stored in a binary tree to 
provide a fast lookup. I.e., each
dependency type has its own binary tree. The key to the tree is the 
identity hash of one argument. More
details about the data structure are described as comments in the code.

Results:
An evaluation of the performance gain shows a 4.3x speedup of dependency 
checking. More concretely,
I used nashorn + octane on a 64-bit Linux Hotspot version. The 
dependency checking time of the
original version is 3888 seconds. The dependency checking time of the 
optimized version is 902 seconds.

Passed jprt.


Many thanks in advance,
Albert


More information about the hotspot-compiler-dev mailing list