< prev index next >

src/hotspot/share/code/nmethod.cpp

Print this page
rev 48402 : 8193927: Optimize scanning code for oops.
Reviewed-by: simonis, mdoerr, aph

*** 1,7 **** /* ! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 1483,1493 **** return false; } bool nmethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) { // Compiled code ! { RelocIterator iter(this, low_boundary); while (iter.next()) { if (iter.type() == relocInfo::oop_type) { if (unload_if_dead_at(&iter, is_alive, unloading_occurred)) { return true; --- 1483,1495 ---- return false; } bool nmethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) { // Compiled code ! ! // Prevent extra code cache walk for platforms that don't have immediate oops. ! if (relocInfo::mustIterateImmediateOopsInCode()) { RelocIterator iter(this, low_boundary); while (iter.next()) { if (iter.type() == relocInfo::oop_type) { if (unload_if_dead_at(&iter, is_alive, unloading_occurred)) { return true;
*** 1582,1591 **** --- 1584,1595 ---- low_boundary += NativeJump::instruction_size; // %%% Note: On SPARC we patch only a 4-byte trap, not a full NativeJump. // (See comment above.) } + // Prevent extra code cache walk for platforms that don't have immediate oops. + if (relocInfo::mustIterateImmediateOopsInCode()) { RelocIterator iter(this, low_boundary); while (iter.next()) { if (iter.type() == relocInfo::oop_type ) { oop_Relocation* r = iter.oop_reloc();
*** 1597,1606 **** --- 1601,1611 ---- if (r->oop_is_immediate() && r->oop_value() != NULL) { f->do_oop(r->oop_addr()); } } } + } // Scopes // This includes oop constants not inlined in the code stream. for (oop* p = oops_begin(); p < oops_end(); p++) { if (*p == Universe::non_oop_word()) continue; // skip non-oops
< prev index next >