< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.hpp
Print this page
*** 48,62 ****
--- 48,70 ----
* Parallelization is handled by assigning each GC worker the slice of the heap (the set of regions)
* where it does sliding compaction, without interfering with other threads.
*/
class ShenandoahMarkCompact : public CHeapObj<mtGC> {
+ friend class ShenandoahPrepareForCompactionObjectClosure;
private:
GCTimer* _gc_timer;
+ Stack<markOop, mtGC> _preserved_mark_stack;
+ Stack<oop, mtGC> _preserved_oop_stack;
+ Mutex _preserved_mark_lock;
+
public:
+ ShenandoahMarkCompact() : _gc_timer(NULL), _preserved_mark_stack(), _preserved_oop_stack(),
+ _preserved_mark_lock(Mutex::leaf, "Shenandoah Preserved Marks Lock", false, Mutex::_safepoint_check_never) {}
void initialize(GCTimer* gc_timer);
+
void do_it(GCCause::Cause gc_cause);
private:
void phase1_mark_heap();
void phase2_calculate_target_addresses(ShenandoahHeapRegionSet** worker_slices);
*** 64,71 ****
--- 72,82 ----
void phase4_compact_objects(ShenandoahHeapRegionSet** worker_slices);
void calculate_target_humongous_objects();
void compact_humongous_objects();
+ void preserve_mark(oop obj);
+ void restore_marks();
+ void adjust_marks();
};
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHMARKCOMPACT_HPP
< prev index next >