/* * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ #include "precompiled.hpp" #include "gc/shared/jvmFlagConstraintsGC.hpp" #include "gc/shared/referenceProcessor.hpp" // -- Define all JVM flags that have been declared in share/gc/shared/gc_globals.hpp #include "gc_globals.hpp" #include "runtime/flags/jvmFlag.inline.hpp" DEFN_PRODUCT_FLAG(UseSerialGC); DEFN_PRODUCT_FLAG(UseG1GC); DEFN_PRODUCT_FLAG(UseParallelGC); DEFN_PRODUCT_FLAG(UseEpsilonGC); DEFN_PRODUCT_FLAG(UseZGC); DEFN_PRODUCT_FLAG(UseShenandoahGC); DEFN_PRODUCT_FLAG(ParallelGCThreads); DEFN_PRODUCT_CONSTRAINT(ParallelGCThreads); DEFN_PRODUCT_FLAG(UseSemaphoreGCThreadsSynchronization); DEFN_PRODUCT_FLAG(UseDynamicNumberOfGCThreads); DEFN_PRODUCT_FLAG(InjectGCWorkerCreationFailure); DEFN_PRODUCT_FLAG(HeapSizePerGCThread); DEFN_PRODUCT_CUSTOM_RANGE(HeapSizePerGCThread); DEFN_PRODUCT_FLAG(ConcGCThreads); DEFN_PRODUCT_CONSTRAINT(ConcGCThreads); DEFN_PRODUCT_FLAG(AlwaysTenure); DEFN_PRODUCT_FLAG(NeverTenure); DEFN_PRODUCT_FLAG(ScavengeBeforeFullGC); DEFN_PRODUCT_FLAG(ExplicitGCInvokesConcurrent); DEFN_PRODUCT_FLAG(GCLockerEdenExpansionPercent); DEFN_PRODUCT_RANGE(GCLockerEdenExpansionPercent); DEFN_PRODUCT_FLAG(GCLockerRetryAllocationCount); DEFN_PRODUCT_RANGE(GCLockerRetryAllocationCount); DEFN_PRODUCT_FLAG(ParallelGCBufferWastePct); DEFN_PRODUCT_RANGE(ParallelGCBufferWastePct); DEFN_PRODUCT_FLAG(TargetPLABWastePct); DEFN_PRODUCT_RANGE(TargetPLABWastePct); DEFN_PRODUCT_FLAG(PLABWeight); DEFN_PRODUCT_RANGE(PLABWeight); DEFN_PRODUCT_FLAG(ResizePLAB); DEFN_PRODUCT_FLAG(ParGCArrayScanChunk); DEFN_PRODUCT_RANGE(ParGCArrayScanChunk); DEFN_PRODUCT_FLAG(AlwaysPreTouch); DEFN_PRODUCT_FLAG(PreTouchParallelChunkSize); DEFN_PRODUCT_RANGE(PreTouchParallelChunkSize); DEFN_PRODUCT_FLAG(MarkStackSizeMax); DEFN_PRODUCT_RANGE(MarkStackSizeMax); DEFN_PRODUCT_FLAG(MarkStackSize); DEFN_PRODUCT_RANGE(MarkStackSize); DEFN_PRODUCT_CONSTRAINT(MarkStackSize); DEFN_PRODUCT_FLAG(RefDiscoveryPolicy); // TODO: to avoid circular dependency, the min/max cannot be declared in header file inline FLAG_TYPE_RefDiscoveryPolicy FLAG_MIN_RefDiscoveryPolicy() { return ReferenceProcessor::DiscoveryPolicyMin; } inline FLAG_TYPE_RefDiscoveryPolicy FLAG_MAX_RefDiscoveryPolicy() { return ReferenceProcessor::DiscoveryPolicyMax; } DEFN_PRODUCT_RANGE(RefDiscoveryPolicy); DEFN_PRODUCT_FLAG(ParallelRefProcEnabled); DEFN_PRODUCT_FLAG(ParallelRefProcBalancingEnabled); DEFN_PRODUCT_FLAG(ReferencesPerThread); DEFN_PRODUCT_FLAG(InitiatingHeapOccupancyPercent); DEFN_PRODUCT_RANGE(InitiatingHeapOccupancyPercent); DEFN_NOTPROD_FLAG(ScavengeALot); DEFN_DEVELOP_FLAG(FullGCALot); DEFN_NOTPROD_FLAG(GCALotAtAllSafepoints); DEFN_NOTPROD_FLAG(PromotionFailureALot); DEFN_DEVELOP_FLAG(PromotionFailureALotCount); DEFN_DEVELOP_FLAG(PromotionFailureALotInterval); DEFN_PRODUCT_FLAG(WorkStealingSleepMillis); DEFN_PRODUCT_FLAG(WorkStealingYieldsBeforeSleep); DEFN_PRODUCT_FLAG(WorkStealingHardSpins); DEFN_PRODUCT_FLAG(WorkStealingSpinToYieldRatio); DEFN_DEVELOP_FLAG(ObjArrayMarkingStride); DEFN_DEVELOP_FLAG(MetadataAllocationFailALot); DEFN_DEVELOP_FLAG(MetadataAllocationFailALotInterval); DEFN_PRODUCT_FLAG(ExecutingUnitTests); DEFN_PRODUCT_FLAG_PD(UseTLAB); DEFN_PRODUCT_FLAG_PD(ResizeTLAB); DEFN_PRODUCT_FLAG(ZeroTLAB); DEFN_PRODUCT_FLAG(TLABStats); DEFN_PRODUCT_FLAG_PD(NeverActAsServerClassMachine); DEFN_PRODUCT_FLAG(AlwaysActAsServerClassMachine); DEFN_PRODUCT_FLAG_PD(MaxRAM); DEFN_PRODUCT_RANGE(MaxRAM); DEFN_PRODUCT_FLAG(AggressiveHeap); DEFN_PRODUCT_FLAG(ErgoHeapSizeLimit); DEFN_PRODUCT_RANGE(ErgoHeapSizeLimit); DEFN_PRODUCT_FLAG(MaxRAMFraction); DEFN_PRODUCT_RANGE(MaxRAMFraction); DEFN_PRODUCT_FLAG(MinRAMFraction); DEFN_PRODUCT_RANGE(MinRAMFraction); DEFN_PRODUCT_FLAG(InitialRAMFraction); DEFN_PRODUCT_RANGE(InitialRAMFraction); DEFN_PRODUCT_FLAG(MaxRAMPercentage); DEFN_PRODUCT_RANGE(MaxRAMPercentage); DEFN_PRODUCT_FLAG(MinRAMPercentage); DEFN_PRODUCT_RANGE(MinRAMPercentage); DEFN_PRODUCT_FLAG(InitialRAMPercentage); DEFN_PRODUCT_RANGE(InitialRAMPercentage); DEFN_PRODUCT_FLAG(ActiveProcessorCount); DEFN_DEVELOP_FLAG(MaxVirtMemFraction); DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicy); DEFN_PRODUCT_FLAG(UsePSAdaptiveSurvivorSizePolicy); DEFN_PRODUCT_FLAG(UseAdaptiveGenerationSizePolicyAtMinorCollection); DEFN_PRODUCT_FLAG(UseAdaptiveGenerationSizePolicyAtMajorCollection); DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicyWithSystemGC); DEFN_PRODUCT_FLAG(UseAdaptiveGCBoundary); DEFN_DEVELOP_FLAG(PSAdaptiveSizePolicyResizeVirtualSpaceAlot); DEFN_DEVELOP_RANGE(PSAdaptiveSizePolicyResizeVirtualSpaceAlot); DEFN_PRODUCT_FLAG(AdaptiveSizeThroughPutPolicy); DEFN_PRODUCT_RANGE(AdaptiveSizeThroughPutPolicy); DEFN_PRODUCT_FLAG(AdaptiveSizePolicyInitializingSteps); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyInitializingSteps); DEFN_DEVELOP_FLAG(AdaptiveSizePolicyReadyThreshold); DEFN_PRODUCT_FLAG(AdaptiveSizePolicyOutputInterval); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyOutputInterval); DEFN_PRODUCT_FLAG(UseAdaptiveSizePolicyFootprintGoal); DEFN_PRODUCT_FLAG(AdaptiveSizePolicyWeight); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyWeight); DEFN_PRODUCT_FLAG(AdaptiveTimeWeight); DEFN_PRODUCT_RANGE(AdaptiveTimeWeight); DEFN_PRODUCT_FLAG(PausePadding); DEFN_PRODUCT_RANGE(PausePadding); DEFN_PRODUCT_FLAG(PromotedPadding); DEFN_PRODUCT_RANGE(PromotedPadding); DEFN_PRODUCT_FLAG(SurvivorPadding); DEFN_PRODUCT_RANGE(SurvivorPadding); DEFN_PRODUCT_FLAG(ThresholdTolerance); DEFN_PRODUCT_RANGE(ThresholdTolerance); DEFN_PRODUCT_FLAG(AdaptiveSizePolicyCollectionCostMargin); DEFN_PRODUCT_RANGE(AdaptiveSizePolicyCollectionCostMargin); DEFN_PRODUCT_FLAG(YoungGenerationSizeIncrement); DEFN_PRODUCT_RANGE(YoungGenerationSizeIncrement); DEFN_PRODUCT_FLAG(YoungGenerationSizeSupplement); DEFN_PRODUCT_RANGE(YoungGenerationSizeSupplement); DEFN_PRODUCT_FLAG(YoungGenerationSizeSupplementDecay); DEFN_PRODUCT_RANGE(YoungGenerationSizeSupplementDecay); DEFN_PRODUCT_FLAG(TenuredGenerationSizeIncrement); DEFN_PRODUCT_RANGE(TenuredGenerationSizeIncrement); DEFN_PRODUCT_FLAG(TenuredGenerationSizeSupplement); DEFN_PRODUCT_RANGE(TenuredGenerationSizeSupplement); DEFN_PRODUCT_FLAG(TenuredGenerationSizeSupplementDecay); DEFN_PRODUCT_RANGE(TenuredGenerationSizeSupplementDecay); DEFN_PRODUCT_FLAG(MaxGCPauseMillis); DEFN_PRODUCT_RANGE(MaxGCPauseMillis); DEFN_PRODUCT_CONSTRAINT(MaxGCPauseMillis); DEFN_PRODUCT_FLAG(GCPauseIntervalMillis); DEFN_PRODUCT_CONSTRAINT(GCPauseIntervalMillis); DEFN_PRODUCT_FLAG(MaxGCMinorPauseMillis); DEFN_PRODUCT_RANGE(MaxGCMinorPauseMillis); DEFN_PRODUCT_FLAG(GCTimeRatio); DEFN_PRODUCT_RANGE(GCTimeRatio); DEFN_PRODUCT_FLAG(AdaptiveSizeDecrementScaleFactor); DEFN_PRODUCT_RANGE(AdaptiveSizeDecrementScaleFactor); DEFN_PRODUCT_FLAG(UseAdaptiveSizeDecayMajorGCCost); DEFN_PRODUCT_FLAG(AdaptiveSizeMajorGCDecayTimeScale); DEFN_PRODUCT_RANGE(AdaptiveSizeMajorGCDecayTimeScale); DEFN_PRODUCT_FLAG(MinSurvivorRatio); DEFN_PRODUCT_RANGE(MinSurvivorRatio); DEFN_PRODUCT_FLAG(InitialSurvivorRatio); DEFN_PRODUCT_RANGE(InitialSurvivorRatio); DEFN_PRODUCT_FLAG(BaseFootPrintEstimate); DEFN_PRODUCT_RANGE(BaseFootPrintEstimate); DEFN_PRODUCT_FLAG(UseGCOverheadLimit); DEFN_PRODUCT_FLAG(GCTimeLimit); DEFN_PRODUCT_RANGE(GCTimeLimit); DEFN_PRODUCT_FLAG(GCHeapFreeLimit); DEFN_PRODUCT_RANGE(GCHeapFreeLimit); DEFN_DEVELOP_FLAG(GCOverheadLimitThreshold); DEFN_DEVELOP_RANGE(GCOverheadLimitThreshold); DEFN_PRODUCT_FLAG(PrefetchCopyIntervalInBytes); DEFN_PRODUCT_RANGE(PrefetchCopyIntervalInBytes); DEFN_PRODUCT_FLAG(PrefetchScanIntervalInBytes); DEFN_PRODUCT_RANGE(PrefetchScanIntervalInBytes); DEFN_PRODUCT_FLAG(PrefetchFieldsAhead); DEFN_PRODUCT_RANGE(PrefetchFieldsAhead); DEFN_PRODUCT_FLAG(VerifyDuringStartup); DEFN_PRODUCT_FLAG(VerifyBeforeExit); DEFN_PRODUCT_FLAG(VerifyBeforeGC); DEFN_PRODUCT_FLAG(VerifyAfterGC); DEFN_PRODUCT_FLAG(VerifyDuringGC); DEFN_PRODUCT_FLAG(VerifyGCType); DEFN_PRODUCT_FLAG(VerifySubSet); DEFN_PRODUCT_FLAG(GCParallelVerificationEnabled); DEFN_PRODUCT_FLAG(DeferInitialCardMark); DEFN_PRODUCT_FLAG(UseCondCardMark); DEFN_PRODUCT_FLAG(VerifyRememberedSets); DEFN_PRODUCT_FLAG(VerifyObjectStartArray); DEFN_PRODUCT_FLAG(DisableExplicitGC); DEFN_PRODUCT_FLAG(PrintGC); DEFN_PRODUCT_FLAG(PrintGCDetails); DEFN_DEVELOP_FLAG(ConcGCYieldTimeout); DEFN_DEVELOP_RANGE(ConcGCYieldTimeout); DEFN_NOTPROD_FLAG(ScavengeALotInterval); DEFN_NOTPROD_FLAG(FullGCALotInterval); DEFN_NOTPROD_FLAG(FullGCALotStart); DEFN_NOTPROD_FLAG(FullGCALotDummies); DEFN_PRODUCT_FLAG(MinHeapSize); DEFN_PRODUCT_CONSTRAINT(MinHeapSize); DEFN_PRODUCT_FLAG(InitialHeapSize); DEFN_PRODUCT_CONSTRAINT(InitialHeapSize); DEFN_PRODUCT_FLAG(MaxHeapSize); DEFN_PRODUCT_CONSTRAINT(MaxHeapSize); DEFN_PRODUCT_FLAG(SoftMaxHeapSize); DEFN_PRODUCT_CONSTRAINT(SoftMaxHeapSize); DEFN_PRODUCT_FLAG(OldSize); DEFN_PRODUCT_RANGE(OldSize); DEFN_PRODUCT_FLAG(NewSize); DEFN_PRODUCT_CONSTRAINT(NewSize); DEFN_PRODUCT_FLAG(MaxNewSize); DEFN_PRODUCT_RANGE(MaxNewSize); DEFN_PRODUCT_FLAG_PD(HeapBaseMinAddress); DEFN_PRODUCT_CONSTRAINT(HeapBaseMinAddress); DEFN_PRODUCT_FLAG(PretenureSizeThreshold); DEFN_PRODUCT_RANGE(PretenureSizeThreshold); DEFN_PRODUCT_FLAG(MinTLABSize); DEFN_PRODUCT_RANGE(MinTLABSize); DEFN_PRODUCT_CONSTRAINT(MinTLABSize); DEFN_PRODUCT_FLAG(TLABSize); DEFN_PRODUCT_CONSTRAINT(TLABSize); DEFN_PRODUCT_FLAG(YoungPLABSize); DEFN_PRODUCT_CONSTRAINT(YoungPLABSize); DEFN_PRODUCT_FLAG(OldPLABSize); DEFN_PRODUCT_CONSTRAINT(OldPLABSize); DEFN_PRODUCT_FLAG(TLABAllocationWeight); DEFN_PRODUCT_RANGE(TLABAllocationWeight); DEFN_PRODUCT_FLAG(TLABWasteTargetPercent); DEFN_PRODUCT_RANGE(TLABWasteTargetPercent); DEFN_PRODUCT_FLAG(TLABRefillWasteFraction); DEFN_PRODUCT_RANGE(TLABRefillWasteFraction); DEFN_PRODUCT_FLAG(TLABWasteIncrement); DEFN_PRODUCT_RANGE(TLABWasteIncrement); DEFN_PRODUCT_CONSTRAINT(TLABWasteIncrement); DEFN_PRODUCT_FLAG(SurvivorRatio); DEFN_PRODUCT_RANGE(SurvivorRatio); DEFN_PRODUCT_CONSTRAINT(SurvivorRatio); DEFN_PRODUCT_FLAG(NewRatio); DEFN_PRODUCT_RANGE(NewRatio); DEFN_PRODUCT_FLAG_PD(NewSizeThreadIncrease); DEFN_PRODUCT_RANGE(NewSizeThreadIncrease); DEFN_PRODUCT_FLAG(QueuedAllocationWarningCount); DEFN_PRODUCT_RANGE(QueuedAllocationWarningCount); DEFN_PRODUCT_FLAG(VerifyGCStartAt); DEFN_PRODUCT_RANGE(VerifyGCStartAt); DEFN_PRODUCT_FLAG(VerifyGCLevel); DEFN_PRODUCT_RANGE(VerifyGCLevel); DEFN_PRODUCT_FLAG(MaxTenuringThreshold); // TODO: to avoid circular dependency, the min/max cannot be declared in header file inline FLAG_TYPE_MaxTenuringThreshold FLAG_MIN_MaxTenuringThreshold() { return 0; } inline FLAG_TYPE_MaxTenuringThreshold FLAG_MAX_MaxTenuringThreshold() { return markWord::max_age + 1; } DEFN_PRODUCT_RANGE(MaxTenuringThreshold); DEFN_PRODUCT_CONSTRAINT(MaxTenuringThreshold); DEFN_PRODUCT_FLAG(InitialTenuringThreshold); // TODO: to avoid circular dependency, the min/max cannot be declared in header file inline FLAG_TYPE_InitialTenuringThreshold FLAG_MIN_InitialTenuringThreshold() { return 0; } inline FLAG_TYPE_InitialTenuringThreshold FLAG_MAX_InitialTenuringThreshold() { return markWord::max_age + 1; } DEFN_PRODUCT_RANGE(InitialTenuringThreshold); DEFN_PRODUCT_CONSTRAINT(InitialTenuringThreshold); DEFN_PRODUCT_FLAG(TargetSurvivorRatio); DEFN_PRODUCT_RANGE(TargetSurvivorRatio); DEFN_PRODUCT_FLAG(MarkSweepDeadRatio); DEFN_PRODUCT_RANGE(MarkSweepDeadRatio); DEFN_PRODUCT_FLAG(MarkSweepAlwaysCompactCount); DEFN_PRODUCT_RANGE(MarkSweepAlwaysCompactCount); DEFN_DEVELOP_FLAG(GCExpandToAllocateDelayMillis); DEFN_PRODUCT_FLAG(GCDrainStackTargetSize); DEFN_PRODUCT_RANGE(GCDrainStackTargetSize);