--- a/src/hotspot/share/oops/instanceRefKlass.inline.hpp Mon Jun 25 12:44:52 2018 +0200
+++ b/src/hotspot/share/oops/instanceRefKlass.inline.hpp Sat May 26 06:59:49 2018 +0200
@@ -37,19 +37,19 @@
#include "utilities/globalDefinitions.hpp"
#include "utilities/macros.hpp"
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
void InstanceRefKlass::do_referent(oop obj, OopClosureType* closure, Contains& contains) {
T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj);
if (contains(referent_addr)) {
- Devirtualizer<nv>::do_oop(closure, referent_addr);
+ Devirtualizer::do_oop(closure, referent_addr);
}
}
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
void InstanceRefKlass::do_discovered(oop obj, OopClosureType* closure, Contains& contains) {
T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
if (contains(discovered_addr)) {
- Devirtualizer<nv>::do_oop(closure, discovered_addr);
+ Devirtualizer::do_oop(closure, discovered_addr);
}
}
@@ -76,7 +76,7 @@
return false;
}
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
void InstanceRefKlass::oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
// Try to discover reference and return if it succeeds.
if (try_discover<T>(obj, type, closure)) {
@@ -84,38 +84,38 @@
}
// Treat referent and discovered as normal oops.
- do_referent<nv, T>(obj, closure, contains);
- do_discovered<nv, T>(obj, closure, contains);
+ do_referent<T>(obj, closure, contains);
+ do_discovered<T>(obj, closure, contains);
}
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
- do_referent<nv, T>(obj, closure, contains);
- do_discovered<nv, T>(obj, closure, contains);
+ do_referent<T>(obj, closure, contains);
+ do_discovered<T>(obj, closure, contains);
}
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
// Explicitly apply closure to the discovered field.
- do_discovered<nv, T>(obj, closure, contains);
+ do_discovered<T>(obj, closure, contains);
// Then do normal reference processing with discovery.
- oop_oop_iterate_discovery<nv, T>(obj, type, closure, contains);
+ oop_oop_iterate_discovery<T>(obj, type, closure, contains);
}
-template <bool nv, typename T, class OopClosureType, class Contains>
-void InstanceRefKlass::oop_oop_iterate_ref_processing_specialized(oop obj, OopClosureType* closure, Contains& contains) {
+template <typename T, class OopClosureType, class Contains>
+void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
switch (closure->reference_iteration_mode()) {
- case ExtendedOopClosure::DO_DISCOVERY:
+ case OopIterateClosure::DO_DISCOVERY:
trace_reference_gc<T>("do_discovery", obj);
- oop_oop_iterate_discovery<nv, T>(obj, reference_type(), closure, contains);
+ oop_oop_iterate_discovery<T>(obj, reference_type(), closure, contains);
break;
- case ExtendedOopClosure::DO_DISCOVERED_AND_DISCOVERY:
+ case OopIterateClosure::DO_DISCOVERED_AND_DISCOVERY:
trace_reference_gc<T>("do_discovered_and_discovery", obj);
- oop_oop_iterate_discovered_and_discovery<nv, T>(obj, reference_type(), closure, contains);
+ oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
break;
- case ExtendedOopClosure::DO_FIELDS:
+ case OopIterateClosure::DO_FIELDS:
trace_reference_gc<T>("do_fields", obj);
- oop_oop_iterate_fields<nv, T>(obj, closure, contains);
+ oop_oop_iterate_fields<T>(obj, closure, contains);
break;
default:
ShouldNotReachHere();
@@ -127,14 +127,10 @@
template <typename T> bool operator()(T* p) const { return true; }
};
-template <bool nv, class OopClosureType>
+template <typename T, class OopClosureType>
void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure) {
AlwaysContains always_contains;
- if (UseCompressedOops) {
- oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, always_contains);
- } else {
- oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, always_contains);
- }
+ oop_oop_iterate_ref_processing<T>(obj, closure, always_contains);
}
class MrContains {
@@ -144,38 +140,31 @@
template <typename T> bool operator()(T* p) const { return _mr.contains(p); }
};
-template <bool nv, class OopClosureType>
+template <typename T, class OopClosureType>
void InstanceRefKlass::oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
const MrContains contains(mr);
- if (UseCompressedOops) {
- oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, contains);
- } else {
- oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, contains);
- }
+ oop_oop_iterate_ref_processing<T>(obj, closure, contains);
+}
+
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
+ InstanceKlass::oop_oop_iterate<T>(obj, closure);
+
+ oop_oop_iterate_ref_processing<T>(obj, closure);
}
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
- InstanceKlass::oop_oop_iterate<nv>(obj, closure);
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
+ InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure);
- oop_oop_iterate_ref_processing<nv>(obj, closure);
+ oop_oop_iterate_ref_processing<T>(obj, closure);
}
-#if INCLUDE_OOP_OOP_ITERATE_BACKWARDS
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
- InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure);
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
+ InstanceKlass::oop_oop_iterate_bounded<T>(obj, closure, mr);
- oop_oop_iterate_ref_processing<nv>(obj, closure);
-}
-#endif // INCLUDE_OOP_OOP_ITERATE_BACKWARDS
-
-
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
- InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr);
-
- oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr);
+ oop_oop_iterate_ref_processing_bounded<T>(obj, closure, mr);
}
#ifdef ASSERT
@@ -192,11 +181,4 @@
}
#endif
-// Macro to define InstanceRefKlass::oop_oop_iterate for virtual/nonvirtual for
-// all closures. Macros calling macros above for each oop size.
-#define ALL_INSTANCE_REF_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \
- OOP_OOP_ITERATE_DEFN( InstanceRefKlass, OopClosureType, nv_suffix) \
- OOP_OOP_ITERATE_DEFN_BOUNDED( InstanceRefKlass, OopClosureType, nv_suffix) \
- OOP_OOP_ITERATE_DEFN_BACKWARDS(InstanceRefKlass, OopClosureType, nv_suffix)
-
#endif // SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP