RFR JDK-8206394 : ResourceMark in AOTCompiledMethod::metadata_do, AOTCompiledMethod::clear_inline_caches , CompiledMethod::clear_ic_stubs , CompiledMethod::cleanup_inline_caches_impl - was : RE: ResourceMarks when CompiledIC_at is used ?

Baesken, Matthias matthias.baesken at sap.com
Thu Jul 5 16:18:06 UTC 2018


Great , thanks for your help !


Btw.  while looking a bit more at the  ResourceMark usages  , I found  that the    name_and_sig_as_C_string()   calls  are mostly
   in the codebase with a  related ResourceMark .

However it is not done always,  for example ;   do you think it is missing at these places or not needed?


hotspot/share/classfile/verifier.cpp#626

623void ClassVerifier::verify_method(const methodHandle& m, TRAPS) {
624  HandleMark hm(THREAD);
625  _method = m;   // initialize _method
626  log_info(verification)("Verifying method %s", m->name_and_sig_as_C_string());


hotspot/share/classfile/classLoader.cpp#2045

void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {

2058                if (HAS_PENDING_EXCEPTION) {
2059                  clear_pending_exception_if_not_oom(CHECK);
2060                  tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name_and_sig_as_C_string());
2061                } else {
2062                  _compile_the_world_method_counter++;
2063                }
2064              }
2065            } else {
2066              tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name_and_sig_as_C_string());
2067            }

Best regards, Matthias



> -----Original Message-----
> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
> Sent: Donnerstag, 5. Juli 2018 18:07
> To: Baesken, Matthias <matthias.baesken at sap.com>; 'hotspot-
> dev at openjdk.java.net' <hotspot-dev at openjdk.java.net>
> Subject: Re: RFR JDK-8206394 : ResourceMark in
> AOTCompiledMethod::metadata_do,
> AOTCompiledMethod::clear_inline_caches ,
> CompiledMethod::clear_ic_stubs ,
> CompiledMethod::cleanup_inline_caches_impl - was : RE: ResourceMarks
> when CompiledIC_at is used ?
> 
> Looks good. I will test it and push if it passed.
> 
> Thanks,
> Vladimir
> 
> On 7/5/18 2:14 AM, Baesken, Matthias wrote:
> > Hi Vladimir, thanks for looking into it !
> >
> > Please review :
> >
> > http://cr.openjdk.java.net/~mbaesken/webrevs/8206394/
> >
> >
> > https://bugs.openjdk.java.net/browse/JDK-8206394
> >
> >
> > Best regards, Matthias
> >
> >
> >
> >> -----Original Message-----
> >> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
> >> Sent: Mittwoch, 4. Juli 2018 19:43
> >> To: Baesken, Matthias <matthias.baesken at sap.com>; 'hotspot-
> >> dev at openjdk.java.net' <hotspot-dev at openjdk.java.net>
> >> Subject: Re: ResourceMarks when CompiledIC_at is used ?
> >>
> >> Thank you, Matthias
> >>
> >> Yes, I checked all these places and they have to be fixed. Please, file
> >> a bug for jdk11.
> >>
> >> Vladimir
> >>
> >> On 7/4/18 7:44 AM, Baesken, Matthias wrote:
> >>> Hello,   I recently looked at   8164293: HotSpot leaking memory in long-
> >> running requests
> >>>
> >>> http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/rev/8dfbb002197a
> >>>
> >>> where a number of missing ResourceMarks were added .
> >>> I think some of those ResourceMarks were added  because of
> >> CompiledIC_at  in the changed  functions .
> >>>
> >>> I checked for  other CompiledIC_at    in the hs coding ,  and found some
> >> other places (see below) where  ResourceMarks  are missing as well.
> >>> Should they be added ?
> >>>
> >>> Best regards, Matthias
> >>>
> >>>
> >>>
> >>> src/hotspot/share/aot/aotCompiledMethod.cpp
> >>>
> >>> void AOTCompiledMethod::metadata_do(void f(Metadata*)) {
> >>> .....
> >>> 274      } else if (iter.type() == relocInfo::virtual_call_type) {
> >>> 275        // Check compiledIC holders associated with this nmethod
> >>> 276        CompiledIC *ic = CompiledIC_at(&iter);    <---------------------------
> ----
> >> -----
> >>>
> >>>
> >>>       and
> >>>
> >>> 441void AOTCompiledMethod::clear_inline_caches() {
> >>> 442  assert(SafepointSynchronize::is_at_safepoint(), "cleaning of IC's
> only
> >> allowed at safepoint");
> >>> 443  if (is_zombie()) {
> >>> 444    return;
> >>> 445  }
> >>> 446
> >>> 447  RelocIterator iter(this);
> >>> 448  while (iter.next()) {
> >>> 449    iter.reloc()->clear_inline_cache();
> >>> 450    if (iter.type() == relocInfo::opt_virtual_call_type) {
> >>> 451      CompiledIC* cic = CompiledIC_at(&iter);    <---------------------------
> ----
> >> -----
> >>> 452      assert(cic->is_clean(), "!");
> >>> 453      nativePltCall_at(iter.addr())->set_stub_to_clean();
> >>> 454    }
> >>> 455  }
> >>> 456}
> >>>
> >>> src/hotspot/share/code/compiledMethod.cpp
> >>>
> >>> 326void CompiledMethod::clear_ic_stubs() {
> >>> 327  assert_locked_or_safepoint(CompiledIC_lock);
> >>> 328  RelocIterator iter(this);
> >>> 329  while(iter.next()) {
> >>> 330    if (iter.type() == relocInfo::virtual_call_type) {
> >>> 331      CompiledIC* ic = CompiledIC_at(&iter);      <---------------------------
> ----
> >> -----
> >>> 332      ic->clear_ic_stub();
> >>> 333    }
> >>> 334  }
> >>> 335}
> >>>
> >>>
> >>> 547bool CompiledMethod::cleanup_inline_caches_impl(bool parallel,
> bool
> >> unloading_occurred, bool clean_all) {
> >>> 548  assert_locked_or_safepoint(CompiledIC_lock);
> >>> 549  bool postponed = false;
> >>> 550
> >>> 551  // Find all calls in an nmethod and clear the ones that point to non-
> >> entrant,
> >>> 552  // zombie and unloaded nmethods.
> >>> 553  RelocIterator iter(this, oops_reloc_begin());
> >>> 554  while(iter.next()) {
> >>> 555
> >>> 556    switch (iter.type()) {
> >>> 557
> >>> 558    case relocInfo::virtual_call_type:
> >>> 559      if (unloading_occurred) {
> >>> 560        // If class unloading occurred we first clear ICs where the cached
> >> metadata
> >>> 561        // is referring to an unloaded klass or method.
> >>> 562        clean_ic_if_metadata_is_dead(CompiledIC_at(&iter));        <------
> ---
> >> ---------------------------
> >>>


More information about the hotspot-dev mailing list