comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @ 1705:2d160770d2e5

6814437: G1: remove the _new_refs array Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure. Reviewed-by: iveresov, jmasa, tonyp
author johnc
date Mon, 02 Aug 2010 12:51:43 -0700
parents 4e5661ba9d98
children 5f429ee79634
comparison
equal deleted inserted replaced
1704:63f4675ac87d 1705:2d160770d2e5
503 RefineCardTableEntryClosure* _refine_cte_cl; 503 RefineCardTableEntryClosure* _refine_cte_cl;
504 504
505 // A function to check the consistency of dirty card logs. 505 // A function to check the consistency of dirty card logs.
506 void check_ct_logs_at_safepoint(); 506 void check_ct_logs_at_safepoint();
507 507
508 // A DirtyCardQueueSet that is used to hold cards that contain
509 // references into the current collection set. This is used to
510 // update the remembered sets of the regions in the collection
511 // set in the event of an evacuation failure.
512 DirtyCardQueueSet _into_cset_dirty_card_queue_set;
513
508 // After a collection pause, make the regions in the CS into free 514 // After a collection pause, make the regions in the CS into free
509 // regions. 515 // regions.
510 void free_collection_set(HeapRegion* cs_head); 516 void free_collection_set(HeapRegion* cs_head);
511 517
512 // Abandon the current collection set without recording policy 518 // Abandon the current collection set without recording policy
659 RefToScanQueue *task_queue(int i); 665 RefToScanQueue *task_queue(int i);
660 666
661 // A set of cards where updates happened during the GC 667 // A set of cards where updates happened during the GC
662 DirtyCardQueueSet& dirty_card_queue_set() { return _dirty_card_queue_set; } 668 DirtyCardQueueSet& dirty_card_queue_set() { return _dirty_card_queue_set; }
663 669
670 // A DirtyCardQueueSet that is used to hold cards that contain
671 // references into the current collection set. This is used to
672 // update the remembered sets of the regions in the collection
673 // set in the event of an evacuation failure.
674 DirtyCardQueueSet& into_cset_dirty_card_queue_set()
675 { return _into_cset_dirty_card_queue_set; }
676
664 // Create a G1CollectedHeap with the specified policy. 677 // Create a G1CollectedHeap with the specified policy.
665 // Must call the initialize method afterwards. 678 // Must call the initialize method afterwards.
666 // May not return if something goes wrong. 679 // May not return if something goes wrong.
667 G1CollectedHeap(G1CollectorPolicy* policy); 680 G1CollectedHeap(G1CollectorPolicy* policy);
668 681
713 void increment_gc_time_stamp() { 726 void increment_gc_time_stamp() {
714 ++_gc_time_stamp; 727 ++_gc_time_stamp;
715 OrderAccess::fence(); 728 OrderAccess::fence();
716 } 729 }
717 730
718 void iterate_dirty_card_closure(bool concurrent, int worker_i); 731 void iterate_dirty_card_closure(CardTableEntryClosure* cl,
732 DirtyCardQueue* into_cset_dcq,
733 bool concurrent, int worker_i);
719 734
720 // The shared block offset table array. 735 // The shared block offset table array.
721 G1BlockOffsetSharedArray* bot_shared() const { return _bot_shared; } 736 G1BlockOffsetSharedArray* bot_shared() const { return _bot_shared; }
722 737
723 // Reference Processing accessor 738 // Reference Processing accessor