comparison src/share/vm/gc_implementation/g1/concurrentMark.hpp @ 20380:9337d0e7ea4f

8055919: Remove dead code in G1 concurrent marking code Reviewed-by: jmasa, jwilhelm
author tschatzl
date Tue, 02 Sep 2014 15:04:00 +0200
parents 1f1d373cd044
children e7d0505c8a30
comparison
equal deleted inserted replaced
20379:3372cbab6583 20380:9337d0e7ea4f
681 // Attempts to steal an object from the task queues of other tasks 681 // Attempts to steal an object from the task queues of other tasks
682 bool try_stealing(uint worker_id, int* hash_seed, oop& obj) { 682 bool try_stealing(uint worker_id, int* hash_seed, oop& obj) {
683 return _task_queues->steal(worker_id, hash_seed, obj); 683 return _task_queues->steal(worker_id, hash_seed, obj);
684 } 684 }
685 685
686 ConcurrentMark(G1CollectedHeap* g1h, G1RegionToSpaceMapper* prev_bitmap_storage, G1RegionToSpaceMapper* next_bitmap_storage); 686 ConcurrentMark(G1CollectedHeap* g1h,
687 G1RegionToSpaceMapper* prev_bitmap_storage,
688 G1RegionToSpaceMapper* next_bitmap_storage);
687 ~ConcurrentMark(); 689 ~ConcurrentMark();
688 690
689 ConcurrentMarkThread* cmThread() { return _cmThread; } 691 ConcurrentMarkThread* cmThread() { return _cmThread; }
690 692
691 CMBitMapRO* prevMarkBitMap() const { return _prevMarkBitMap; } 693 CMBitMapRO* prevMarkBitMap() const { return _prevMarkBitMap; }
710 // responsible for dealing with this issue (e.g., get the size from 712 // responsible for dealing with this issue (e.g., get the size from
711 // the from-space image when the to-space image might be 713 // the from-space image when the to-space image might be
712 // inconsistent) and always passing the size. hr is the region that 714 // inconsistent) and always passing the size. hr is the region that
713 // contains the object and it's passed optionally from callers who 715 // contains the object and it's passed optionally from callers who
714 // might already have it (no point in recalculating it). 716 // might already have it (no point in recalculating it).
715 inline void grayRoot(oop obj, size_t word_size, 717 inline void grayRoot(oop obj,
716 uint worker_id, HeapRegion* hr = NULL); 718 size_t word_size,
719 uint worker_id,
720 HeapRegion* hr = NULL);
717 721
718 // It iterates over the heap and for each object it comes across it 722 // It iterates over the heap and for each object it comes across it
719 // will dump the contents of its reference fields, as well as 723 // will dump the contents of its reference fields, as well as
720 // liveness information for the object and its referents. The dump 724 // liveness information for the object and its referents. The dump
721 // will be written to a file with the following name: 725 // will be written to a file with the following name:
732 // O : an object outside the G1 heap (typically: in the perm gen) 736 // O : an object outside the G1 heap (typically: in the perm gen)
733 // NOT : a reference field whose referent is not live 737 // NOT : a reference field whose referent is not live
734 // AND MARKED : indicates that an object is both explicitly and 738 // AND MARKED : indicates that an object is both explicitly and
735 // implicitly live (it should be one or the other, not both) 739 // implicitly live (it should be one or the other, not both)
736 void print_reachable(const char* str, 740 void print_reachable(const char* str,
737 VerifyOption vo, bool all) PRODUCT_RETURN; 741 VerifyOption vo,
742 bool all) PRODUCT_RETURN;
738 743
739 // Clear the next marking bitmap (will be called concurrently). 744 // Clear the next marking bitmap (will be called concurrently).
740 void clearNextBitmap(); 745 void clearNextBitmap();
741 746
742 // Return whether the next mark bitmap has no marks set. To be used for assertions 747 // Return whether the next mark bitmap has no marks set. To be used for assertions
769 774
770 // Mark in the previous bitmap. NB: this is usually read-only, so use 775 // Mark in the previous bitmap. NB: this is usually read-only, so use
771 // this carefully! 776 // this carefully!
772 inline void markPrev(oop p); 777 inline void markPrev(oop p);
773 778
774 // Clears marks for all objects in the given range, for the prev, 779 // Clears marks for all objects in the given range, for the prev or
775 // next, or both bitmaps. NB: the previous bitmap is usually 780 // next bitmaps. NB: the previous bitmap is usually
776 // read-only, so use this carefully! 781 // read-only, so use this carefully!
777 void clearRangePrevBitmap(MemRegion mr); 782 void clearRangePrevBitmap(MemRegion mr);
778 void clearRangeNextBitmap(MemRegion mr); 783 void clearRangeNextBitmap(MemRegion mr);
779 void clearRangeBothBitmaps(MemRegion mr);
780 784
781 // Notify data structures that a GC has started. 785 // Notify data structures that a GC has started.
782 void note_start_of_gc() { 786 void note_start_of_gc() {
783 _markStack.note_start_of_gc(); 787 _markStack.note_start_of_gc();
784 } 788 }
796 void verify_no_cset_oops(bool verify_stacks, 800 void verify_no_cset_oops(bool verify_stacks,
797 bool verify_enqueued_buffers, 801 bool verify_enqueued_buffers,
798 bool verify_thread_buffers, 802 bool verify_thread_buffers,
799 bool verify_fingers) PRODUCT_RETURN; 803 bool verify_fingers) PRODUCT_RETURN;
800 804
801 bool isMarked(oop p) const {
802 assert(p != NULL && p->is_oop(), "expected an oop");
803 HeapWord* addr = (HeapWord*)p;
804 assert(addr >= _nextMarkBitMap->startWord() ||
805 addr < _nextMarkBitMap->endWord(), "in a region");
806
807 return _nextMarkBitMap->isMarked(addr);
808 }
809
810 inline bool not_yet_marked(oop p) const;
811
812 // XXX Debug code
813 bool containing_card_is_marked(void* p);
814 bool containing_cards_are_marked(void* start, void* last);
815
816 bool isPrevMarked(oop p) const { 805 bool isPrevMarked(oop p) const {
817 assert(p != NULL && p->is_oop(), "expected an oop"); 806 assert(p != NULL && p->is_oop(), "expected an oop");
818 HeapWord* addr = (HeapWord*)p; 807 HeapWord* addr = (HeapWord*)p;
819 assert(addr >= _prevMarkBitMap->startWord() || 808 assert(addr >= _prevMarkBitMap->startWord() ||
820 addr < _prevMarkBitMap->endWord(), "in a region"); 809 addr < _prevMarkBitMap->endWord(), "in a region");
896 885
897 // Counts the size of the given memory region in the the given 886 // Counts the size of the given memory region in the the given
898 // marked_bytes array slot for the given HeapRegion. 887 // marked_bytes array slot for the given HeapRegion.
899 // Sets the bits in the given card bitmap that are associated with the 888 // Sets the bits in the given card bitmap that are associated with the
900 // cards that are spanned by the memory region. 889 // cards that are spanned by the memory region.
901 inline void count_region(MemRegion mr, HeapRegion* hr, 890 inline void count_region(MemRegion mr,
891 HeapRegion* hr,
902 size_t* marked_bytes_array, 892 size_t* marked_bytes_array,
903 BitMap* task_card_bm); 893 BitMap* task_card_bm);
904 894
905 // Counts the given memory region in the task/worker counting 895 // Counts the given memory region in the task/worker counting
906 // data structures for the given worker id. 896 // data structures for the given worker id.
907 inline void count_region(MemRegion mr, HeapRegion* hr, uint worker_id); 897 inline void count_region(MemRegion mr, HeapRegion* hr, uint worker_id);
908 898
909 // Counts the given memory region in the task/worker counting
910 // data structures for the given worker id.
911 inline void count_region(MemRegion mr, uint worker_id);
912
913 // Counts the given object in the given task/worker counting 899 // Counts the given object in the given task/worker counting
914 // data structures. 900 // data structures.
915 inline void count_object(oop obj, HeapRegion* hr, 901 inline void count_object(oop obj,
902 HeapRegion* hr,
916 size_t* marked_bytes_array, 903 size_t* marked_bytes_array,
917 BitMap* task_card_bm); 904 BitMap* task_card_bm);
918 905
919 // Counts the given object in the task/worker counting data
920 // structures for the given worker id.
921 inline void count_object(oop obj, HeapRegion* hr, uint worker_id);
922
923 // Attempts to mark the given object and, if successful, counts 906 // Attempts to mark the given object and, if successful, counts
924 // the object in the given task/worker counting structures. 907 // the object in the given task/worker counting structures.
925 inline bool par_mark_and_count(oop obj, HeapRegion* hr, 908 inline bool par_mark_and_count(oop obj,
909 HeapRegion* hr,
926 size_t* marked_bytes_array, 910 size_t* marked_bytes_array,
927 BitMap* task_card_bm); 911 BitMap* task_card_bm);
928 912
929 // Attempts to mark the given object and, if successful, counts 913 // Attempts to mark the given object and, if successful, counts
930 // the object in the task/worker counting structures for the 914 // the object in the task/worker counting structures for the
931 // given worker id. 915 // given worker id.
932 inline bool par_mark_and_count(oop obj, size_t word_size, 916 inline bool par_mark_and_count(oop obj,
933 HeapRegion* hr, uint worker_id); 917 size_t word_size,
934 918 HeapRegion* hr,
935 // Attempts to mark the given object and, if successful, counts 919 uint worker_id);
936 // the object in the task/worker counting structures for the
937 // given worker id.
938 inline bool par_mark_and_count(oop obj, HeapRegion* hr, uint worker_id);
939
940 // Similar to the above routine but we don't know the heap region that
941 // contains the object to be marked/counted, which this routine looks up.
942 inline bool par_mark_and_count(oop obj, uint worker_id);
943
944 // Similar to the above routine but there are times when we cannot
945 // safely calculate the size of obj due to races and we, therefore,
946 // pass the size in as a parameter. It is the caller's reponsibility
947 // to ensure that the size passed in for obj is valid.
948 inline bool par_mark_and_count(oop obj, size_t word_size, uint worker_id);
949
950 // Unconditionally mark the given object, and unconditinally count
951 // the object in the counting structures for worker id 0.
952 // Should *not* be called from parallel code.
953 inline bool mark_and_count(oop obj, HeapRegion* hr);
954
955 // Similar to the above routine but we don't know the heap region that
956 // contains the object to be marked/counted, which this routine looks up.
957 // Should *not* be called from parallel code.
958 inline bool mark_and_count(oop obj);
959 920
960 // Returns true if initialization was successfully completed. 921 // Returns true if initialization was successfully completed.
961 bool completed_initialization() const { 922 bool completed_initialization() const {
962 return _completed_initialization; 923 return _completed_initialization;
963 } 924 }
1225 inline void move_finger_to(HeapWord* new_finger) { 1186 inline void move_finger_to(HeapWord* new_finger) {
1226 assert(new_finger >= _finger && new_finger < _region_limit, "invariant"); 1187 assert(new_finger >= _finger && new_finger < _region_limit, "invariant");
1227 _finger = new_finger; 1188 _finger = new_finger;
1228 } 1189 }
1229 1190
1230 CMTask(uint worker_id, ConcurrentMark *cm, 1191 CMTask(uint worker_id,
1231 size_t* marked_bytes, BitMap* card_bm, 1192 ConcurrentMark *cm,
1232 CMTaskQueue* task_queue, CMTaskQueueSet* task_queues); 1193 size_t* marked_bytes,
1194 BitMap* card_bm,
1195 CMTaskQueue* task_queue,
1196 CMTaskQueueSet* task_queues);
1233 1197
1234 // it prints statistics associated with this task 1198 // it prints statistics associated with this task
1235 void print_stats(); 1199 void print_stats();
1236 1200
1237 #if _MARKING_STATS_ 1201 #if _MARKING_STATS_