src/share/vm/oops/methodData.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8067713 Cdiff src/share/vm/oops/methodData.cpp

src/share/vm/oops/methodData.cpp

Print this page

        

*** 1281,1290 **** --- 1281,1295 ---- // This code assumes an entry for a SpeculativeTrapData is 2 cells assert(2*DataLayout::compute_size_in_bytes(BitData::static_cell_count()) == DataLayout::compute_size_in_bytes(SpeculativeTrapData::static_cell_count()), "code needs to be adjusted"); + // Do not create one of these if method has been redefined. + if (m != NULL && m->is_old()) { + return NULL; + } + DataLayout* dp = extra_data_base(); DataLayout* end = args_data_limit(); // Allocation in the extra data space has to be atomic because not // all entries have the same size and non atomic concurrent
*** 1552,1564 **** // Check for entries that reference a redefined method class CleanExtraDataMethodClosure : public CleanExtraDataClosure { public: CleanExtraDataMethodClosure() {} ! bool is_live(Method* m) { ! return !m->is_old() || m->on_stack(); ! } }; // Remove SpeculativeTrapData entries that reference an unloaded or // redefined method --- 1557,1567 ---- // Check for entries that reference a redefined method class CleanExtraDataMethodClosure : public CleanExtraDataClosure { public: CleanExtraDataMethodClosure() {} ! bool is_live(Method* m) { return !m->is_old(); } }; // Remove SpeculativeTrapData entries that reference an unloaded or // redefined method
*** 1656,1660 **** --- 1659,1676 ---- CleanExtraDataMethodClosure cl; clean_extra_data(&cl); verify_extra_data_clean(&cl); } + + #ifdef ASSERT + void MethodData::verify_clean_weak_method_links() { + for (ProfileData* data = first_data(); + is_valid(data); + data = next_data(data)) { + data->verify_clean_weak_method_links(); + } + + CleanExtraDataMethodClosure cl; + verify_extra_data_clean(&cl); + } + #endif // ASSERT
src/share/vm/oops/methodData.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File