From 8ccf5296956b0c6a37e52ff429943d3f2f1ccee3 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Fri, 25 Jun 2021 14:34:02 +0200 Subject: [PATCH] 8267396: Avoid recording "pc" in unhandled oops detector for better performance Reviewed-by: coleenp, dholmes --- src/hotspot/share/oops/oopsHierarchy.cpp | 3 +-- src/hotspot/share/runtime/unhandledOops.cpp | 7 +++---- src/hotspot/share/runtime/unhandledOops.hpp | 9 ++++----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/oops/oopsHierarchy.cpp b/src/hotspot/share/oops/oopsHierarchy.cpp index 5c56d01d43b..2648052d78f 100644 --- a/src/hotspot/share/oops/oopsHierarchy.cpp +++ b/src/hotspot/share/oops/oopsHierarchy.cpp @@ -37,8 +37,7 @@ void oop::register_oop() { // This gets expensive, which is why checking unhandled oops is on a switch. Thread* t = Thread::current_or_null(); if (t != NULL && t->is_Java_thread()) { - frame fr = os::current_frame(); - t->unhandled_oops()->register_unhandled_oop(this, fr.pc()); + t->unhandled_oops()->register_unhandled_oop(this); } } diff --git a/src/hotspot/share/runtime/unhandledOops.cpp b/src/hotspot/share/runtime/unhandledOops.cpp index ef30c6e4c0d..8d1bc74adeb 100644 --- a/src/hotspot/share/runtime/unhandledOops.cpp +++ b/src/hotspot/share/runtime/unhandledOops.cpp @@ -58,7 +58,7 @@ void UnhandledOops::dump_oops(UnhandledOops *list) { // You don't want to turn it on in compiled code here. static bool unhandled_oop_print=0; -void UnhandledOops::register_unhandled_oop(oop* op, address pc) { +void UnhandledOops::register_unhandled_oop(oop* op) { if (!_thread->is_in_stack((address)op)) return; @@ -67,7 +67,7 @@ void UnhandledOops::register_unhandled_oop(oop* op, address pc) { for (int i=0; i<_level; i++) tty->print(" "); tty->print_cr("r " INTPTR_FORMAT, p2i(op)); } - UnhandledOopEntry entry(op, pc); + UnhandledOopEntry entry(op); _oop_list->push(entry); } @@ -120,8 +120,7 @@ void UnhandledOops::clear_unhandled_oops() { // in the unhandled oop generator. if(!_thread->is_in_stack((address)entry._oop_ptr)) { tty->print_cr("oop_ptr is " INTPTR_FORMAT, p2i(entry._oop_ptr)); - tty->print_cr("thread is " INTPTR_FORMAT " from pc " INTPTR_FORMAT, - p2i(_thread), p2i(entry._pc)); + tty->print_cr("thread is " INTPTR_FORMAT, p2i(_thread)); assert(false, "heap is corrupted by the unhandled oop detector"); } // Set unhandled oops to a pattern that will crash distinctively diff --git a/src/hotspot/share/runtime/unhandledOops.hpp b/src/hotspot/share/runtime/unhandledOops.hpp index 73572646706..942a602f294 100644 --- a/src/hotspot/share/runtime/unhandledOops.hpp +++ b/src/hotspot/share/runtime/unhandledOops.hpp @@ -53,12 +53,11 @@ class UnhandledOopEntry : public CHeapObj { private: oop* _oop_ptr; bool _ok_for_gc; - address _pc; public: oop* oop_ptr() { return _oop_ptr; } - UnhandledOopEntry() : _oop_ptr(NULL), _ok_for_gc(false), _pc(NULL) {} - UnhandledOopEntry(oop* op, address pc) : - _oop_ptr(op), _ok_for_gc(false), _pc(pc) {} + UnhandledOopEntry() : _oop_ptr(NULL), _ok_for_gc(false) {} + UnhandledOopEntry(oop* op) : + _oop_ptr(op), _ok_for_gc(false) {} }; @@ -75,7 +74,7 @@ class UnhandledOops : public CHeapObj { public: static void dump_oops(UnhandledOops* list); - void register_unhandled_oop(oop* op, address pc); + void register_unhandled_oop(oop* op); void unregister_unhandled_oop(oop* op); };