Mercurial > hg > truffle
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 |