< prev index next >

src/share/vm/oops/klass.hpp

Print this page
rev 7183 : autospecialized oop_iterate using SFINAE and templates

@@ -26,11 +26,11 @@
 #define SHARE_VM_OOPS_KLASS_HPP
 
 #include "memory/genOopClosures.hpp"
 #include "memory/iterator.hpp"
 #include "memory/memRegion.hpp"
-#include "memory/specialized_oop_closures.hpp"
+#include "memory/specialized_oop_closures.inline.hpp"
 #include "oops/klassPS.hpp"
 #include "oops/metadata.hpp"
 #include "oops/oop.hpp"
 #include "trace/traceMacros.hpp"
 #include "utilities/accessFlags.hpp"

@@ -575,10 +575,19 @@
   static void clean_weak_klass_links(BoolObjectClosure* is_alive, bool clean_alive_klasses = true);
   static void clean_subklass_tree(BoolObjectClosure* is_alive) {
     clean_weak_klass_links(is_alive, false /* clean_alive_klasses */);
   }
 
+  struct OopInterval {
+    int _offset;
+    uint _size;
+  };
+
+  // Returns positive value if oop maps could be returned and the klass doesn't need to know closure type.
+  // Otherwise returns a negative value corresponding to which klass implementation is being used (DispatchTag).
+  virtual int get_linear_oop_intervals(oop obj, OopInterval* &start, int &size) { return _unknown_klass; }
+
   // iterators
   virtual int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) = 0;
   virtual int oop_oop_iterate_v(oop obj, ExtendedOopClosure* blk) {
     return oop_oop_iterate(obj, blk);
   }
< prev index next >