RFR (S) 8222446: assert(C->env()->system_dictionary_modification_counter_changed()) failed: Must invalidate if TypeFuncs differ
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Tue Jul 9 14:06:14 UTC 2019
Thanks, Erik!
Coleen
On 7/9/19 5:15 AM, Erik Österlund wrote:
> Hi Coleen,
>
> I like the counter removal. This looks good. Thanks for digging into
> this and fixing it!
>
> /Erik
>
> On 2019-07-08 23:19, coleen.phillimore at oracle.com wrote:
>>
>> Hi, From offline discussions, I updated the code in
>> Parse::do_exits() to make the method not compilable if the return
>> types don't match. Otherwise it would revert a change that Volker
>> made to prevent infinite compilation loops. It seems that the
>> compiler code has been changed to no longer exercise this path
>> (ShouldNotReachHere never reached), so keeping the conservative path
>> seemed safest.
>>
>> open webrev at
>> http://cr.openjdk.java.net/~coleenp/2019/8222446.02/webrev
>>
>> I changed the comment Dean, it might need help rewording.
>>
>> Tested with tier1-8.
>>
>> Thanks,
>> Coleen
>>
>> On 6/21/19 4:44 PM, coleen.phillimore at oracle.com wrote:
>>>
>>> Dean, Thank you for reviewing and for your help and discussion of
>>> this change.
>>>
>>> On 6/21/19 3:48 PM, dean.long at oracle.com wrote:
>>>> For the most part, this looks good. I only have a couple concerns:
>>>>
>>>> 1) The distinction in both validate_compile_task_dependencies
>>>> functions between "dependencies failed" and "dependencies invalid"
>>>> is even more fuzzy after this change. I suggest filing an RFE to
>>>> remove this distinction.
>>>
>>> Yes, in jvmciRuntime I had to carefully preserve this logic or some
>>> tests failed. I'll file an RFE for you.
>>>>
>>>> 2) In Parse::do_exits(), we don't know that concurrent class
>>>> loading didn't cause the problem. We should be optimistic and
>>>> allow the retry:
>>>> C->record_failure(C2Compiler::retry_class_loading_during_parsing());
>>>> rather than more drastic
>>>> C->record_method_not_compilable
>>>> This is actually what the code did in an earlier revision.
>>>
>>> Erik and I were trying to guess which was the right answer. It
>>> seemed too lucky that you'd do concurrent class loading in this time
>>> period, so we picked the more drastic answer, but I tested both. So
>>> I'll change it to the optimistic answer.
>>>
>>> Thanks!
>>> Coleen
>>>>
>>>> dl
>>>>
>>>> On 6/20/19 10:28 AM, coleen.phillimore at oracle.com wrote:
>>>>> Summary: Remove SystemDictionary::modification_counter optimization
>>>>>
>>>>> See bug for more details. To avoid the assert in the bug report,
>>>>> it's necessary to also increase the modification counter for class
>>>>> unloading, which needs special code for concurrent class
>>>>> unloading. The global counter is used to verify that
>>>>> validate_dependencies() gets the same answer based on the subklass
>>>>> hierarchy, but provides a quick exit in production mode. Removing
>>>>> it may allow more nmethods to be created that don't depend on the
>>>>> classes that may be loaded while the Method is being compiled.
>>>>> Performance testing was done on this with no change in
>>>>> performance. Also investigated the breakpoint setting code which
>>>>> incremented the modification counter. Dependent compilations are
>>>>> invalidated using evol_method dependencies, so updating the system
>>>>> dictionary modification counter isn't unnecessary.
>>>>>
>>>>> Tested with hs-tier1-8 testing, and CTW, and local jvmti/jdi/jdwp
>>>>> test runs with -Xcomp.
>>>>>
>>>>> open webrev at
>>>>> http://cr.openjdk.java.net/~coleenp/2019/8222446.01/webrev
>>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8222446
>>>>>
>>>>> Thanks,
>>>>> Coleen
>>>>
>>>
>>
>
More information about the hotspot-dev
mailing list