hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
changeset 11455 a6ab3d8b9a4c
parent 11451 9c9aa4d85660
child 11576 e0bef5ca4602
equal deleted inserted replaced
11454:c1d5bb1d6389 11455:a6ab3d8b9a4c
   867   // Do any necessary cleanup for evacuation-failure handling data
   867   // Do any necessary cleanup for evacuation-failure handling data
   868   // structures.
   868   // structures.
   869   void finalize_for_evac_failure();
   869   void finalize_for_evac_failure();
   870 
   870 
   871   // An attempt to evacuate "obj" has failed; take necessary steps.
   871   // An attempt to evacuate "obj" has failed; take necessary steps.
   872   oop handle_evacuation_failure_par(OopsInHeapRegionClosure* cl, oop obj,
   872   oop handle_evacuation_failure_par(OopsInHeapRegionClosure* cl, oop obj);
   873                                     bool should_mark_root);
       
   874   void handle_evacuation_failure_common(oop obj, markOop m);
   873   void handle_evacuation_failure_common(oop obj, markOop m);
   875 
   874 
   876   // ("Weak") Reference processing support.
   875   // ("Weak") Reference processing support.
   877   //
   876   //
   878   // G1 has 2 instances of the referece processor class. One
   877   // G1 has 2 instances of the referece processor class. One
   960   // the associated time stamp value matches the current value
   959   // the associated time stamp value matches the current value
   961   // of G1CollectedHeap::_gc_time_stamp.
   960   // of G1CollectedHeap::_gc_time_stamp.
   962   unsigned int* _worker_cset_start_region_time_stamp;
   961   unsigned int* _worker_cset_start_region_time_stamp;
   963 
   962 
   964   enum G1H_process_strong_roots_tasks {
   963   enum G1H_process_strong_roots_tasks {
   965     G1H_PS_mark_stack_oops_do,
   964     G1H_PS_filter_satb_buffers,
   966     G1H_PS_refProcessor_oops_do,
   965     G1H_PS_refProcessor_oops_do,
   967     // Leave this one last.
   966     // Leave this one last.
   968     G1H_PS_NumElements
   967     G1H_PS_NumElements
   969   };
   968   };
   970 
   969 
  1750       _bitmap_word_covers_words(bitmap_word_covers_words()),
  1749       _bitmap_word_covers_words(bitmap_word_covers_words()),
  1751       _heap_start(heap_start),
  1750       _heap_start(heap_start),
  1752       _gclab_word_size(gclab_word_size),
  1751       _gclab_word_size(gclab_word_size),
  1753       _real_start_word(NULL),
  1752       _real_start_word(NULL),
  1754       _real_end_word(NULL),
  1753       _real_end_word(NULL),
  1755       _start_word(NULL)
  1754       _start_word(NULL) {
  1756   {
  1755     guarantee(false, "GCLabBitMap::GCLabBitmap(): don't call this any more");
  1757     guarantee( size_in_words() >= bitmap_size_in_words(),
       
  1758                "just making sure");
       
  1759   }
  1756   }
  1760 
  1757 
  1761   inline unsigned heapWordToOffset(HeapWord* addr) {
  1758   inline unsigned heapWordToOffset(HeapWord* addr) {
  1762     unsigned offset = (unsigned) pointer_delta(addr, _start_word) >> _shifter;
  1759     unsigned offset = (unsigned) pointer_delta(addr, _start_word) >> _shifter;
  1763     assert(offset < size(), "offset should be within bounds");
  1760     assert(offset < size(), "offset should be within bounds");
  1807 
  1804 
  1808     return at(heapWordToOffset(addr));
  1805     return at(heapWordToOffset(addr));
  1809   }
  1806   }
  1810 
  1807 
  1811   void set_buffer(HeapWord* start) {
  1808   void set_buffer(HeapWord* start) {
       
  1809     guarantee(false, "set_buffer(): don't call this any more");
       
  1810 
  1812     guarantee(use_local_bitmaps, "invariant");
  1811     guarantee(use_local_bitmaps, "invariant");
  1813     clear();
  1812     clear();
  1814 
  1813 
  1815     assert(start != NULL, "invariant");
  1814     assert(start != NULL, "invariant");
  1816     _real_start_word = start;
  1815     _real_start_word = start;
  1830     iterate(&cl);
  1829     iterate(&cl);
  1831   }
  1830   }
  1832 #endif // PRODUCT
  1831 #endif // PRODUCT
  1833 
  1832 
  1834   void retire() {
  1833   void retire() {
       
  1834     guarantee(false, "retire(): don't call this any more");
       
  1835 
  1835     guarantee(use_local_bitmaps, "invariant");
  1836     guarantee(use_local_bitmaps, "invariant");
  1836     assert(fields_well_formed(), "invariant");
  1837     assert(fields_well_formed(), "invariant");
  1837 
  1838 
  1838     if (_start_word != NULL) {
  1839     if (_start_word != NULL) {
  1839       CMBitMap*       mark_bitmap = _cm->nextMarkBitMap();
  1840       CMBitMap*       mark_bitmap = _cm->nextMarkBitMap();
  1863 };
  1864 };
  1864 
  1865 
  1865 class G1ParGCAllocBuffer: public ParGCAllocBuffer {
  1866 class G1ParGCAllocBuffer: public ParGCAllocBuffer {
  1866 private:
  1867 private:
  1867   bool        _retired;
  1868   bool        _retired;
  1868   bool        _should_mark_objects;
       
  1869   GCLabBitMap _bitmap;
       
  1870 
  1869 
  1871 public:
  1870 public:
  1872   G1ParGCAllocBuffer(size_t gclab_word_size);
  1871   G1ParGCAllocBuffer(size_t gclab_word_size);
  1873 
  1872 
  1874   inline bool mark(HeapWord* addr) {
  1873   void set_buf(HeapWord* buf) {
  1875     guarantee(use_local_bitmaps, "invariant");
       
  1876     assert(_should_mark_objects, "invariant");
       
  1877     return _bitmap.mark(addr);
       
  1878   }
       
  1879 
       
  1880   inline void set_buf(HeapWord* buf) {
       
  1881     if (use_local_bitmaps && _should_mark_objects) {
       
  1882       _bitmap.set_buffer(buf);
       
  1883     }
       
  1884     ParGCAllocBuffer::set_buf(buf);
  1874     ParGCAllocBuffer::set_buf(buf);
  1885     _retired = false;
  1875     _retired = false;
  1886   }
  1876   }
  1887 
  1877 
  1888   inline void retire(bool end_of_gc, bool retain) {
  1878   void retire(bool end_of_gc, bool retain) {
  1889     if (_retired)
  1879     if (_retired)
  1890       return;
  1880       return;
  1891     if (use_local_bitmaps && _should_mark_objects) {
       
  1892       _bitmap.retire();
       
  1893     }
       
  1894     ParGCAllocBuffer::retire(end_of_gc, retain);
  1881     ParGCAllocBuffer::retire(end_of_gc, retain);
  1895     _retired = true;
  1882     _retired = true;
  1896   }
  1883   }
  1897 };
  1884 };
  1898 
  1885