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);