[9] RFR (S): 8060147: SIGSEGV in Metadata::mark_on_stack() while marking metadata in ciEnv

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Oct 29 13:57:53 UTC 2014


ciObjectFactory doesn't keep cached Metadata* alive. ciMetadata is 
different from ciObject - it doesn't store JNI handle, but a raw 
Metadata* pointer.

In order to avoid Metadata* vanishing during compilation, I cache 
ciObject for it's holder, which should keep corresponding Metadata* 
alive. Cached objects have the same lifetime as the owning 
ciObjectFactory (no cache pruning), so Metadata* will be available as 
long as ciObjectFactory instance is used.

Also, cleaned relevant comments and strengthened some asserts (since 
NULL keys are not allowed).

Testing: jprt, stress mode - full Nashorn/Octane with aggressive VM 
anonymous class unloading (LambdaForm/MethodHandle caching completely 
turned off).


Best regards,
Vladimir Ivanov

More information about the hotspot-compiler-dev mailing list