< prev index next >

src/share/vm/oops/objArrayKlass.cpp

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


 460   if (UseCompressedOops) {
 461     objarray_follow_contents<narrowOop>(obj, 0);
 462   } else {
 463     objarray_follow_contents<oop>(obj, 0);
 464   }
 465 }
 466 
 467 #if INCLUDE_ALL_GCS
 468 void ObjArrayKlass::oop_follow_contents(ParCompactionManager* cm,
 469                                         oop obj) {
 470   assert(obj->is_array(), "obj must be array");
 471   PSParallelCompact::follow_klass(cm, obj->klass());
 472   if (UseCompressedOops) {
 473     objarray_follow_contents<narrowOop>(cm, obj, 0);
 474   } else {
 475     objarray_follow_contents<oop>(cm, obj, 0);
 476   }
 477 }
 478 #endif // INCLUDE_ALL_GCS
 479 













 480 #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)           \
 481                                                                                 \
 482 int ObjArrayKlass::oop_oop_iterate##nv_suffix(oop obj,                          \
 483                                               OopClosureType* closure) {        \
 484   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::oa); \
 485   assert (obj->is_array(), "obj must be array");                                \
 486   objArrayOop a = objArrayOop(obj);                                             \
 487   /* Get size before changing pointers. */                                      \
 488   /* Don't call size() or oop_size() since that is a virtual call. */           \
 489   int size = a->object_size();                                                  \
 490   if_do_metadata_checked(closure, nv_suffix) {                                  \
 491     closure->do_klass##nv_suffix(obj->klass());                                 \
 492   }                                                                             \
 493   ObjArrayKlass_OOP_ITERATE(a, p, (closure)->do_oop##nv_suffix(p))              \
 494   return size;                                                                  \
 495 }
 496 
 497 #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix)         \
 498                                                                                 \
 499 int ObjArrayKlass::oop_oop_iterate##nv_suffix##_m(oop obj,                      \




 460   if (UseCompressedOops) {
 461     objarray_follow_contents<narrowOop>(obj, 0);
 462   } else {
 463     objarray_follow_contents<oop>(obj, 0);
 464   }
 465 }
 466 
 467 #if INCLUDE_ALL_GCS
 468 void ObjArrayKlass::oop_follow_contents(ParCompactionManager* cm,
 469                                         oop obj) {
 470   assert(obj->is_array(), "obj must be array");
 471   PSParallelCompact::follow_klass(cm, obj->klass());
 472   if (UseCompressedOops) {
 473     objarray_follow_contents<narrowOop>(cm, obj, 0);
 474   } else {
 475     objarray_follow_contents<oop>(cm, obj, 0);
 476   }
 477 }
 478 #endif // INCLUDE_ALL_GCS
 479 
 480 int ObjArrayKlass::get_linear_oop_intervals(oop obj, OopInterval* &start, int &size)
 481 { 
 482   assert(obj->is_array(), "obj must be array");                                
 483   objArrayOop a = objArrayOop(obj);                                             
 484 
 485   start->_offset = arrayOopDesc::base_offset_in_bytes(T_OBJECT); //base_offset_in_bytes();
 486   start->_size = a->length();
 487 
 488   size = a->object_size();
 489 
 490   return 1;
 491 }
 492 
 493 #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)           \
 494                                                                                 \
 495 int ObjArrayKlass::oop_oop_iterate##nv_suffix(oop obj,                          \
 496                                               OopClosureType* closure) {        \
 497   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::oa); \
 498   assert (obj->is_array(), "obj must be array");                                \
 499   objArrayOop a = objArrayOop(obj);                                             \
 500   /* Get size before changing pointers. */                                      \
 501   /* Don't call size() or oop_size() since that is a virtual call. */           \
 502   int size = a->object_size();                                                  \
 503   if_do_metadata_checked(closure, nv_suffix) {                                  \
 504     closure->do_klass##nv_suffix(obj->klass());                                 \
 505   }                                                                             \
 506   ObjArrayKlass_OOP_ITERATE(a, p, (closure)->do_oop##nv_suffix(p))              \
 507   return size;                                                                  \
 508 }
 509 
 510 #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix)         \
 511                                                                                 \
 512 int ObjArrayKlass::oop_oop_iterate##nv_suffix##_m(oop obj,                      \


< prev index next >