--- a/src/hotspot/share/gc/shared/collectedHeap.cpp Mon Apr 23 13:32:00 2018 +0200
+++ b/src/hotspot/share/gc/shared/collectedHeap.cpp Mon Apr 23 11:25:53 2018 +0200
@@ -172,6 +172,22 @@
return false;
}
+bool CollectedHeap::is_oop(oop object) const {
+ if (!check_obj_alignment(object)) {
+ return false;
+ }
+
+ if (!is_in_reserved(object)) {
+ return false;
+ }
+
+ if (is_in_reserved(object->klass_or_null())) {
+ return false;
+ }
+
+ return true;
+}
+
// Memory state functions.
--- a/src/hotspot/share/gc/shared/collectedHeap.hpp Mon Apr 23 13:32:00 2018 +0200
+++ b/src/hotspot/share/gc/shared/collectedHeap.hpp Mon Apr 23 11:25:53 2018 +0200
@@ -591,6 +591,8 @@
virtual oop pin_object(JavaThread* thread, oop obj);
virtual void unpin_object(JavaThread* thread, oop obj);
+ virtual bool is_oop(oop object) const;
+
// Non product verification and debugging.
#ifndef PRODUCT
// Support for PromotionFailureALot. Return true if it's time to cause a
--- a/src/hotspot/share/oops/oop.cpp Mon Apr 23 13:32:00 2018 +0200
+++ b/src/hotspot/share/oops/oop.cpp Mon Apr 23 11:25:53 2018 +0200
@@ -122,10 +122,9 @@
// used only for asserts and guarantees
bool oopDesc::is_oop(oop obj, bool ignore_mark_word) {
- if (!check_obj_alignment(obj)) return false;
- if (!Universe::heap()->is_in_reserved(obj)) return false;
- // obj is aligned and accessible in heap
- if (Universe::heap()->is_in_reserved(obj->klass_or_null())) return false;
+ if (!Universe::heap()->is_oop(obj)) {
+ return false;
+ }
// Header verification: the mark is typically non-NULL. If we're
// at a safepoint, it must not be null.