62
63 private:
64 Generation* _young_gen;
65 Generation* _old_gen;
66
67 // The singleton CardTable Remembered Set.
68 CardTableRS* _rem_set;
69
70 // The generational collector policy.
71 GenCollectorPolicy* _gen_policy;
72
73 // Indicates that the most recent previous incremental collection failed.
74 // The flag is cleared when an action is taken that might clear the
75 // condition that caused that incremental collection to fail.
76 bool _incremental_collection_failed;
77
78 // In support of ExplicitGCInvokesConcurrent functionality
79 unsigned int _full_collections_completed;
80
81 // Collects the given generation.
82 void collect_generation(Generation* gen, GCMemoryManager* mem_mgr, bool full, size_t size, bool is_tlab,
83 bool run_verification, bool clear_soft_refs,
84 bool restore_marks_for_biased_locking);
85
86 // Reserve aligned space for the heap as needed by the contained generations.
87 char* allocate(size_t alignment, ReservedSpace* heap_rs);
88
89 // Initialize ("weak") refs processing support
90 void ref_processing_init();
91
92 protected:
93
94 // The set of potentially parallel tasks in root scanning.
95 enum GCH_strong_roots_tasks {
96 GCH_PS_Universe_oops_do,
97 GCH_PS_JNIHandles_oops_do,
98 GCH_PS_ObjectSynchronizer_oops_do,
99 GCH_PS_FlatProfiler_oops_do,
100 GCH_PS_Management_oops_do,
101 GCH_PS_SystemDictionary_oops_do,
102 GCH_PS_ClassLoaderDataGraph_oops_do,
103 GCH_PS_jvmti_oops_do,
104 GCH_PS_CodeCache_oops_do,
105 GCH_PS_aot_oops_do,
106 GCH_PS_younger_gens,
107 // Leave this one last.
108 GCH_PS_NumElements
109 };
110
111 // Data structure for claiming the (potentially) parallel tasks in
112 // (gen-specific) roots processing.
113 SubTasksDone* _process_strong_tasks;
114
115 GCMemoryManager* _young_mgr;
116 GCMemoryManager* _old_mgr;
117
118 // Helper functions for allocation
119 HeapWord* attempt_allocation(size_t size,
120 bool is_tlab,
121 bool first_only);
122
123 // Helper function for two callbacks below.
124 // Considers collection of the first max_level+1 generations.
125 void do_collection(bool full,
126 bool clear_all_soft_refs,
127 size_t size,
128 bool is_tlab,
129 GenerationType max_generation);
130
131 // Callback from VM_GenCollectForAllocation operation.
132 // This function does everything necessary/possible to satisfy an
133 // allocation request that failed in the youngest generation that should
134 // have handled it (including collection, expansion, etc.)
135 HeapWord* satisfy_failed_allocation(size_t size, bool is_tlab);
136
|
62
63 private:
64 Generation* _young_gen;
65 Generation* _old_gen;
66
67 // The singleton CardTable Remembered Set.
68 CardTableRS* _rem_set;
69
70 // The generational collector policy.
71 GenCollectorPolicy* _gen_policy;
72
73 // Indicates that the most recent previous incremental collection failed.
74 // The flag is cleared when an action is taken that might clear the
75 // condition that caused that incremental collection to fail.
76 bool _incremental_collection_failed;
77
78 // In support of ExplicitGCInvokesConcurrent functionality
79 unsigned int _full_collections_completed;
80
81 // Collects the given generation.
82 void collect_generation(Generation* gen, bool full, size_t size, bool is_tlab,
83 bool run_verification, bool clear_soft_refs,
84 bool restore_marks_for_biased_locking);
85
86 // Reserve aligned space for the heap as needed by the contained generations.
87 char* allocate(size_t alignment, ReservedSpace* heap_rs);
88
89 // Initialize ("weak") refs processing support
90 void ref_processing_init();
91
92 protected:
93
94 // The set of potentially parallel tasks in root scanning.
95 enum GCH_strong_roots_tasks {
96 GCH_PS_Universe_oops_do,
97 GCH_PS_JNIHandles_oops_do,
98 GCH_PS_ObjectSynchronizer_oops_do,
99 GCH_PS_FlatProfiler_oops_do,
100 GCH_PS_Management_oops_do,
101 GCH_PS_SystemDictionary_oops_do,
102 GCH_PS_ClassLoaderDataGraph_oops_do,
103 GCH_PS_jvmti_oops_do,
104 GCH_PS_CodeCache_oops_do,
105 GCH_PS_aot_oops_do,
106 GCH_PS_younger_gens,
107 // Leave this one last.
108 GCH_PS_NumElements
109 };
110
111 // Data structure for claiming the (potentially) parallel tasks in
112 // (gen-specific) roots processing.
113 SubTasksDone* _process_strong_tasks;
114
115 GCMemoryManager* _young_manager;
116 GCMemoryManager* _old_manager;
117
118 // Helper functions for allocation
119 HeapWord* attempt_allocation(size_t size,
120 bool is_tlab,
121 bool first_only);
122
123 // Helper function for two callbacks below.
124 // Considers collection of the first max_level+1 generations.
125 void do_collection(bool full,
126 bool clear_all_soft_refs,
127 size_t size,
128 bool is_tlab,
129 GenerationType max_generation);
130
131 // Callback from VM_GenCollectForAllocation operation.
132 // This function does everything necessary/possible to satisfy an
133 // allocation request that failed in the youngest generation that should
134 // have handled it (including collection, expansion, etc.)
135 HeapWord* satisfy_failed_allocation(size_t size, bool is_tlab);
136
|