for review (M): 6863023: need non-perm oops in code cache for JSR 292
Tom Rodriguez
Thomas.Rodriguez at Sun.COM
Thu Aug 27 12:00:22 PDT 2009
On Aug 27, 2009, at 11:40 AM, John Rose wrote:
> 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?
Hmm. Having to scan the stacks an extra time seems bad, particularly
since it's only needed during a scavenge because we're treating some
nmethods as strong roots. Can't you just mark the nmethods during the
stack walk and clear it during the gc_epilogue?
>
> 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.
I think we'd want to let it sit in hotspot-comp for a while after that
change to let nightlies shake out any issues. Running a bunch of
tests with it == 1 would probably shake out quite a few of them before
putback.
tom
>
> -- John
More information about the hotspot-compiler-dev
mailing list