643 clean_weak_klass_links(/*unloading_occurred*/ true , /* clean_alive_klasses */ false); |
643 clean_weak_klass_links(/*unloading_occurred*/ true , /* clean_alive_klasses */ false); |
644 } |
644 } |
645 |
645 |
646 // GC specific object visitors |
646 // GC specific object visitors |
647 // |
647 // |
648 #if INCLUDE_ALL_GCS |
648 #if INCLUDE_PARALLELGC |
649 // Parallel Scavenge |
649 // Parallel Scavenge |
650 virtual void oop_ps_push_contents( oop obj, PSPromotionManager* pm) = 0; |
650 virtual void oop_ps_push_contents( oop obj, PSPromotionManager* pm) = 0; |
651 // Parallel Compact |
651 // Parallel Compact |
652 virtual void oop_pc_follow_contents(oop obj, ParCompactionManager* cm) = 0; |
652 virtual void oop_pc_follow_contents(oop obj, ParCompactionManager* cm) = 0; |
653 virtual void oop_pc_update_pointers(oop obj, ParCompactionManager* cm) = 0; |
653 virtual void oop_pc_update_pointers(oop obj, ParCompactionManager* cm) = 0; |
661 virtual void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) = 0; |
661 virtual void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) = 0; |
662 |
662 |
663 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL) |
663 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL) |
664 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL) |
664 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL) |
665 |
665 |
666 #if INCLUDE_ALL_GCS |
666 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS |
667 #define Klass_OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
667 #define Klass_OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
668 virtual void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) = 0; |
668 virtual void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) = 0; |
669 |
669 |
670 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
670 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
671 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
671 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
672 #endif // INCLUDE_ALL_GCS |
672 #endif |
673 |
673 |
674 virtual void array_klasses_do(void f(Klass* k)) {} |
674 virtual void array_klasses_do(void f(Klass* k)) {} |
675 |
675 |
676 // Return self, except for abstract classes with exactly 1 |
676 // Return self, except for abstract classes with exactly 1 |
677 // implementor. Then return the 1 concrete implementation. |
677 // implementor. Then return the 1 concrete implementation. |
728 |
728 |
729 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
729 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
730 void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure); \ |
730 void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure); \ |
731 void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr); |
731 void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr); |
732 |
732 |
733 #if INCLUDE_ALL_GCS |
733 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS |
734 #define OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
734 #define OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
735 void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure); |
735 void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure); |
736 #endif // INCLUDE_ALL_GCS |
736 #endif |
737 |
737 |
738 |
738 |
739 // Oop iteration macros for definitions. |
739 // Oop iteration macros for definitions. |
740 // Used to generate definitions in the *Klass.inline.hpp files. |
740 // Used to generate definitions in the *Klass.inline.hpp files. |
741 |
741 |
742 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \ |
742 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \ |
743 void KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ |
743 void KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ |
744 oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ |
744 oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ |
745 } |
745 } |
746 |
746 |
747 #if INCLUDE_ALL_GCS |
747 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS |
748 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) \ |
748 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) \ |
749 void KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ |
749 void KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ |
750 oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ |
750 oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ |
751 } |
751 } |
752 #else |
752 #else |