< prev index next >
src/hotspot/share/gc/shared/gcConfig.cpp
Print this page
@@ -61,10 +61,13 @@
SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS, cmsArguments, "cmsgc" ),
SupportedGC(UseG1GC, CollectedHeap::G1, g1Arguments, "g1gc" ),
#endif // INCLUDE_ALL_GCS
};
+#define FOR_EACH_SUPPORTED_GC(var) \
+ for (const SupportedGC* var = &SupportedGCs[0]; var < &SupportedGCs[ARRAY_SIZE(SupportedGCs)]; var++)
+
GCArguments* GCConfig::_arguments = NULL;
bool GCConfig::_gc_selected_ergonomically = false;
void GCConfig::select_gc_ergonomically() {
#if INCLUDE_ALL_GCS
@@ -81,27 +84,27 @@
FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
#endif // INCLUDE_ALL_GCS
}
bool GCConfig::is_no_gc_selected() {
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._flag) {
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_flag) {
return false;
}
}
return true;
}
bool GCConfig::is_exactly_one_gc_selected() {
CollectedHeap::Name selected = CollectedHeap::None;
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._flag) {
- if (SupportedGCs[i]._name == selected || selected == CollectedHeap::None) {
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_flag) {
+ if (gc->_name == selected || selected == CollectedHeap::None) {
// Selected
- selected = SupportedGCs[i]._name;
+ selected = gc->_name;
} else {
// More than one selected
return false;
}
}
@@ -125,13 +128,13 @@
_gc_selected_ergonomically = true;
}
if (is_exactly_one_gc_selected()) {
// Exacly one GC selected
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._flag) {
- return &SupportedGCs[i]._arguments;
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_flag) {
+ return &gc->_arguments;
}
}
}
// More than one GC selected
@@ -144,24 +147,24 @@
assert(_arguments == NULL, "Already initialized");
_arguments = select_gc();
}
bool GCConfig::is_gc_supported(CollectedHeap::Name name) {
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._name == name) {
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_name == name) {
// Supported
return true;
}
}
// Not supported
return false;
}
bool GCConfig::is_gc_selected(CollectedHeap::Name name) {
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._name == name && SupportedGCs[i]._flag) {
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_name == name && gc->_flag) {
// Selected
return true;
}
}
@@ -174,13 +177,13 @@
}
const char* GCConfig::hs_err_name() {
if (is_exactly_one_gc_selected()) {
// Exacly one GC selected
- for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
- if (SupportedGCs[i]._flag) {
- return SupportedGCs[i]._hs_err_name;
+ FOR_EACH_SUPPORTED_GC(gc) {
+ if (gc->_flag) {
+ return gc->_hs_err_name;
}
}
}
// Zero or more than one GC selected
< prev index next >