119
120 if (UseConcMarkSweepGC) {
121 status = MaxPLABSizeBounds("CMSOldPLABMax", value, verbose);
122 }
123 return status;
124 }
125
126 static JVMFlag::Error CMSReservedAreaConstraintFunc(const char* name, size_t value, bool verbose) {
127 if (UseConcMarkSweepGC) {
128 ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
129 const size_t ergo_max = cms->cmsSpace()->max_flag_size_for_task_size();
130 if (value > ergo_max) {
131 JVMFlag::printError(verbose,
132 "%s (" SIZE_FORMAT ") must be "
133 "less than or equal to ergonomic maximum (" SIZE_FORMAT ") "
134 "which is based on the maximum size of the old generation of the Java heap\n",
135 name, value, ergo_max);
136 return JVMFlag::VIOLATES_CONSTRAINT;
137 }
138 }
139
140 return JVMFlag::SUCCESS;
141 }
142
143 JVMFlag::Error CMSRescanMultipleConstraintFunc(size_t value, bool verbose) {
144 JVMFlag::Error status = CMSReservedAreaConstraintFunc("CMSRescanMultiple", value, verbose);
145
146 if (status == JVMFlag::SUCCESS && UseConcMarkSweepGC) {
147 // CMSParRemarkTask::do_dirty_card_rescan_tasks requires CompactibleFreeListSpace::rescan_task_size()
148 // to be aligned to CardTable::card_size * BitsPerWord.
149 // Note that rescan_task_size() will be aligned if CMSRescanMultiple is a multiple of 'HeapWordSize'
150 // because rescan_task_size() is CardTable::card_size / HeapWordSize * BitsPerWord.
151 if (value % HeapWordSize != 0) {
152 JVMFlag::printError(verbose,
153 "CMSRescanMultiple (" SIZE_FORMAT ") must be "
154 "a multiple of " SIZE_FORMAT "\n",
155 value, HeapWordSize);
156 status = JVMFlag::VIOLATES_CONSTRAINT;
157 }
158 }
159
160 return status;
161 }
162
163 JVMFlag::Error CMSConcMarkMultipleConstraintFunc(size_t value, bool verbose) {
164 return CMSReservedAreaConstraintFunc("CMSConcMarkMultiple", value, verbose);
165 }
166
167 JVMFlag::Error CMSPrecleanDenominatorConstraintFunc(uintx value, bool verbose) {
168 if (UseConcMarkSweepGC && (value <= CMSPrecleanNumerator)) {
169 JVMFlag::printError(verbose,
170 "CMSPrecleanDenominator (" UINTX_FORMAT ") must be "
171 "strickly greater than CMSPrecleanNumerator (" UINTX_FORMAT ")\n",
172 value, CMSPrecleanNumerator);
173 return JVMFlag::VIOLATES_CONSTRAINT;
174 }
175 return JVMFlag::SUCCESS;
176 }
177
178 JVMFlag::Error CMSPrecleanNumeratorConstraintFunc(uintx value, bool verbose) {
179 if (UseConcMarkSweepGC && (value >= CMSPrecleanDenominator)) {
|
119
120 if (UseConcMarkSweepGC) {
121 status = MaxPLABSizeBounds("CMSOldPLABMax", value, verbose);
122 }
123 return status;
124 }
125
126 static JVMFlag::Error CMSReservedAreaConstraintFunc(const char* name, size_t value, bool verbose) {
127 if (UseConcMarkSweepGC) {
128 ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
129 const size_t ergo_max = cms->cmsSpace()->max_flag_size_for_task_size();
130 if (value > ergo_max) {
131 JVMFlag::printError(verbose,
132 "%s (" SIZE_FORMAT ") must be "
133 "less than or equal to ergonomic maximum (" SIZE_FORMAT ") "
134 "which is based on the maximum size of the old generation of the Java heap\n",
135 name, value, ergo_max);
136 return JVMFlag::VIOLATES_CONSTRAINT;
137 }
138 }
139 return JVMFlag::SUCCESS;
140 }
141
142 JVMFlag::Error CMSRescanMultipleConstraintFunc(size_t value, bool verbose) {
143 JVMFlag::Error status = CMSReservedAreaConstraintFunc("CMSRescanMultiple", value, verbose);
144
145 if (status == JVMFlag::SUCCESS && UseConcMarkSweepGC) {
146 // CMSParRemarkTask::do_dirty_card_rescan_tasks requires CompactibleFreeListSpace::rescan_task_size()
147 // to be aligned to CardTable::card_size * BitsPerWord.
148 // Note that rescan_task_size() will be aligned if CMSRescanMultiple is a multiple of 'HeapWordSize'
149 // because rescan_task_size() is CardTable::card_size / HeapWordSize * BitsPerWord.
150 if (value % HeapWordSize != 0) {
151 JVMFlag::printError(verbose,
152 "CMSRescanMultiple (" SIZE_FORMAT ") must be "
153 "a multiple of " INT32_FORMAT "\n",
154 value, HeapWordSize);
155 status = JVMFlag::VIOLATES_CONSTRAINT;
156 }
157 }
158 return status;
159 }
160
161 JVMFlag::Error CMSConcMarkMultipleConstraintFunc(size_t value, bool verbose) {
162 return CMSReservedAreaConstraintFunc("CMSConcMarkMultiple", value, verbose);
163 }
164
165 JVMFlag::Error CMSPrecleanDenominatorConstraintFunc(uintx value, bool verbose) {
166 if (UseConcMarkSweepGC && (value <= CMSPrecleanNumerator)) {
167 JVMFlag::printError(verbose,
168 "CMSPrecleanDenominator (" UINTX_FORMAT ") must be "
169 "strickly greater than CMSPrecleanNumerator (" UINTX_FORMAT ")\n",
170 value, CMSPrecleanNumerator);
171 return JVMFlag::VIOLATES_CONSTRAINT;
172 }
173 return JVMFlag::SUCCESS;
174 }
175
176 JVMFlag::Error CMSPrecleanNumeratorConstraintFunc(uintx value, bool verbose) {
177 if (UseConcMarkSweepGC && (value >= CMSPrecleanDenominator)) {
|