src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp

Print this page
rev 4735 : 8015237: Parallelize string table scanning during strong root processing
Summary: Parallelize the scanning of the intern string table by having each GC worker claim a given number of buckets.
Reviewed-by:


 801   // regions.
 802   void free_collection_set(HeapRegion* cs_head);
 803 
 804   // Abandon the current collection set without recording policy
 805   // statistics or updating free lists.
 806   void abandon_collection_set(HeapRegion* cs_head);
 807 
 808   // Applies "scan_non_heap_roots" to roots outside the heap,
 809   // "scan_rs" to roots inside the heap (having done "set_region" to
 810   // indicate the region in which the root resides),
 811   // and does "scan_metadata" If "scan_rs" is
 812   // NULL, then this step is skipped.  The "worker_i"
 813   // param is for use with parallel roots processing, and should be
 814   // the "i" of the calling parallel worker thread's work(i) function.
 815   // In the sequential case this param will be ignored.
 816   void g1_process_strong_roots(bool is_scavenging,
 817                                ScanningOption so,
 818                                OopClosure* scan_non_heap_roots,
 819                                OopsInHeapRegionClosure* scan_rs,
 820                                G1KlassScanClosure* scan_klasses,
 821                                int worker_i);
 822 
 823   // Apply "blk" to all the weak roots of the system.  These include
 824   // JNI weak roots, the code cache, system dictionary, symbol table,
 825   // string table, and referents of reachable weak refs.
 826   void g1_process_weak_roots(OopClosure* root_closure);
 827 
 828   // Frees a non-humongous region by initializing its contents and
 829   // adding it to the free list that's passed as a parameter (this is
 830   // usually a local list which will be appended to the master free
 831   // list later). The used bytes of freed regions are accumulated in
 832   // pre_used. If par is true, the region's RSet will not be freed
 833   // up. The assumption is that this will be done later.
 834   void free_region(HeapRegion* hr,
 835                    size_t* pre_used,
 836                    FreeRegionList* free_list,
 837                    bool par);
 838 
 839   // Frees a humongous region by collapsing it into individual regions
 840   // and calling free_region() for each of them. The freed regions
 841   // will be added to the free list that's passed as a parameter (this




 801   // regions.
 802   void free_collection_set(HeapRegion* cs_head);
 803 
 804   // Abandon the current collection set without recording policy
 805   // statistics or updating free lists.
 806   void abandon_collection_set(HeapRegion* cs_head);
 807 
 808   // Applies "scan_non_heap_roots" to roots outside the heap,
 809   // "scan_rs" to roots inside the heap (having done "set_region" to
 810   // indicate the region in which the root resides),
 811   // and does "scan_metadata" If "scan_rs" is
 812   // NULL, then this step is skipped.  The "worker_i"
 813   // param is for use with parallel roots processing, and should be
 814   // the "i" of the calling parallel worker thread's work(i) function.
 815   // In the sequential case this param will be ignored.
 816   void g1_process_strong_roots(bool is_scavenging,
 817                                ScanningOption so,
 818                                OopClosure* scan_non_heap_roots,
 819                                OopsInHeapRegionClosure* scan_rs,
 820                                G1KlassScanClosure* scan_klasses,
 821                                uint worker_i);
 822 
 823   // Apply "blk" to all the weak roots of the system.  These include
 824   // JNI weak roots, the code cache, system dictionary, symbol table,
 825   // string table, and referents of reachable weak refs.
 826   void g1_process_weak_roots(OopClosure* root_closure);
 827 
 828   // Frees a non-humongous region by initializing its contents and
 829   // adding it to the free list that's passed as a parameter (this is
 830   // usually a local list which will be appended to the master free
 831   // list later). The used bytes of freed regions are accumulated in
 832   // pre_used. If par is true, the region's RSet will not be freed
 833   // up. The assumption is that this will be done later.
 834   void free_region(HeapRegion* hr,
 835                    size_t* pre_used,
 836                    FreeRegionList* free_list,
 837                    bool par);
 838 
 839   // Frees a humongous region by collapsing it into individual regions
 840   // and calling free_region() for each of them. The freed regions
 841   // will be added to the free list that's passed as a parameter (this