--- old/src/share/vm/gc/shenandoah/shenandoahHeap.hpp 2017-10-05 21:08:02.206145753 +0200 +++ new/src/share/vm/gc/shenandoah/shenandoahHeap.hpp 2017-10-05 21:08:02.093145478 +0200 @@ -135,8 +135,7 @@ size_t _bitmap_size; size_t _bitmap_words_per_region; MemRegion _heap_region; - MemRegion _bitmap0_region; - MemRegion _bitmap1_region; + MemRegion _bitmap_region; // Sortable array of regions ShenandoahHeapRegionSet* _ordered_regions; @@ -165,16 +164,12 @@ volatile size_t _committed; MarkBitMap _verification_bit_map; - MarkBitMap _mark_bit_map0; - MarkBitMap _mark_bit_map1; - MarkBitMap* _complete_mark_bit_map; - MarkBitMap* _next_mark_bit_map; + MarkBitMap __mark_bit_map; + MarkBitMap* _mark_bit_map; + bool _bitmap_valid; - HeapWord** _complete_top_at_mark_starts; - HeapWord** _complete_top_at_mark_starts_base; - - HeapWord** _next_top_at_mark_starts; - HeapWord** _next_top_at_mark_starts_base; + HeapWord** _top_at_mark_starts; + HeapWord** _top_at_mark_starts_base; volatile jbyte _cancelled_concgc; @@ -190,7 +185,7 @@ unsigned int _evacuation_in_progress; bool _need_update_refs; - bool _need_reset_bitmaps; + bool _need_reset_bitmap; ReferenceProcessor* _ref_processor; @@ -340,13 +335,9 @@ template inline bool in_collection_set(T obj) const; - inline bool allocated_after_next_mark_start(HeapWord* addr) const; - void set_next_top_at_mark_start(HeapWord* region_base, HeapWord* addr); - HeapWord* next_top_at_mark_start(HeapWord* region_base); - - inline bool allocated_after_complete_mark_start(HeapWord* addr) const; - void set_complete_top_at_mark_start(HeapWord* region_base, HeapWord* addr); - HeapWord* complete_top_at_mark_start(HeapWord* region_base); + inline bool allocated_after_mark_start(HeapWord* addr) const; + void set_top_at_mark_start(HeapWord* region_base, HeapWord* addr); + HeapWord* top_at_mark_start(HeapWord* region_base); // Evacuates object src. Returns the evacuated object if this thread // succeeded, otherwise rolls back the evacuation and returns the @@ -378,17 +369,16 @@ size_t garbage(); - void reset_next_mark_bitmap(WorkGang* gang); - void reset_complete_mark_bitmap(WorkGang* gang); + void reset_mark_bitmap(WorkGang* gang); + + MarkBitMap* mark_bit_map(); + inline bool is_marked(oop obj) const; + inline bool mark(oop obj) const; + bool is_bitmap_clear(); + bool is_bitmap_clear_range(HeapWord* start, HeapWord* end); - MarkBitMap* complete_mark_bit_map(); - MarkBitMap* next_mark_bit_map(); - inline bool is_marked_complete(oop obj) const; - inline bool mark_next(oop obj) const; - inline bool is_marked_next(oop obj) const; - bool is_next_bitmap_clear(); - bool is_next_bitmap_clear_range(HeapWord* start, HeapWord* end); - bool is_complete_bitmap_clear_range(HeapWord* start, HeapWord* end); + bool is_bitmap_valid() const { return _bitmap_valid; } + void set_bitmap_valid(bool valid) { _bitmap_valid = valid; } bool commit_bitmaps(ShenandoahHeapRegion* r); bool uncommit_bitmaps(ShenandoahHeapRegion* r); @@ -454,8 +444,6 @@ GCTimer* gc_timer() const; - void swap_mark_bitmaps(); - void cancel_concgc(GCCause::Cause cause); void cancel_concgc(ShenandoahCancelCause cause); @@ -502,7 +490,7 @@ ShenandoahConcurrentThread* concurrent_thread() { return _concurrent_gc_thread; } - inline bool mark_next_no_checks(oop obj) const; + inline bool mark_no_checks(oop obj) const; public: inline oop atomic_compare_exchange_oop(oop n, narrowOop* addr, oop c);