24 */
25
26 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
27 #define SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
28
29 #include "gc/shared/gcCause.hpp"
30 #include "gc/shenandoah/shenandoahConcurrentMark.hpp"
31 #include "gc/shenandoah/shenandoahGC.hpp"
32 #include "gc/shenandoah/shenandoahHeap.hpp"
33
34 class ShenandoahGeneration;
35
36 class VM_ShenandoahInitMark;
37 class VM_ShenandoahFinalMarkStartEvac;
38 class VM_ShenandoahInitUpdateRefs;
39 class VM_ShenandoahFinalUpdateRefs;
40
41 class ShenandoahConcurrentGC : public ShenandoahGC {
42 friend class VM_ShenandoahInitMark;
43 friend class VM_ShenandoahFinalMarkStartEvac;
44 friend class VM_ShenandoahInitUpdateRefs;
45 friend class VM_ShenandoahFinalUpdateRefs;
46 friend class VM_ShenandoahFinalVerify;
47
48 protected:
49 ShenandoahConcurrentMark _mark;
50
51 private:
52 ShenandoahDegenPoint _degen_point;
53 bool _abbreviated;
54 const bool _do_old_gc_bootstrap;
55
56 public:
57 ShenandoahConcurrentGC(ShenandoahGeneration* generation, bool do_old_gc_bootstrap);
58
59 bool collect(GCCause::Cause cause) override;
60 ShenandoahDegenPoint degen_point() const;
61
62 // Return true if this cycle found enough immediate garbage to skip evacuation
63 bool abbreviated() const { return _abbreviated; }
64
65 protected:
66 // Entry points to STW GC operations, these cause a related safepoint, that then
67 // call the entry method below
68 void vmop_entry_init_mark();
69 void vmop_entry_final_mark();
70 void vmop_entry_init_update_refs();
71 void vmop_entry_final_update_refs();
72 void vmop_entry_final_verify();
73
74 // Entry methods to normally STW GC operations. These set up logging, monitoring
75 // and workers for next VM operation
76 void entry_init_mark();
77 void entry_final_mark();
78 void entry_init_update_refs();
79 void entry_final_update_refs();
80 void entry_final_verify();
81
82 // Entry methods to normally concurrent GC operations. These set up logging, monitoring
83 // for concurrent operation.
84 void entry_reset();
85 void entry_mark_roots();
86 void entry_scan_remembered_set();
87 void entry_mark();
88 void entry_thread_roots();
89 void entry_weak_refs();
90 void entry_weak_roots();
91 void entry_class_unloading();
92 void entry_strong_roots();
93 void entry_cleanup_early();
94 void entry_complete_abbreviated_cycle();
95 void entry_final_roots();
96 void entry_evacuate();
97 void entry_update_thread_roots();
98 void entry_update_card_table();
99 void entry_concurrent_update_refs_prepare(ShenandoahHeap* heap);
100 void entry_update_refs();
101 void entry_cleanup_complete();
102
103 // Actual work for the phases
104 void op_reset();
105 void op_init_mark();
106 void op_mark_roots();
107 void op_mark();
108 virtual void op_final_mark();
109 void op_thread_roots();
110 void op_weak_refs();
111 void op_weak_roots();
112 void op_class_unloading();
113 void op_strong_roots();
114 void op_cleanup_early();
115 void op_evacuate();
|
24 */
25
26 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
27 #define SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
28
29 #include "gc/shared/gcCause.hpp"
30 #include "gc/shenandoah/shenandoahConcurrentMark.hpp"
31 #include "gc/shenandoah/shenandoahGC.hpp"
32 #include "gc/shenandoah/shenandoahHeap.hpp"
33
34 class ShenandoahGeneration;
35
36 class VM_ShenandoahInitMark;
37 class VM_ShenandoahFinalMarkStartEvac;
38 class VM_ShenandoahInitUpdateRefs;
39 class VM_ShenandoahFinalUpdateRefs;
40
41 class ShenandoahConcurrentGC : public ShenandoahGC {
42 friend class VM_ShenandoahInitMark;
43 friend class VM_ShenandoahFinalMarkStartEvac;
44 friend class VM_ShenandoahFinalRoots;
45 friend class VM_ShenandoahInitUpdateRefs;
46 friend class VM_ShenandoahFinalUpdateRefs;
47 friend class VM_ShenandoahFinalVerify;
48
49 protected:
50 ShenandoahConcurrentMark _mark;
51
52 private:
53 ShenandoahDegenPoint _degen_point;
54 bool _abbreviated;
55 const bool _do_old_gc_bootstrap;
56
57 public:
58 ShenandoahConcurrentGC(ShenandoahGeneration* generation, bool do_old_gc_bootstrap);
59
60 bool collect(GCCause::Cause cause) override;
61 ShenandoahDegenPoint degen_point() const;
62
63 // Return true if this cycle found enough immediate garbage to skip evacuation
64 bool abbreviated() const { return _abbreviated; }
65
66 protected:
67 // Entry points to STW GC operations, these cause a related safepoint, that then
68 // call the entry method below
69 void vmop_entry_init_mark();
70 void vmop_entry_final_mark();
71 void vmop_entry_init_update_refs();
72 void vmop_entry_final_update_refs();
73 void vmop_entry_final_roots();
74 void vmop_entry_final_verify();
75
76 // Entry methods to normally STW GC operations. These set up logging, monitoring
77 // and workers for next VM operation
78 void entry_init_mark();
79 void entry_final_mark();
80 void entry_final_roots();
81 void entry_init_update_refs();
82 void entry_final_update_refs();
83 void entry_final_verify();
84
85 // Entry methods to normally concurrent GC operations. These set up logging, monitoring
86 // for concurrent operation.
87 void entry_reset();
88 void entry_mark_roots();
89 void entry_scan_remembered_set();
90 void entry_mark();
91 void entry_thread_roots();
92 void entry_weak_refs();
93 void entry_weak_roots();
94 void entry_class_unloading();
95 void entry_strong_roots();
96 void entry_cleanup_early();
97 void entry_conc_roots();
98 void entry_complete_abbreviated_cycle();
99 void entry_evacuate();
100 void entry_update_thread_roots();
101 void entry_update_card_table();
102 void entry_concurrent_update_refs_prepare(ShenandoahHeap* heap);
103 void entry_update_refs();
104 void entry_cleanup_complete();
105
106 // Actual work for the phases
107 void op_reset();
108 void op_init_mark();
109 void op_mark_roots();
110 void op_mark();
111 virtual void op_final_mark();
112 void op_thread_roots();
113 void op_weak_refs();
114 void op_weak_roots();
115 void op_class_unloading();
116 void op_strong_roots();
117 void op_cleanup_early();
118 void op_evacuate();
|