for review (M): 6863023: need non-perm oops in code cache for JSR 292

John Rose John.Rose at Sun.COM
Thu Aug 27 11:40:12 PDT 2009


On Aug 27, 2009, at 9:24 AM, Tom Rodriguez wrote:

> There's a bug in these changes that Christian just tripped across.   
> In drop_scavenge_root_nmethod the next == nm case doesn't does call  
> clear_on_scavenge_root_list or set the link to NULL.  You should  
> move that case into the body of the loop so you don't have to  
> duplicate the code.

Thanks; will fix.

On Aug 27, 2009, at 9:32 AM, Tom Rodriguez wrote:

> The scanning twice one is probably caused by an nmethod both being  
> on stack and containing scavengeable oops so it will get scanned  
> during stack walk and again when all the scavengeable nmethods are  
> scanned by marking in a minor collection.  There needs to be some  
> marking so it can't get scanned twice.

Yes.  Double scanning may be the root of several other failures.  I  
think I'll set a bit on the header of each on-stack nmethod in the  
gc_prologue, and clear it in the gc_epilogue.  That way the  
distinction can be made explicit and clear through all GC phases.   
What do you think of that?

Also, what do you think of setting ScavengeRootsInCode = 1 by default,  
so that the mechanism gets exercised right away, instead of waiting  
for EnableInvokeDynamic to be turned on by default?  The choice is set  
SRIC=0 by default (as in webrev) for maximum stability, vs SRIC=1 to  
default in order to start exploring the GC bug tail (if any :-) right  
away.  SRIC=1 means that if a static final variable contains a non- 
perm oop, it will still get folded into the code.  This currently  
happens for a handful of methods that use names like  
java.nio.charset.CoderResult.UNDERFLOW.

-- John


More information about the hotspot-compiler-dev mailing list