869 ObjectStartArray* const _start_array;
870 size_t _offset;
871
872 inline void decrement_words_remaining(size_t words);
873 // Update variables to indicate that word_count words were processed.
874 inline void update_state(size_t words);
875
876 public:
877 ParMarkBitMap* bitmap() const { return _bitmap; }
878
879 size_t words_remaining() const { return _words_remaining; }
880 bool is_full() const { return _words_remaining == 0; }
881 HeapWord* source() const { return _source; }
882 void set_source(HeapWord* addr) {
883 assert(addr != nullptr, "precondition");
884 _source = addr;
885 }
886
887 // If the object will fit (size <= words_remaining()), copy it to the current
888 // destination, update the interior oops and the start array.
889 void do_addr(HeapWord* addr, size_t words);
890
891 inline MoveAndUpdateClosure(ParMarkBitMap* bitmap, size_t region);
892
893 // Accessors.
894 HeapWord* destination() const { return _destination; }
895 HeapWord* copy_destination() const { return _destination + _offset; }
896
897 // Copy enough words to fill this closure or to the end of an object,
898 // whichever is smaller, starting at source(). The start array is not
899 // updated.
900 void copy_partial_obj(size_t partial_obj_size);
901
902 virtual void complete_region(HeapWord* dest_addr, PSParallelCompact::RegionData* region_ptr);
903 };
904
905 inline void MoveAndUpdateClosure::decrement_words_remaining(size_t words) {
906 assert(_words_remaining >= words, "processed too many words");
907 _words_remaining -= words;
908 }
909
|
869 ObjectStartArray* const _start_array;
870 size_t _offset;
871
872 inline void decrement_words_remaining(size_t words);
873 // Update variables to indicate that word_count words were processed.
874 inline void update_state(size_t words);
875
876 public:
877 ParMarkBitMap* bitmap() const { return _bitmap; }
878
879 size_t words_remaining() const { return _words_remaining; }
880 bool is_full() const { return _words_remaining == 0; }
881 HeapWord* source() const { return _source; }
882 void set_source(HeapWord* addr) {
883 assert(addr != nullptr, "precondition");
884 _source = addr;
885 }
886
887 // If the object will fit (size <= words_remaining()), copy it to the current
888 // destination, update the interior oops and the start array.
889 void do_addr(HeapWord* addr, size_t words, markWord mark);
890
891 inline MoveAndUpdateClosure(ParMarkBitMap* bitmap, size_t region);
892
893 // Accessors.
894 HeapWord* destination() const { return _destination; }
895 HeapWord* copy_destination() const { return _destination + _offset; }
896
897 // Copy enough words to fill this closure or to the end of an object,
898 // whichever is smaller, starting at source(). The start array is not
899 // updated.
900 void copy_partial_obj(size_t partial_obj_size);
901
902 virtual void complete_region(HeapWord* dest_addr, PSParallelCompact::RegionData* region_ptr);
903 };
904
905 inline void MoveAndUpdateClosure::decrement_words_remaining(size_t words) {
906 assert(_words_remaining >= words, "processed too many words");
907 _words_remaining -= words;
908 }
909
|