< prev index next >
src/hotspot/share/gc/cms/jvmFlagConstraintsCMS.cpp
Print this page
*** 28,45 ****
#include "gc/shared/cardTableRS.hpp"
#include "gc/shared/collectedHeap.hpp"
#include "gc/shared/genCollectedHeap.hpp"
#include "gc/shared/jvmFlagConstraintsGC.hpp"
#include "memory/universe.hpp"
- #include "runtime/flags/jvmFlagRangeList.hpp"
#include "runtime/globals_extension.hpp"
#include "utilities/globalDefinitions.hpp"
static JVMFlag::Error ParallelGCThreadsAndCMSWorkQueueDrainThreshold(uint threads, uintx threshold, bool verbose) {
// CMSWorkQueueDrainThreshold is verified to be less than max_juint
if (UseConcMarkSweepGC && (threads > (uint)(max_jint / (uint)threshold))) {
! CommandLineError::print(verbose,
"ParallelGCThreads (" UINT32_FORMAT ") or CMSWorkQueueDrainThreshold ("
UINTX_FORMAT ") is too large\n",
threads, threshold);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 28,44 ----
#include "gc/shared/cardTableRS.hpp"
#include "gc/shared/collectedHeap.hpp"
#include "gc/shared/genCollectedHeap.hpp"
#include "gc/shared/jvmFlagConstraintsGC.hpp"
#include "memory/universe.hpp"
#include "runtime/globals_extension.hpp"
#include "utilities/globalDefinitions.hpp"
static JVMFlag::Error ParallelGCThreadsAndCMSWorkQueueDrainThreshold(uint threads, uintx threshold, bool verbose) {
// CMSWorkQueueDrainThreshold is verified to be less than max_juint
if (UseConcMarkSweepGC && (threads > (uint)(max_jint / (uint)threshold))) {
! JVMFlag::printError(verbose,
"ParallelGCThreads (" UINT32_FORMAT ") or CMSWorkQueueDrainThreshold ("
UINTX_FORMAT ") is too large\n",
threads, threshold);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 47,67 ****
}
JVMFlag::Error ParallelGCThreadsConstraintFuncCMS(uint value, bool verbose) {
// To avoid overflow at ParScanClosure::do_oop_work.
if (UseConcMarkSweepGC && (value > (max_jint / 10))) {
! CommandLineError::print(verbose,
"ParallelGCThreads (" UINT32_FORMAT ") must be "
"less than or equal to " UINT32_FORMAT " for CMS GC\n",
value, (max_jint / 10));
return JVMFlag::VIOLATES_CONSTRAINT;
}
return ParallelGCThreadsAndCMSWorkQueueDrainThreshold(value, CMSWorkQueueDrainThreshold, verbose);
}
JVMFlag::Error ParGCStridesPerThreadConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value > ((uintx)max_jint / (uintx)ParallelGCThreads))) {
! CommandLineError::print(verbose,
"ParGCStridesPerThread (" UINTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" UINTX_FORMAT ")\n",
value, ((uintx)max_jint / (uintx)ParallelGCThreads));
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 46,66 ----
}
JVMFlag::Error ParallelGCThreadsConstraintFuncCMS(uint value, bool verbose) {
// To avoid overflow at ParScanClosure::do_oop_work.
if (UseConcMarkSweepGC && (value > (max_jint / 10))) {
! JVMFlag::printError(verbose,
"ParallelGCThreads (" UINT32_FORMAT ") must be "
"less than or equal to " UINT32_FORMAT " for CMS GC\n",
value, (max_jint / 10));
return JVMFlag::VIOLATES_CONSTRAINT;
}
return ParallelGCThreadsAndCMSWorkQueueDrainThreshold(value, CMSWorkQueueDrainThreshold, verbose);
}
JVMFlag::Error ParGCStridesPerThreadConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value > ((uintx)max_jint / (uintx)ParallelGCThreads))) {
! JVMFlag::printError(verbose,
"ParGCStridesPerThread (" UINTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" UINTX_FORMAT ")\n",
value, ((uintx)max_jint / (uintx)ParallelGCThreads));
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 74,84 ****
size_t heap_size = Universe::heap()->reserved_region().word_size();
CardTableRS* ct = GenCollectedHeap::heap()->rem_set();
size_t card_table_size = ct->cards_required(heap_size) - 1; // Valid card table size
if ((size_t)value > card_table_size) {
! CommandLineError::print(verbose,
"ParGCCardsPerStrideChunk (" INTX_FORMAT ") is too large for the heap size and "
"must be less than or equal to card table size (" SIZE_FORMAT ")\n",
value, card_table_size);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 73,83 ----
size_t heap_size = Universe::heap()->reserved_region().word_size();
CardTableRS* ct = GenCollectedHeap::heap()->rem_set();
size_t card_table_size = ct->cards_required(heap_size) - 1; // Valid card table size
if ((size_t)value > card_table_size) {
! JVMFlag::printError(verbose,
"ParGCCardsPerStrideChunk (" INTX_FORMAT ") is too large for the heap size and "
"must be less than or equal to card table size (" SIZE_FORMAT ")\n",
value, card_table_size);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 87,97 ****
// from CardTableRS::process_stride(). Note that ParGCStridesPerThread is already checked
// not to make an overflow with ParallelGCThreads from its constraint function.
uintx n_strides = ParallelGCThreads * ParGCStridesPerThread;
uintx ergo_max = max_uintx / n_strides;
if ((uintx)value > ergo_max) {
! CommandLineError::print(verbose,
"ParGCCardsPerStrideChunk (" INTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" UINTX_FORMAT ")\n",
value, ergo_max);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 86,96 ----
// from CardTableRS::process_stride(). Note that ParGCStridesPerThread is already checked
// not to make an overflow with ParallelGCThreads from its constraint function.
uintx n_strides = ParallelGCThreads * ParGCStridesPerThread;
uintx ergo_max = max_uintx / n_strides;
if ((uintx)value > ergo_max) {
! JVMFlag::printError(verbose,
"ParGCCardsPerStrideChunk (" INTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" UINTX_FORMAT ")\n",
value, ergo_max);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 102,112 ****
JVMFlag::Error CMSOldPLABMinConstraintFunc(size_t value, bool verbose) {
JVMFlag::Error status = JVMFlag::SUCCESS;
if (UseConcMarkSweepGC) {
if (value > CMSOldPLABMax) {
! CommandLineError::print(verbose,
"CMSOldPLABMin (" SIZE_FORMAT ") must be "
"less than or equal to CMSOldPLABMax (" SIZE_FORMAT ")\n",
value, CMSOldPLABMax);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 101,111 ----
JVMFlag::Error CMSOldPLABMinConstraintFunc(size_t value, bool verbose) {
JVMFlag::Error status = JVMFlag::SUCCESS;
if (UseConcMarkSweepGC) {
if (value > CMSOldPLABMax) {
! JVMFlag::printError(verbose,
"CMSOldPLABMin (" SIZE_FORMAT ") must be "
"less than or equal to CMSOldPLABMax (" SIZE_FORMAT ")\n",
value, CMSOldPLABMax);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 127,137 ****
static JVMFlag::Error CMSReservedAreaConstraintFunc(const char* name, size_t value, bool verbose) {
if (UseConcMarkSweepGC) {
ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
const size_t ergo_max = cms->cmsSpace()->max_flag_size_for_task_size();
if (value > ergo_max) {
! CommandLineError::print(verbose,
"%s (" SIZE_FORMAT ") must be "
"less than or equal to ergonomic maximum (" SIZE_FORMAT ") "
"which is based on the maximum size of the old generation of the Java heap\n",
name, value, ergo_max);
return JVMFlag::VIOLATES_CONSTRAINT;
--- 126,136 ----
static JVMFlag::Error CMSReservedAreaConstraintFunc(const char* name, size_t value, bool verbose) {
if (UseConcMarkSweepGC) {
ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
const size_t ergo_max = cms->cmsSpace()->max_flag_size_for_task_size();
if (value > ergo_max) {
! JVMFlag::printError(verbose,
"%s (" SIZE_FORMAT ") must be "
"less than or equal to ergonomic maximum (" SIZE_FORMAT ") "
"which is based on the maximum size of the old generation of the Java heap\n",
name, value, ergo_max);
return JVMFlag::VIOLATES_CONSTRAINT;
*** 148,158 ****
// CMSParRemarkTask::do_dirty_card_rescan_tasks requires CompactibleFreeListSpace::rescan_task_size()
// to be aligned to CardTable::card_size * BitsPerWord.
// Note that rescan_task_size() will be aligned if CMSRescanMultiple is a multiple of 'HeapWordSize'
// because rescan_task_size() is CardTable::card_size / HeapWordSize * BitsPerWord.
if (value % HeapWordSize != 0) {
! CommandLineError::print(verbose,
"CMSRescanMultiple (" SIZE_FORMAT ") must be "
"a multiple of " SIZE_FORMAT "\n",
value, HeapWordSize);
status = JVMFlag::VIOLATES_CONSTRAINT;
}
--- 147,157 ----
// CMSParRemarkTask::do_dirty_card_rescan_tasks requires CompactibleFreeListSpace::rescan_task_size()
// to be aligned to CardTable::card_size * BitsPerWord.
// Note that rescan_task_size() will be aligned if CMSRescanMultiple is a multiple of 'HeapWordSize'
// because rescan_task_size() is CardTable::card_size / HeapWordSize * BitsPerWord.
if (value % HeapWordSize != 0) {
! JVMFlag::printError(verbose,
"CMSRescanMultiple (" SIZE_FORMAT ") must be "
"a multiple of " SIZE_FORMAT "\n",
value, HeapWordSize);
status = JVMFlag::VIOLATES_CONSTRAINT;
}
*** 165,186 ****
return CMSReservedAreaConstraintFunc("CMSConcMarkMultiple", value, verbose);
}
JVMFlag::Error CMSPrecleanDenominatorConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value <= CMSPrecleanNumerator)) {
! CommandLineError::print(verbose,
"CMSPrecleanDenominator (" UINTX_FORMAT ") must be "
"strickly greater than CMSPrecleanNumerator (" UINTX_FORMAT ")\n",
value, CMSPrecleanNumerator);
return JVMFlag::VIOLATES_CONSTRAINT;
}
return JVMFlag::SUCCESS;
}
JVMFlag::Error CMSPrecleanNumeratorConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value >= CMSPrecleanDenominator)) {
! CommandLineError::print(verbose,
"CMSPrecleanNumerator (" UINTX_FORMAT ") must be "
"less than CMSPrecleanDenominator (" UINTX_FORMAT ")\n",
value, CMSPrecleanDenominator);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 164,185 ----
return CMSReservedAreaConstraintFunc("CMSConcMarkMultiple", value, verbose);
}
JVMFlag::Error CMSPrecleanDenominatorConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value <= CMSPrecleanNumerator)) {
! JVMFlag::printError(verbose,
"CMSPrecleanDenominator (" UINTX_FORMAT ") must be "
"strickly greater than CMSPrecleanNumerator (" UINTX_FORMAT ")\n",
value, CMSPrecleanNumerator);
return JVMFlag::VIOLATES_CONSTRAINT;
}
return JVMFlag::SUCCESS;
}
JVMFlag::Error CMSPrecleanNumeratorConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC && (value >= CMSPrecleanDenominator)) {
! JVMFlag::printError(verbose,
"CMSPrecleanNumerator (" UINTX_FORMAT ") must be "
"less than CMSPrecleanDenominator (" UINTX_FORMAT ")\n",
value, CMSPrecleanDenominator);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 189,199 ****
JVMFlag::Error CMSSamplingGrainConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC) {
size_t max_capacity = CMSHeap::heap()->young_gen()->max_capacity();
if (value > max_uintx - max_capacity) {
! CommandLineError::print(verbose,
"CMSSamplingGrain (" UINTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" SIZE_FORMAT ")\n",
value, max_uintx - max_capacity);
return JVMFlag::VIOLATES_CONSTRAINT;
}
--- 188,198 ----
JVMFlag::Error CMSSamplingGrainConstraintFunc(uintx value, bool verbose) {
if (UseConcMarkSweepGC) {
size_t max_capacity = CMSHeap::heap()->young_gen()->max_capacity();
if (value > max_uintx - max_capacity) {
! JVMFlag::printError(verbose,
"CMSSamplingGrain (" UINTX_FORMAT ") must be "
"less than or equal to ergonomic maximum (" SIZE_FORMAT ")\n",
value, max_uintx - max_capacity);
return JVMFlag::VIOLATES_CONSTRAINT;
}
*** 214,224 ****
// CMSBitMapYieldQuantum should be compared with mark bitmap size.
ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
size_t bitmap_size = cms->collector()->markBitMap()->sizeInWords();
if (value > bitmap_size) {
! CommandLineError::print(verbose,
"CMSBitMapYieldQuantum (" SIZE_FORMAT ") must "
"be less than or equal to bitmap size (" SIZE_FORMAT ") "
"whose size corresponds to the size of old generation of the Java heap\n",
value, bitmap_size);
return JVMFlag::VIOLATES_CONSTRAINT;
--- 213,223 ----
// CMSBitMapYieldQuantum should be compared with mark bitmap size.
ConcurrentMarkSweepGeneration* cms = CMSHeap::heap()->old_gen();
size_t bitmap_size = cms->collector()->markBitMap()->sizeInWords();
if (value > bitmap_size) {
! JVMFlag::printError(verbose,
"CMSBitMapYieldQuantum (" SIZE_FORMAT ") must "
"be less than or equal to bitmap size (" SIZE_FORMAT ") "
"whose size corresponds to the size of old generation of the Java heap\n",
value, bitmap_size);
return JVMFlag::VIOLATES_CONSTRAINT;
*** 227,237 ****
return JVMFlag::SUCCESS;
}
JVMFlag::Error OldPLABSizeConstraintFuncCMS(size_t value, bool verbose) {
if (value == 0) {
! CommandLineError::print(verbose,
"OldPLABSize (" SIZE_FORMAT ") must be greater than 0",
value);
return JVMFlag::VIOLATES_CONSTRAINT;
}
// For CMS, OldPLABSize is the number of free blocks of a given size that are used when
--- 226,236 ----
return JVMFlag::SUCCESS;
}
JVMFlag::Error OldPLABSizeConstraintFuncCMS(size_t value, bool verbose) {
if (value == 0) {
! JVMFlag::printError(verbose,
"OldPLABSize (" SIZE_FORMAT ") must be greater than 0",
value);
return JVMFlag::VIOLATES_CONSTRAINT;
}
// For CMS, OldPLABSize is the number of free blocks of a given size that are used when
< prev index next >