1 /*
   2  * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/shared/jvmFlagConstraintsGC.hpp"
  27 #include "gc/shared/referenceProcessor.hpp"
  28 
  29 // -- Define all JVM flags that have been declared in share/gc/shared/gc_globals.hpp
  30 
  31 #include "gc_globals.hpp"
  32 #include "runtime/flags/jvmFlag.inline.hpp"
  33 DEFN_PRODUCT_FLAG(UseSerialGC);
  34 DEFN_PRODUCT_FLAG(UseG1GC);
  35 DEFN_PRODUCT_FLAG(UseParallelGC);
  36 DEFN_PRODUCT_FLAG(UseEpsilonGC);
  37 DEFN_PRODUCT_FLAG(UseZGC);
  38 DEFN_PRODUCT_FLAG(UseShenandoahGC);
  39 DEFN_PRODUCT_FLAG(ParallelGCThreads); DEFN_PRODUCT_CONSTRAINT(ParallelGCThreads);
  40 DEFN_PRODUCT_FLAG(UseSemaphoreGCThreadsSynchronization);
  41 DEFN_PRODUCT_FLAG(UseDynamicNumberOfGCThreads);
  42 DEFN_PRODUCT_FLAG(InjectGCWorkerCreationFailure);
  43 DEFN_PRODUCT_FLAG(HeapSizePerGCThread); DEFN_PRODUCT_CUSTOM_RANGE(HeapSizePerGCThread);
  44 DEFN_PRODUCT_FLAG(ConcGCThreads); DEFN_PRODUCT_CONSTRAINT(ConcGCThreads);
  45 DEFN_PRODUCT_FLAG(AlwaysTenure);
  46 DEFN_PRODUCT_FLAG(NeverTenure);
  47 DEFN_PRODUCT_FLAG(ScavengeBeforeFullGC);
  48 DEFN_PRODUCT_FLAG(ExplicitGCInvokesConcurrent);
  49 DEFN_PRODUCT_FLAG(GCLockerEdenExpansionPercent); DEFN_PRODUCT_RANGE(GCLockerEdenExpansionPercent);
  50 DEFN_PRODUCT_FLAG(GCLockerRetryAllocationCount); DEFN_PRODUCT_RANGE(GCLockerRetryAllocationCount);
  51 DEFN_PRODUCT_FLAG(ParallelGCBufferWastePct); DEFN_PRODUCT_RANGE(ParallelGCBufferWastePct);
  52 DEFN_PRODUCT_FLAG(TargetPLABWastePct); DEFN_PRODUCT_RANGE(TargetPLABWastePct);
  53 DEFN_PRODUCT_FLAG(PLABWeight); DEFN_PRODUCT_RANGE(PLABWeight);
  54 DEFN_PRODUCT_FLAG(ResizePLAB);
  55 DEFN_PRODUCT_FLAG(ParGCArrayScanChunk); DEFN_PRODUCT_RANGE(ParGCArrayScanChunk);
  56 DEFN_PRODUCT_FLAG(AlwaysPreTouch);
  57 DEFN_PRODUCT_FLAG(PreTouchParallelChunkSize); DEFN_PRODUCT_RANGE(PreTouchParallelChunkSize);
  58 DEFN_PRODUCT_FLAG(MarkStackSizeMax); DEFN_PRODUCT_RANGE(MarkStackSizeMax);
  59 DEFN_PRODUCT_FLAG(MarkStackSize); DEFN_PRODUCT_RANGE(MarkStackSize); DEFN_PRODUCT_CONSTRAINT(MarkStackSize);
  60 DEFN_PRODUCT_FLAG(RefDiscoveryPolicy);
  61     // TODO: to avoid circular dependency, the min/max cannot be declared in header file
  62     inline FLAG_TYPE_RefDiscoveryPolicy FLAG_MIN_RefDiscoveryPolicy() { return ReferenceProcessor::DiscoveryPolicyMin; }
  63     inline FLAG_TYPE_RefDiscoveryPolicy FLAG_MAX_RefDiscoveryPolicy() { return ReferenceProcessor::DiscoveryPolicyMax; }
  64     DEFN_PRODUCT_RANGE(RefDiscoveryPolicy);
  65 DEFN_PRODUCT_FLAG(ParallelRefProcEnabled);
  66 DEFN_PRODUCT_FLAG(ParallelRefProcBalancingEnabled);
  67 DEFN_PRODUCT_FLAG(ReferencesPerThread);
  68 DEFN_PRODUCT_FLAG(InitiatingHeapOccupancyPercent); DEFN_PRODUCT_RANGE(InitiatingHeapOccupancyPercent);
  69 DEFN_NOTPROD_FLAG(ScavengeALot);
  70 DEFN_DEVELOP_FLAG(FullGCALot);
  71 DEFN_NOTPROD_FLAG(GCALotAtAllSafepoints);
  72 DEFN_NOTPROD_FLAG(PromotionFailureALot);
  73 DEFN_DEVELOP_FLAG(PromotionFailureALotCount);
  74 DEFN_DEVELOP_FLAG(PromotionFailureALotInterval);
  75 DEFN_PRODUCT_FLAG(WorkStealingSleepMillis);
  76 DEFN_PRODUCT_FLAG(WorkStealingYieldsBeforeSleep);
  77 DEFN_PRODUCT_FLAG(WorkStealingHardSpins);
  78 DEFN_PRODUCT_FLAG(WorkStealingSpinToYieldRatio);
  79 DEFN_DEVELOP_FLAG(ObjArrayMarkingStride);
  80 DEFN_DEVELOP_FLAG(MetadataAllocationFailALot);
  81 DEFN_DEVELOP_FLAG(MetadataAllocationFailALotInterval);
  82 DEFN_PRODUCT_FLAG(ExecutingUnitTests);
  83 DEFN_PRODUCT_FLAG_PD(UseTLAB);
  84 DEFN_PRODUCT_FLAG_PD(ResizeTLAB);
  85 DEFN_PRODUCT_FLAG(ZeroTLAB);
  86 DEFN_PRODUCT_FLAG(TLABStats);
  87 DEFN_PRODUCT_FLAG_PD(NeverActAsServerClassMachine);
  88 DEFN_PRODUCT_FLAG(AlwaysActAsServerClassMachine);
  89 DEFN_PRODUCT_FLAG_PD(MaxRAM); DEFN_PRODUCT_RANGE(MaxRAM);
  90 DEFN_PRODUCT_FLAG(AggressiveHeap);
  91 DEFN_PRODUCT_FLAG(ErgoHeapSizeLimit); DEFN_PRODUCT_RANGE(ErgoHeapSizeLimit);
  92 DEFN_PRODUCT_FLAG(MaxRAMFraction); DEFN_PRODUCT_RANGE(MaxRAMFraction);
  93 DEFN_PRODUCT_FLAG(MinRAMFraction); DEFN_PRODUCT_RANGE(MinRAMFraction);
  94 DEFN_PRODUCT_FLAG(InitialRAMFraction); DEFN_PRODUCT_RANGE(InitialRAMFraction);
  95 DEFN_PRODUCT_FLAG(MaxRAMPercentage); DEFN_PRODUCT_RANGE(MaxRAMPercentage);
  96 DEFN_PRODUCT_FLAG(MinRAMPercentage); DEFN_PRODUCT_RANGE(MinRAMPercentage);
  97 DEFN_PRODUCT_FLAG(InitialRAMPercentage); DEFN_PRODUCT_RANGE(InitialRAMPercentage);
  98 DEFN_PRODUCT_FLAG(ActiveProcessorCount);
  99 DEFN_DEVELOP_FLAG(MaxVirtMemFraction);
 100 DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicy);
 101 DEFN_PRODUCT_FLAG(UsePSAdaptiveSurvivorSizePolicy);
 102 DEFN_PRODUCT_FLAG(UseAdaptiveGenerationSizePolicyAtMinorCollection);
 103 DEFN_PRODUCT_FLAG(UseAdaptiveGenerationSizePolicyAtMajorCollection);
 104 DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicyWithSystemGC);
 105 DEFN_PRODUCT_FLAG(UseAdaptiveGCBoundary);
 106 DEFN_DEVELOP_FLAG(PSAdaptiveSizePolicyResizeVirtualSpaceAlot); DEFN_DEVELOP_RANGE(PSAdaptiveSizePolicyResizeVirtualSpaceAlot);
 107 DEFN_PRODUCT_FLAG(AdaptiveSizeThroughPutPolicy); DEFN_PRODUCT_RANGE(AdaptiveSizeThroughPutPolicy);
 108 DEFN_PRODUCT_FLAG(AdaptiveSizePolicyInitializingSteps); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyInitializingSteps);
 109 DEFN_DEVELOP_FLAG(AdaptiveSizePolicyReadyThreshold);
 110 DEFN_PRODUCT_FLAG(AdaptiveSizePolicyOutputInterval); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyOutputInterval);
 111 DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicyFootprintGoal);
 112 DEFN_PRODUCT_FLAG(AdaptiveSizePolicyWeight); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyWeight);
 113 DEFN_PRODUCT_FLAG(AdaptiveTimeWeight); DEFN_PRODUCT_RANGE(AdaptiveTimeWeight);
 114 DEFN_PRODUCT_FLAG(PausePadding); DEFN_PRODUCT_RANGE(PausePadding);
 115 DEFN_PRODUCT_FLAG(PromotedPadding); DEFN_PRODUCT_RANGE(PromotedPadding);
 116 DEFN_PRODUCT_FLAG(SurvivorPadding); DEFN_PRODUCT_RANGE(SurvivorPadding);
 117 DEFN_PRODUCT_FLAG(ThresholdTolerance); DEFN_PRODUCT_RANGE(ThresholdTolerance);
 118 DEFN_PRODUCT_FLAG(AdaptiveSizePolicyCollectionCostMargin); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyCollectionCostMargin);
 119 DEFN_PRODUCT_FLAG(YoungGenerationSizeIncrement); DEFN_PRODUCT_RANGE(YoungGenerationSizeIncrement);
 120 DEFN_PRODUCT_FLAG(YoungGenerationSizeSupplement); DEFN_PRODUCT_RANGE(YoungGenerationSizeSupplement);
 121 DEFN_PRODUCT_FLAG(YoungGenerationSizeSupplementDecay); DEFN_PRODUCT_RANGE(YoungGenerationSizeSupplementDecay);
 122 DEFN_PRODUCT_FLAG(TenuredGenerationSizeIncrement); DEFN_PRODUCT_RANGE(TenuredGenerationSizeIncrement);
 123 DEFN_PRODUCT_FLAG(TenuredGenerationSizeSupplement); DEFN_PRODUCT_RANGE(TenuredGenerationSizeSupplement);
 124 DEFN_PRODUCT_FLAG(TenuredGenerationSizeSupplementDecay); DEFN_PRODUCT_RANGE(TenuredGenerationSizeSupplementDecay);
 125 DEFN_PRODUCT_FLAG(MaxGCPauseMillis); DEFN_PRODUCT_RANGE(MaxGCPauseMillis); DEFN_PRODUCT_CONSTRAINT(MaxGCPauseMillis);
 126 DEFN_PRODUCT_FLAG(GCPauseIntervalMillis); DEFN_PRODUCT_CONSTRAINT(GCPauseIntervalMillis);
 127 DEFN_PRODUCT_FLAG(MaxGCMinorPauseMillis); DEFN_PRODUCT_RANGE(MaxGCMinorPauseMillis);
 128 DEFN_PRODUCT_FLAG(GCTimeRatio); DEFN_PRODUCT_RANGE(GCTimeRatio);
 129 DEFN_PRODUCT_FLAG(AdaptiveSizeDecrementScaleFactor); DEFN_PRODUCT_RANGE(AdaptiveSizeDecrementScaleFactor);
 130 DEFN_PRODUCT_FLAG(UseAdaptiveSizeDecayMajorGCCost);
 131 DEFN_PRODUCT_FLAG(AdaptiveSizeMajorGCDecayTimeScale); DEFN_PRODUCT_RANGE(AdaptiveSizeMajorGCDecayTimeScale);
 132 DEFN_PRODUCT_FLAG(MinSurvivorRatio); DEFN_PRODUCT_RANGE(MinSurvivorRatio);
 133 DEFN_PRODUCT_FLAG(InitialSurvivorRatio); DEFN_PRODUCT_RANGE(InitialSurvivorRatio);
 134 DEFN_PRODUCT_FLAG(BaseFootPrintEstimate); DEFN_PRODUCT_RANGE(BaseFootPrintEstimate);
 135 DEFN_PRODUCT_FLAG(UseGCOverheadLimit);
 136 DEFN_PRODUCT_FLAG(GCTimeLimit); DEFN_PRODUCT_RANGE(GCTimeLimit);
 137 DEFN_PRODUCT_FLAG(GCHeapFreeLimit); DEFN_PRODUCT_RANGE(GCHeapFreeLimit);
 138 DEFN_DEVELOP_FLAG(GCOverheadLimitThreshold); DEFN_DEVELOP_RANGE(GCOverheadLimitThreshold);
 139 DEFN_PRODUCT_FLAG(PrefetchCopyIntervalInBytes); DEFN_PRODUCT_RANGE(PrefetchCopyIntervalInBytes);
 140 DEFN_PRODUCT_FLAG(PrefetchScanIntervalInBytes); DEFN_PRODUCT_RANGE(PrefetchScanIntervalInBytes);
 141 DEFN_PRODUCT_FLAG(PrefetchFieldsAhead); DEFN_PRODUCT_RANGE(PrefetchFieldsAhead);
 142 DEFN_PRODUCT_FLAG(VerifyDuringStartup);
 143 DEFN_PRODUCT_FLAG(VerifyBeforeExit);
 144 DEFN_PRODUCT_FLAG(VerifyBeforeGC);
 145 DEFN_PRODUCT_FLAG(VerifyAfterGC);
 146 DEFN_PRODUCT_FLAG(VerifyDuringGC);
 147 DEFN_PRODUCT_FLAG(VerifyGCType);
 148 DEFN_PRODUCT_FLAG(VerifySubSet);
 149 DEFN_PRODUCT_FLAG(GCParallelVerificationEnabled);
 150 DEFN_PRODUCT_FLAG(DeferInitialCardMark);
 151 DEFN_PRODUCT_FLAG(UseCondCardMark);
 152 DEFN_PRODUCT_FLAG(VerifyRememberedSets);
 153 DEFN_PRODUCT_FLAG(VerifyObjectStartArray);
 154 DEFN_PRODUCT_FLAG(DisableExplicitGC);
 155 DEFN_PRODUCT_FLAG(PrintGC);
 156 DEFN_PRODUCT_FLAG(PrintGCDetails);
 157 DEFN_DEVELOP_FLAG(ConcGCYieldTimeout); DEFN_DEVELOP_RANGE(ConcGCYieldTimeout);
 158 DEFN_NOTPROD_FLAG(ScavengeALotInterval);
 159 DEFN_NOTPROD_FLAG(FullGCALotInterval);
 160 DEFN_NOTPROD_FLAG(FullGCALotStart);
 161 DEFN_NOTPROD_FLAG(FullGCALotDummies);
 162 DEFN_PRODUCT_FLAG(MinHeapSize); DEFN_PRODUCT_CONSTRAINT(MinHeapSize);
 163 DEFN_PRODUCT_FLAG(InitialHeapSize); DEFN_PRODUCT_CONSTRAINT(InitialHeapSize);
 164 DEFN_PRODUCT_FLAG(MaxHeapSize); DEFN_PRODUCT_CONSTRAINT(MaxHeapSize);
 165 DEFN_PRODUCT_FLAG(SoftMaxHeapSize); DEFN_PRODUCT_CONSTRAINT(SoftMaxHeapSize);
 166 DEFN_PRODUCT_FLAG(OldSize); DEFN_PRODUCT_RANGE(OldSize);
 167 DEFN_PRODUCT_FLAG(NewSize); DEFN_PRODUCT_CONSTRAINT(NewSize);
 168 DEFN_PRODUCT_FLAG(MaxNewSize); DEFN_PRODUCT_RANGE(MaxNewSize);
 169 DEFN_PRODUCT_FLAG_PD(HeapBaseMinAddress); DEFN_PRODUCT_CONSTRAINT(HeapBaseMinAddress);
 170 DEFN_PRODUCT_FLAG(PretenureSizeThreshold); DEFN_PRODUCT_RANGE(PretenureSizeThreshold);
 171 DEFN_PRODUCT_FLAG(MinTLABSize); DEFN_PRODUCT_RANGE(MinTLABSize); DEFN_PRODUCT_CONSTRAINT(MinTLABSize);
 172 DEFN_PRODUCT_FLAG(TLABSize); DEFN_PRODUCT_CONSTRAINT(TLABSize);
 173 DEFN_PRODUCT_FLAG(YoungPLABSize); DEFN_PRODUCT_CONSTRAINT(YoungPLABSize);
 174 DEFN_PRODUCT_FLAG(OldPLABSize); DEFN_PRODUCT_CONSTRAINT(OldPLABSize);
 175 DEFN_PRODUCT_FLAG(TLABAllocationWeight); DEFN_PRODUCT_RANGE(TLABAllocationWeight);
 176 DEFN_PRODUCT_FLAG(TLABWasteTargetPercent); DEFN_PRODUCT_RANGE(TLABWasteTargetPercent);
 177 DEFN_PRODUCT_FLAG(TLABRefillWasteFraction); DEFN_PRODUCT_RANGE(TLABRefillWasteFraction);
 178 DEFN_PRODUCT_FLAG(TLABWasteIncrement); DEFN_PRODUCT_RANGE(TLABWasteIncrement); DEFN_PRODUCT_CONSTRAINT(TLABWasteIncrement);
 179 DEFN_PRODUCT_FLAG(SurvivorRatio); DEFN_PRODUCT_RANGE(SurvivorRatio); DEFN_PRODUCT_CONSTRAINT(SurvivorRatio);
 180 DEFN_PRODUCT_FLAG(NewRatio); DEFN_PRODUCT_RANGE(NewRatio);
 181 DEFN_PRODUCT_FLAG_PD(NewSizeThreadIncrease); DEFN_PRODUCT_RANGE(NewSizeThreadIncrease);
 182 DEFN_PRODUCT_FLAG(QueuedAllocationWarningCount); DEFN_PRODUCT_RANGE(QueuedAllocationWarningCount);
 183 DEFN_PRODUCT_FLAG(VerifyGCStartAt); DEFN_PRODUCT_RANGE(VerifyGCStartAt);
 184 DEFN_PRODUCT_FLAG(VerifyGCLevel); DEFN_PRODUCT_RANGE(VerifyGCLevel);
 185 DEFN_PRODUCT_FLAG(MaxTenuringThreshold);
 186     // TODO: to avoid circular dependency, the min/max cannot be declared in header file
 187     inline FLAG_TYPE_MaxTenuringThreshold FLAG_MIN_MaxTenuringThreshold() { return 0; }
 188     inline FLAG_TYPE_MaxTenuringThreshold FLAG_MAX_MaxTenuringThreshold() { return markWord::max_age + 1; }
 189     DEFN_PRODUCT_RANGE(MaxTenuringThreshold); DEFN_PRODUCT_CONSTRAINT(MaxTenuringThreshold);
 190 DEFN_PRODUCT_FLAG(InitialTenuringThreshold);
 191     // TODO: to avoid circular dependency, the min/max cannot be declared in header file
 192     inline FLAG_TYPE_InitialTenuringThreshold FLAG_MIN_InitialTenuringThreshold() { return 0; }
 193     inline FLAG_TYPE_InitialTenuringThreshold FLAG_MAX_InitialTenuringThreshold() { return markWord::max_age + 1; }
 194     DEFN_PRODUCT_RANGE(InitialTenuringThreshold); DEFN_PRODUCT_CONSTRAINT(InitialTenuringThreshold);
 195 DEFN_PRODUCT_FLAG(TargetSurvivorRatio); DEFN_PRODUCT_RANGE(TargetSurvivorRatio);
 196 DEFN_PRODUCT_FLAG(MarkSweepDeadRatio); DEFN_PRODUCT_RANGE(MarkSweepDeadRatio);
 197 DEFN_PRODUCT_FLAG(MarkSweepAlwaysCompactCount); DEFN_PRODUCT_RANGE(MarkSweepAlwaysCompactCount);
 198 DEFN_DEVELOP_FLAG(GCExpandToAllocateDelayMillis);
 199 DEFN_PRODUCT_FLAG(GCDrainStackTargetSize); DEFN_PRODUCT_RANGE(GCDrainStackTargetSize);