< prev index next >
src/share/vm/oops/instanceKlass.cpp
Print this page
rev 7183 : autospecialized oop_iterate using SFINAE and templates
@@ -38,11 +38,11 @@
#include "memory/iterator.inline.hpp"
#include "memory/metadataFactory.hpp"
#include "memory/oopFactory.hpp"
#include "oops/fieldStreams.hpp"
#include "oops/instanceClassLoaderKlass.hpp"
-#include "oops/instanceKlass.hpp"
+#include "oops/instanceKlass.inline.hpp"
#include "oops/instanceMirrorKlass.hpp"
#include "oops/instanceOop.hpp"
#include "oops/klass.inline.hpp"
#include "oops/method.hpp"
#include "oops/oop.inline.hpp"
@@ -1964,41 +1964,16 @@
#endif //PRODUCT
// Garbage collection
-#ifdef ASSERT
-template <class T> void assert_is_in(T *p) {
- T heap_oop = oopDesc::load_heap_oop(p);
- if (!oopDesc::is_null(heap_oop)) {
- oop o = oopDesc::decode_heap_oop_not_null(heap_oop);
- assert(Universe::heap()->is_in(o), "should be in heap");
- }
-}
-template <class T> void assert_is_in_closed_subset(T *p) {
- T heap_oop = oopDesc::load_heap_oop(p);
- if (!oopDesc::is_null(heap_oop)) {
- oop o = oopDesc::decode_heap_oop_not_null(heap_oop);
- assert(Universe::heap()->is_in_closed_subset(o),
- err_msg("should be in closed *p " INTPTR_FORMAT " " INTPTR_FORMAT, (address)p, (address)o));
- }
-}
-template <class T> void assert_is_in_reserved(T *p) {
- T heap_oop = oopDesc::load_heap_oop(p);
- if (!oopDesc::is_null(heap_oop)) {
- oop o = oopDesc::decode_heap_oop_not_null(heap_oop);
- assert(Universe::heap()->is_in_reserved(o), "should be in reserved");
- }
-}
-template <class T> void assert_nothing(T *p) {}
-
-#else
-template <class T> void assert_is_in(T *p) {}
-template <class T> void assert_is_in_closed_subset(T *p) {}
-template <class T> void assert_is_in_reserved(T *p) {}
-template <class T> void assert_nothing(T *p) {}
-#endif // ASSERT
+int InstanceKlass::get_linear_oop_intervals(oop obj, OopInterval* &start, int &size) {
+ assert(sizeof(OopMapBlock) == sizeof(OopInterval), "auto closure specialization assumes same data layout for speed");
+ start = (OopInterval*)start_of_nonstatic_oop_maps();
+ size = size_helper();
+ return nonstatic_oop_map_count();
+}
//
// Macros that iterate over areas of oops which are specialized on type of
// oop pointer either narrow or wide, depending on UseCompressedOops
//
< prev index next >