hotspot/src/share/vm/oops/objArrayKlass.cpp
Print this page
@@ -418,10 +418,20 @@
do_oop; \
p++; \
} \
}
+#define ObjArrayKlass_SPECIALIZED_OOP_REVERSE_ITERATE(T, a, p, do_oop) \
+{ \
+ T* const b = (T*)(a)->base(); \
+ T* p = b + (a)->length(); \
+ while (b < p) { \
+ p--; \
+ do_oop; \
+ } \
+}
+
#define ObjArrayKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(T, a, p, low, high, do_oop) \
{ \
T* const l = (T*)(low); \
T* const h = (T*)(high); \
T* p = (T*)(a)->base(); \
@@ -441,10 +451,19 @@
} else { \
ObjArrayKlass_SPECIALIZED_OOP_ITERATE(oop, \
a, p, do_oop) \
}
+#define ObjArrayKlass_OOP_REVERSE_ITERATE(a, p, do_oop) \
+ if (UseCompressedOops) { \
+ ObjArrayKlass_SPECIALIZED_OOP_REVERSE_ITERATE(narrowOop, \
+ a, p, do_oop) \
+ } else { \
+ ObjArrayKlass_SPECIALIZED_OOP_REVERSE_ITERATE(oop, \
+ a, p, do_oop) \
+ }
+
#define ObjArrayKlass_BOUNDED_OOP_ITERATE(a, p, low, high, do_oop) \
if (UseCompressedOops) { \
ObjArrayKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(narrowOop, \
a, p, low, high, do_oop) \
} else { \
@@ -575,11 +594,11 @@
}
#if INCLUDE_ALL_GCS
void ObjArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
assert(obj->is_objArray(), "obj must be obj array");
- ObjArrayKlass_OOP_ITERATE( \
+ ObjArrayKlass_OOP_REVERSE_ITERATE( \
objArrayOop(obj), p, \
if (PSScavenge::should_scavenge(p)) { \
pm->claim_or_forward_depth(p); \
})
}