comparison src/share/vm/gc_implementation/g1/concurrentMark.hpp @ 3772:6747fd0512e0

7004681: G1: Extend marking verification to Full GCs Summary: Perform a heap verification after the first phase of G1's full GC using objects' mark words to determine liveness. The third parameter of the heap verification routines, which was used in G1 to determine which marking bitmap to use in liveness calculations, has been changed from a boolean to an enum with values defined for using the mark word, and the 'prev' and 'next' bitmaps. Reviewed-by: tonyp, ysr
author johnc
date Tue, 14 Jun 2011 11:01:10 -0700
parents 842b840e67db
children 23d434c6290d
comparison
equal deleted inserted replaced
3771:842b840e67db 3772:6747fd0512e0
734 734
735 // It iterates over the heap and for each object it comes across it 735 // It iterates over the heap and for each object it comes across it
736 // will dump the contents of its reference fields, as well as 736 // will dump the contents of its reference fields, as well as
737 // liveness information for the object and its referents. The dump 737 // liveness information for the object and its referents. The dump
738 // will be written to a file with the following name: 738 // will be written to a file with the following name:
739 // G1PrintReachableBaseFile + "." + str. use_prev_marking decides 739 // G1PrintReachableBaseFile + "." + str.
740 // whether the prev (use_prev_marking == true) or next 740 // vo decides whether the prev (vo == UsePrevMarking), the next
741 // (use_prev_marking == false) marking information will be used to 741 // (vo == UseNextMarking) marking information, or the mark word
742 // determine the liveness of each object / referent. If all is true, 742 // (vo == UseMarkWord) will be used to determine the liveness of
743 // all objects in the heap will be dumped, otherwise only the live 743 // each object / referent.
744 // ones. In the dump the following symbols / abbreviations are used: 744 // If all is true, all objects in the heap will be dumped, otherwise
745 // only the live ones. In the dump the following symbols / breviations
746 // are used:
745 // M : an explicitly live object (its bitmap bit is set) 747 // M : an explicitly live object (its bitmap bit is set)
746 // > : an implicitly live object (over tams) 748 // > : an implicitly live object (over tams)
747 // O : an object outside the G1 heap (typically: in the perm gen) 749 // O : an object outside the G1 heap (typically: in the perm gen)
748 // NOT : a reference field whose referent is not live 750 // NOT : a reference field whose referent is not live
749 // AND MARKED : indicates that an object is both explicitly and 751 // AND MARKED : indicates that an object is both explicitly and
750 // implicitly live (it should be one or the other, not both) 752 // implicitly live (it should be one or the other, not both)
751 void print_reachable(const char* str, 753 void print_reachable(const char* str,
752 bool use_prev_marking, bool all) PRODUCT_RETURN; 754 VerifyOption vo, bool all) PRODUCT_RETURN;
753 755
754 // Clear the next marking bitmap (will be called concurrently). 756 // Clear the next marking bitmap (will be called concurrently).
755 void clearNextBitmap(); 757 void clearNextBitmap();
756 758
757 // main CMS steps and related support 759 // main CMS steps and related support