Request for review 8007320: NPG: move method annotations

Coleen Phillimore coleen.phillimore at
Thu Jan 31 14:12:37 PST 2013

Summary: allocate method annotations and attach to ConstMethod if present

 From the bug report:

This is related to 8003419. The annotations are allocated in Metaspace 
during class file parsing and pointers to them are carried around 
through the parser. In order to clean these up, you'd have to collect 
these pointers somewhere so they can be cleaned up if the parse fails.

Instead, attach method annotations to the constMethod so that they can 
be cleaned up if the ConstMethod has to be cleaned up.

If any annotations exists for any method, an Array<u1> is created for 
that method, but it's put into an Array<Array<u1>*> (an array of these 
arrays) where there's an entry for each method in the klass, so the 
other methods would have a pointer allocated for it whether needed or 
not. There are 3 of these array of arrays in the type Annotations, and 
an Annotations* object for type annotations, which are so far created 

The fix is to move the 4 types of method annotations to embedded 
pointers in the ConstMethod if they are needed and add a flag to 
indicate whether they are present. You could embed the annotations 
directly, but the length has to be pulled out as an 'int' from unaligned 
storage, and the bit math is getting to be too fragile without a redesign.

Also, some code was refactored in parse_method() and the code that 
sorted annotation arrays to match sorted method arrays isn't needed 
anymore.  This is in a couple of places, including defaultMethods and 

The real purpose of this change is to make the annotations allocated in 
Metaspace easier to clean up if class file parsing fails, but hopefully 
has some cleanup and space saving benefits as well.

open webrev at
bug link at (just filed 
it so might not be available yet)

Tested with serviceability tests (nsk.sajdi.testlist, 
vm.tmtools.testlist),  jtreg tests for annotations, including the new 
type annotation tests, jtreg tests for java/lang/instrument, 
nsk.parallel_class_loading.testlist and vm.quick.testlist (which is the 
same as full).


More information about the hotspot-runtime-dev mailing list