ResourceMarks when CompiledIC_at is used ?

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Jul 4 17:43:01 UTC 2018


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