ResourceMarks when CompiledIC_at is used ?

Baesken, Matthias matthias.baesken at sap.com
Wed Jul 4 14:44:52 UTC 2018


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