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

changeset 7051
1f1d373cd044
parent 6989
e5035defa3c4
child 7195
c02ec279b062
     1.1 --- a/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp	Tue Aug 19 10:50:27 2014 +0200
     1.2 +++ b/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp	Thu Aug 21 11:47:10 2014 +0200
     1.3 @@ -25,6 +25,7 @@
     1.4  #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1SATBCARDTABLEMODREFBS_HPP
     1.5  #define SHARE_VM_GC_IMPLEMENTATION_G1_G1SATBCARDTABLEMODREFBS_HPP
     1.6  
     1.7 +#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp"
     1.8  #include "memory/cardTableModRefBS.hpp"
     1.9  #include "memory/memRegion.hpp"
    1.10  #include "oops/oop.inline.hpp"
    1.11 @@ -33,6 +34,7 @@
    1.12  #if INCLUDE_ALL_GCS
    1.13  
    1.14  class DirtyCardQueueSet;
    1.15 +class G1SATBCardTableLoggingModRefBS;
    1.16  
    1.17  // This barrier is specialized to use a logging barrier to support
    1.18  // snapshot-at-the-beginning marking.
    1.19 @@ -126,18 +128,40 @@
    1.20      jbyte val = _byte_map[card_index];
    1.21      return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val();
    1.22    }
    1.23 +};
    1.24  
    1.25 +class G1SATBCardTableLoggingModRefBSChangedListener : public G1MappingChangedListener {
    1.26 + private:
    1.27 +  G1SATBCardTableLoggingModRefBS* _card_table;
    1.28 + public:
    1.29 +  G1SATBCardTableLoggingModRefBSChangedListener() : _card_table(NULL) { }
    1.30 +
    1.31 +  void set_card_table(G1SATBCardTableLoggingModRefBS* card_table) { _card_table = card_table; }
    1.32 +
    1.33 +  virtual void on_commit(uint start_idx, size_t num_regions);
    1.34  };
    1.35  
    1.36  // Adds card-table logging to the post-barrier.
    1.37  // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet.
    1.38  class G1SATBCardTableLoggingModRefBS: public G1SATBCardTableModRefBS {
    1.39 +  friend class G1SATBCardTableLoggingModRefBSChangedListener;
    1.40   private:
    1.41 +  G1SATBCardTableLoggingModRefBSChangedListener _listener;
    1.42    DirtyCardQueueSet& _dcqs;
    1.43   public:
    1.44 +  static size_t compute_size(size_t mem_region_size_in_words) {
    1.45 +    size_t number_of_slots = (mem_region_size_in_words / card_size_in_words);
    1.46 +    return ReservedSpace::allocation_align_size_up(number_of_slots);
    1.47 +  }
    1.48 +
    1.49    G1SATBCardTableLoggingModRefBS(MemRegion whole_heap,
    1.50                                   int max_covered_regions);
    1.51  
    1.52 +  virtual void initialize() { }
    1.53 +  virtual void initialize(G1RegionToSpaceMapper* mapper);
    1.54 +
    1.55 +  virtual void resize_covered_region(MemRegion new_region) { ShouldNotReachHere(); }
    1.56 +
    1.57    bool is_a(BarrierSet::Name bsn) {
    1.58      return bsn == BarrierSet::G1SATBCTLogging ||
    1.59        G1SATBCardTableModRefBS::is_a(bsn);
    1.60 @@ -154,8 +178,6 @@
    1.61  
    1.62    void write_region_work(MemRegion mr)    { invalidate(mr); }
    1.63    void write_ref_array_work(MemRegion mr) { invalidate(mr); }
    1.64 -
    1.65 -
    1.66  };
    1.67  
    1.68  

mercurial