RFR (S) 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify

Jiangli Zhou jiangli.zhou at oracle.com
Wed Jan 24 20:22:08 UTC 2018

> On Jan 23, 2018, at 4:31 PM, David Holmes <david.holmes at oracle.com> wrote:
> On 24/01/2018 12:55 AM, coleen.phillimore at oracle.com wrote:
>> On 1/23/18 1:52 AM, Jiangli Zhou wrote:
>>> Hi Coleen,
>>> The approach looks very clean.
>>> I have a question for the following in ClassLoaderDataGraph::do_unloading(), which may not be an issue. The ‘if' check is for anonymous class loader, which does not have dictionary. So do_unloading(is_alive_closure) is not happening during unloading of an anonymous class loader. Could a ‘pd’ for anonymous class being added to any other loaders’ pd_set? I’ll try to construct a test case.
>> Yes anonymous classes do not have dictionaries, so their pd_set list in the dictionary don't need to be cleaned out.
>> I don't know how you'd get a pd for an anonymous class added to other loader's pd_set, but this would clean them out too.  This seems hard to maybe impossible to do, but thank you for thinking of this further.   We don't put anonymous classes in the dictionaries so I think this is impossible.
> IIUC if an anonymous class loads another class via another CL then its PD will be associated with that other CL. But the PD for a VMAC is the PD of its host-class, so that can't become unreachable until the host-class is unreachable. So processing of the host-class will clean out the PD from the other CL.

David is right. I constructed a standalone test case and conformed that today. The host PD is used for an anonymous class. So there is no issue when the anonymous class is unloaded without going through do_unloading(is_alive_closure). As long as the host class is alive, the host PD is also alive. When the host PD is unloaded, the host PD is cleared from other loader’s pd_set with the do_unloading(is_alive_closure) work.

> David
> -----
>> thanks,
>> Coleen
>>> 1294       if (data->dictionary() != NULL) {
>>> 1295 data->dictionary()->do_unloading(is_alive_closure);
>>> 1296       }
>>> Thanks,
>>> Jiangli
>>>> On Jan 22, 2018, at 3:52 PM, coleen.phillimore at oracle.com <mailto:coleen.phillimore at oracle.com> wrote:
>>>> Summary: protection domain package access cache needs to be walked in unloading
>>>> Tested with mach5 tier1-5 on linux and windows, and with tests in the bug report.
>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8175249.01/webrev <http://cr.openjdk.java.net/%7Ecoleenp/8175249.01/webrev>
>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8175249
>>>> Thanks,
>>>> Coleen

More information about the hotspot-runtime-dev mailing list