RFR 8085965: VM hangs in C2Compiler
Poonam Bajaj Parhar
poonam.bajaj at oracle.com
Thu Jun 11 13:45:17 UTC 2015
Hello Jon,
Thanks for taking a look at the code changes:
On 6/10/2015 6:42 PM, Jon Masamitsu wrote:
> Poonam,
>
> http://cr.openjdk.java.net/~poonam/8085965/webrev/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp.frames.html
>
> I think it reads more easily if it is coded like this
>
> if (!ClassUnloading) {
> _should_unload_classes = false;
> } else if ((_full_gc_requested &&
> ExplicitGCInvokesConcurrentAndUnloadsClasses) {
> _should_unload_classes = true
> } else if (CMSClassUnloadingEnabled) {
> // Condition 2.a above 2678
> // Disjuncts 2.b.(i,ii,iii) above
> _should_unload_classes = (concurrent_cycles_since_last_unload() >=
> CMSClassUnloadingMaxInterval)
> ||
> _cmsGen->is_too_full();
> }
>
> I might not have cut-and-pasted it right but I think you can see what
> I mean.
>
I understand, will make this change.
> Also fix the block comment above to say that ClassUnloading overides
> the other
> conditions.
>
yes.
> http://cr.openjdk.java.net/~poonam/8085965/webrev/src/share/vm/runtime/arguments.cpp.frames.html
>
>
> This catches the case where -Xnoclassgc is used but does not catch if
> -XX:-ClassUnloading is used. Yes?
> 2752 } else if (match_option(option, "-Xnoclassgc")) {
> 2753 FLAG_SET_CMDLINE(bool, ClassUnloading, false);
> 2754 FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false);
>
> Instead if you add in "share/vm/runtime/arguments.cpp" to the method
>
> 1262 void Arguments::set_cms_and_parnew_gc_flags() ;
>
> if (!ClassUnloading) {
> FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false);
> }
>
Oops! I missed it; will add it.
Thanks,
Poonam
> That should catch both -Xnoclassgc and -XX:-ClassUnloading
>
> Jon
>
> On 6/10/2015 2:20 PM, Poonam Bajaj Parhar wrote:
>> Please review the code changes to fix:
>> JDK-8085965: <https://bugs.openjdk.java.net/browse/JDK-8085965> VM
>> hangs in C2Compiler
>>
>> Problem and fix:
>> In JDK8, CMSClassUnloadingEnabled option which is used to control the
>> class-unloading in CMS, was enabled by default. But if the user
>> specifies -Xnoclassgc or -XX:-ClassUnloading on the command line then
>> classes get unloaded but updating of subklasses/siblings links gets
>> skipped by the ClassUnloading check in the following function:
>>
>> /void Klass::clean_weak_klass_links(BoolObjectClosure* is_alive, bool /
>> /clean_alive_klasses) {/
>> / if (!ClassUnloading) {/
>> / return;/
>> / }
>>
>> /which corrupts the class hierarchy links causing hangs and crashes.
>>
>> This fix honors -XX:-ClassUnloading and -Xnoclassgc options and
>> disables class unloading with CMS.
>>
>> Webrev: http://cr.openjdk.java.net/~poonam/8085965/webrev/
>>
>> Thanks,
>> Poonam
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20150611/b7b45432/attachment.htm>
More information about the hotspot-gc-dev
mailing list