JavaScript Runtimes
| Option | Default | Description |
|---|---|---|
| validateOptions | false | crashes if mis-typed JSC options were passed to the VM |
| dumpOptions | 0 | dumps JSC options (0 = None, 1 = Overridden only, 2 = All, 3 = Verbose) |
| configFile | "" | file to configure JSC options and logging location |
| useLLInt | true | allows the LLINT to be used if true |
| useJIT | true | allows the executable pages to be allocated for JIT and thunks if true |
| useBaselineJIT | true | allows the baseline JIT to be used if true |
| useDFGJIT | true | allows the DFG JIT to be used if true |
| useRegExpJIT | true | allows the RegExp JIT to be used if true |
| useDOMJIT | true | allows the DOMJIT to be used if true |
| reportMustSucceedExecutableAllocations | false | |
| maxPerThreadStackUsage | 4194304 | Max allowed stack usage by the VM |
| softReservedZoneSize | 131072 | A buffer greater than reservedZoneSize that reserves space for stringifying exceptions. |
| reservedZoneSize | 65536 | The amount of stack space we guarantee to our clients (and to interal VM code that does not call out to clients). |
| crashIfCantAllocateJITMemory | false | |
| jitMemoryReservationSize | 0 | Set this number to change the executable allocation size in ExecutableAllocatorFixedVMPool. (In bytes.) |
| useSeparatedWXHeap | false | |
| forceCodeBlockLiveness | false | |
| forceICFailure | false | |
| repatchCountForCoolDown | 8 | |
| initialCoolDownCount | 20 | |
| repatchBufferingCountdown | 8 | |
| dumpGeneratedBytecodes | false | |
| dumpBytecodeLivenessResults | false | |
| validateBytecode | false | |
| forceDebuggerBytecodeGeneration | false | |
| dumpBytecodesBeforeGeneratorification | false | |
| useFunctionDotArguments | true | |
| useTailCalls | true | |
| optimizeRecursiveTailCalls | true | |
| alwaysUseShadowChicken | false | |
| shadowChickenLogSize | 1000 | |
| shadowChickenMaxTailDeletedFramesSize | 128 | |
| dumpDisassembly | false | dumps disassembly of all JIT compiled code upon compilation |
| asyncDisassembly | false | |
| dumpDFGDisassembly | false | dumps disassembly of DFG function upon compilation |
| dumpFTLDisassembly | false | dumps disassembly of FTL function upon compilation |
| dumpAllDFGNodes | false | |
| bytecodeRangeToJITCompile | bytecode size range to allow compilation on, e.g. 1:100 | |
| bytecodeRangeToDFGCompile | bytecode size range to allow DFG compilation on, e.g. 1:100 | |
| bytecodeRangeToFTLCompile | bytecode size range to allow FTL compilation on, e.g. 1:100 | |
| jitWhitelist | "" | file with list of function signatures to allow compilation on |
| dfgWhitelist | "" | file with list of function signatures to allow DFG compilation on |
| ftlWhitelist | "" | file with list of function signatures to allow FTL compilation on |
| dumpSourceAtDFGTime | false | dumps source code of JS function being DFG compiled |
| dumpBytecodeAtDFGTime | false | dumps bytecode of JS function being DFG compiled |
| dumpGraphAfterParsing | false | |
| dumpGraphAtEachPhase | false | |
| dumpDFGGraphAtEachPhase | false | dumps the DFG graph at each phase of DFG compilation (note this excludes DFG graphs during FTL compilation) |
| dumpDFGFTLGraphAtEachPhase | false | dumps the DFG graph at each phase of DFG compilation when compiling FTL code |
| dumpB3GraphAtEachPhase | false | dumps the B3 graph at each phase of compilation |
| dumpAirGraphAtEachPhase | false | dumps the Air graph at each phase of compilation |
| verboseDFGBytecodeParsing | false | |
| safepointBeforeEachPhase | true | |
| verboseCompilation | false | |
| verboseFTLCompilation | false | |
| logCompilationChanges | false | |
| useProbeOSRExit | false | |
| printEachOSRExit | false | |
| validateGraph | false | |
| validateGraphAtEachPhase | false | |
| verboseValidationFailure | false | |
| verboseOSR | false | |
| verboseDFGOSRExit | false | |
| verboseFTLOSRExit | false | |
| verboseCallLink | false | |
| verboseCompilationQueue | false | |
| reportCompileTimes | false | dumps JS function signature and the time it took to compile in all tiers |
| reportBaselineCompileTimes | false | dumps JS function signature and the time it took to BaselineJIT compile |
| reportDFGCompileTimes | false | dumps JS function signature and the time it took to DFG and FTL compile |
| reportFTLCompileTimes | false | dumps JS function signature and the time it took to FTL compile |
| reportTotalCompileTimes | false | |
| reportParseTimes | false | dumps JS function signature and the time it took to parse |
| reportBytecodeCompileTimes | false | dumps JS function signature and the time it took to bytecode compile |
| verboseExitProfile | false | |
| verboseCFA | false | |
| verboseDFGFailure | false | |
| verboseFTLToJSThunk | false | |
| verboseFTLFailure | false | |
| alwaysComputeHash | false | |
| testTheFTL | false | |
| verboseSanitizeStack | false | |
| useGenerationalGC | true | |
| useConcurrentBarriers | true | |
| useConcurrentGC | true | |
| collectContinuously | false | |
| collectContinuouslyPeriodMS | 1 | |
| forceFencedBarrier | false | |
| verboseVisitRace | false | |
| optimizeParallelSlotVisitorsForStoppedMutator | false | |
| largeHeapSize | 33554432 | |
| smallHeapSize | 1048576 | |
| smallHeapRAMFraction | 0.25 | |
| smallHeapGrowthFactor | 2 | |
| mediumHeapRAMFraction | 0.5 | |
| mediumHeapGrowthFactor | 1.5 | |
| largeHeapGrowthFactor | 1.24 | |
| miniVMHeapGrowthFactor | 1.27 | |
| criticalGCMemoryThreshold | 0.8 | percent memory in use the GC considers critical. The collector is much more aggressive above this threshold |
| minimumMutatorUtilization | 0 | |
| maximumMutatorUtilization | 0.7 | |
| epsilonMutatorUtilization | 0.01 | |
| concurrentGCMaxHeadroom | 1.5 | |
| concurrentGCPeriodMS | 2 | |
| useStochasticMutatorScheduler | true | |
| minimumGCPauseMS | 0.3 | |
| gcPauseScale | 0.3 | |
| gcIncrementBytes | 10000 | |
| gcIncrementMaxBytes | 100000 | |
| gcIncrementScale | 0 | |
| scribbleFreeCells | false | |
| sizeClassProgression | 1.4 | |
| largeAllocationCutoff | 100000 | |
| dumpSizeClasses | false | |
| useBumpAllocator | true | |
| stealEmptyBlocksFromOtherAllocators | true | |
| tradeDestructorBlocks | true | |
| eagerlyUpdateTopCallFrame | false | |
| useOSREntryToDFG | true | |
| useOSREntryToFTL | true | |
| useFTLJIT | true | allows the FTL JIT to be used if true |
| useFTLTBAA | true | |
| validateFTLOSRExitLiveness | false | |
| defaultB3OptLevel | 2 | |
| b3AlwaysFailsBeforeCompile | false | |
| b3AlwaysFailsBeforeLink | false | |
| ftlCrashes | false | |
| clobberAllRegsInFTLICSlowPath | false | |
| enableJITDebugAssertions | false | |
| useAccessInlining | true | |
| maxAccessVariantListSize | 8 | |
| usePolyvariantDevirtualization | true | |
| usePolymorphicAccessInlining | true | |
| usePolymorphicCallInlining | true | |
| usePolymorphicCallInliningForNonStubStatus | false | |
| maxPolymorphicCallVariantListSize | 15 | |
| maxPolymorphicCallVariantListSizeForTopTier | 5 | |
| maxPolymorphicCallVariantListSizeForWebAssemblyToJS | 5 | |
| maxPolymorphicCallVariantsForInlining | 5 | |
| frequentCallThreshold | 2 | |
| minimumCallToKnownRate | 0.51 | |
| createPreHeaders | true | |
| useMovHintRemoval | true | |
| usePutStackSinking | true | |
| useObjectAllocationSinking | true | |
| useArityFixupInlining | true | |
| logExecutableAllocation | false | |
| useConcurrentJIT | true | allows the DFG / FTL compilation in threads other than the executing JS thread |
| numberOfDFGCompilerThreads | 2 | |
| numberOfFTLCompilerThreads | 7 | |
| priorityDeltaOfDFGCompilerThreads | 0 | |
| priorityDeltaOfFTLCompilerThreads | 0 | |
| priorityDeltaOfWasmCompilerThreads | 0 | |
| useProfiler | false | |
| disassembleBaselineForProfiler | true | |
| useArchitectureSpecificOptimizations | true | |
| breakOnThrow | false | |
| maximumOptimizationCandidateInstructionCount | 100000 | |
| maximumFunctionForCallInlineCandidateInstructionCount | 190 | |
| maximumFunctionForClosureCallInlineCandidateInstructionCount | 100 | |
| maximumFunctionForConstructInlineCandidateInstructionCount | 100 | |
| maximumFTLCandidateInstructionCount | 20000 | |
| maximumInliningDepth | 5 | maximum allowed inlining depth. Depth of 1 means no inlining |
| maximumInliningRecursion | 2 | |
| maximumInliningCallerSize | 10000 | |
| maximumVarargsForInlining | 100 | |
| usePolyvariantCallInlining | true | |
| usePolyvariantByIdInlining | true | |
| useMaximalFlushInsertionPhase | false | Setting to true allows the DFG's MaximalFlushInsertionPhase to run. |
| maximumBinaryStringSwitchCaseLength | 50 | |
| maximumBinaryStringSwitchTotalLength | 2000 | |
| jitPolicyScale | 1 | scale JIT thresholds to this specified ratio between 0.0 (compile ASAP) and 1.0 (compile like normal). |
| forceEagerCompilation | false | |
| thresholdForJITAfterWarmUp | 500 | |
| thresholdForJITSoon | 100 | |
| thresholdForOptimizeAfterWarmUp | 1000 | |
| thresholdForOptimizeAfterLongWarmUp | 1000 | |
| thresholdForOptimizeSoon | 1000 | |
| executionCounterIncrementForLoop | 1 | |
| executionCounterIncrementForEntry | 15 | |
| thresholdForFTLOptimizeAfterWarmUp | 100000 | |
| thresholdForFTLOptimizeSoon | 1000 | |
| ftlTierUpCounterIncrementForLoop | 1 | |
| ftlTierUpCounterIncrementForReturn | 15 | |
| ftlOSREntryFailureCountForReoptimization | 15 | |
| ftlOSREntryRetryThreshold | 100 | |
| evalThresholdMultiplier | 10 | |
| maximumEvalCacheableSourceLength | 256 | |
| randomizeExecutionCountsBetweenCheckpoints | false | |
| maximumExecutionCountsBetweenCheckpointsForBaseline | 1000 | |
| maximumExecutionCountsBetweenCheckpointsForUpperTiers | 50000 | |
| likelyToTakeSlowCaseMinimumCount | 20 | |
| couldTakeSlowCaseMinimumCount | 10 | |
| osrExitCountForReoptimization | 100 | |
| osrExitCountForReoptimizationFromLoop | 5 | |
| reoptimizationRetryCounterMax | 21 | (default: 0) |
| minimumOptimizationDelay | 1 | |
| maximumOptimizationDelay | 5 | |
| desiredProfileLivenessRate | 0.75 | |
| desiredProfileFullnessRate | 0.35 | |
| doubleVoteRatioForDoubleFormat | 2 | |
| structureCheckVoteRatioForHoisting | 1 | |
| checkArrayVoteRatioForHoisting | 1 | |
| maximumDirectCallStackSize | 200 | |
| minimumNumberOfScansBetweenRebalance | 100 | |
| numberOfGCMarkers | 8 | |
| useParallelMarkingConstraintSolver | true | |
| opaqueRootMergeThreshold | 1000 | |
| minHeapUtilization | 0.8 | |
| minMarkedBlockUtilization | 0.9 | |
| slowPathAllocsBetweenGCs | 0 | force a GC on every Nth slow path alloc, where N is specified by this option |
| percentCPUPerMBForFullTimer | 0.0003125 | |
| percentCPUPerMBForEdenTimer | 0.0025 | |
| collectionTimerMaxPercentCPU | 0.05 | |
| forceWeakRandomSeed | false | |
| forcedWeakRandomSeed | 0 | |
| useZombieMode | false | debugging option to scribble over dead objects with 0xbadbeef0 |
| useImmortalObjects | false | debugging option to keep all objects alive forever |
| sweepSynchronously | false | debugging option to sweep all dead objects synchronously at GC end before resuming mutator |
| logGC | None | debugging option to log GC activity (0 = None, 1 = Basic, 2 = Verbose) |
| useGC | true | |
| gcAtEnd | false | If true, the jsc CLI will do a GC before exiting |
| forceGCSlowPaths | false | If true, we will force all JIT fast allocations down their slow paths. |
| gcMaxHeapSize | 0 | |
| forceRAMSize | 0 | |
| recordGCPauseTimes | false | |
| logHeapStatisticsAtExit | false | |
| forceCodeBlockToJettisonDueToOldAge | false | If true, this means that anytime we can jettison a CodeBlock due to old age, we do. |
| useEagerCodeBlockJettisonTiming | false | If true, the time slices for jettisoning a CodeBlock due to old age are shrunk significantly. |
| useTypeProfiler | false | |
| useControlFlowProfiler | false | |
| useSamplingProfiler | false | |
| sampleInterval | 1000 | Time between stack traces in microseconds. |
| collectSamplingProfilerDataForJSCShell | false | This corresponds to the JSC shell's --sample option. |
| samplingProfilerTopFunctionsCount | 12 | Number of top functions to report when using the command line interface. |
| samplingProfilerTopBytecodesCount | 40 | Number of top bytecodes to report when using the command line interface. |
| samplingProfilerPath | "" | The path to the directory to write sampiling profiler output to. This probably will not work with WK2 unless the path is in the whitelist. |
| sampleCCode | false | Causes the sampling profiler to record profiling data for C frames. |
| alwaysGeneratePCToCodeOriginMap | false | This will make sure we always generate a PCToCodeOriginMap for JITed code. |
| verifyHeap | false | |
| numberOfGCCyclesToRecordForVerification | 3 | |
| exceptionStackTraceLimit | 100 | Stack trace limit for internal Exception object |
| defaultErrorStackTraceLimit | 100 | The default value for Error.stackTraceLimit |
| useExceptionFuzz | false | |
| fireExceptionFuzzAt | 0 | |
| validateDFGExceptionHandling | false | Causes the DFG to emit code validating exception handling for each node that can exit |
| dumpSimulatedThrows | false | Dumps the call stack of the last simulated throw if exception scope verification fails |
| validateExceptionChecks | false | Verifies that needed exception checks are performed. |
| unexpectedExceptionStackTraceLimit | 100 | Stack trace limit for debugging unexpected exceptions observed in the VM |
| useExecutableAllocationFuzz | false | |
| fireExecutableAllocationFuzzAt | 0 | |
| fireExecutableAllocationFuzzAtOrAfter | 0 | |
| verboseExecutableAllocationFuzz | false | |
| useOSRExitFuzz | false | |
| fireOSRExitFuzzAtStatic | 0 | |
| fireOSRExitFuzzAt | 0 | |
| fireOSRExitFuzzAtOrAfter | 0 | |
| logPhaseTimes | false | |
| rareBlockPenalty | 0.001 | |
| airLinearScanVerbose | false | |
| airLinearScanSpillsEverything | false | |
| airForceBriggsAllocator | false | |
| airForceIRCAllocator | false | |
| airRandomizeRegs | false | |
| coalesceSpillSlots | true | |
| logAirRegisterPressure | false | |
| useB3TailDup | true | |
| maxB3TailDupBlockSize | 3 | |
| maxB3TailDupBlockSuccessors | 3 | |
| useDollarVM | false | installs the $vm debugging tool in global objects |
| functionOverrides | "" | file with debugging overrides for function bodies |
| useSigillCrashAnalyzer | false | logs data about SIGILL crashes |
| watchdog | 0 | watchdog timeout (0 = Disabled, N = a timeout period of N milliseconds) |
| usePollingTraps | false | use polling (instead of signalling) VM traps |
| useMachForExceptions | true | Use mach exceptions rather than signals to handle faults and pass thread messages. (This does nothing on platforms without mach) |
| useICStats | false | |
| prototypeHitCountForLLIntCaching | 2 | Number of prototype property hits before caching a prototype in the LLInt. A count of 0 means never cache. |
| dumpCompiledRegExpPatterns | false | |
| dumpModuleRecord | false | |
| dumpModuleLoadingState | false | |
| exposeInternalModuleLoader | false | expose the internal module loader object to the global space for debugging |
| useSuperSampler | false | |
| useSourceProviderCache | true | If false, the parser will not use the source provider cache. It's good to verify everything works when this is false. Because the cache is so successful, it can mask bugs. |
| useCodeCache | true | If false, the unlinked byte code cache will not be used. |
| useWebAssembly | true | Expose the WebAssembly global object. |
| enableSpectreMitigations | true | Enable Spectre mitigations. |
| enableSpectreGadgets | false | enable gadgets to test Spectre mitigations. |
| usePoisoning | true | Poison is randomized at load time when true, and initialized to 0 if false which defeats some Spectre and type confusion mitigations, but allows tools such as leak detectors to function better. |
| zeroStackFrame | false | Zero stack frame on entry to a function. |
| useAsyncIterator | true | Allow to use Async Iterator in JS. |
| failToCompileWebAssemblyCode | false | If true, no Wasm::Plan will sucessfully compile a function. |
| webAssemblyPartialCompileLimit | 5000 | Limit on the number of bytes a Wasm::Plan::compile should attempt before checking for other work. |
| webAssemblyBBQOptimizationLevel | 1 | B3 Optimization level for BBQ Web Assembly module compilations. |
| webAssemblyOMGOptimizationLevel | 2 | B3 Optimization level for OMG Web Assembly module compilations. |
| useBBQTierUpChecks | true | Enables tier up checks for our BBQ code. |
| webAssemblyOMGTierUpCount | 5000 | The countdown before we tier up a function to OMG. |
| webAssemblyLoopDecrement | 15 | The amount the tier up countdown is decremented on each loop backedge. |
| webAssemblyFunctionEntryDecrement | 1 | The amount the tier up countdown is decremented on each function entry. |
| useWebAssemblyFastMemory | true | If true, we will try to use a 32-bit address space with a signal handler to bounds check wasm memory. |
| logWebAssemblyMemory | false | |
| webAssemblyFastMemoryRedzonePages | 128 | WebAssembly fast memories use 4GiB virtual allocations, plus a redzone (counted as multiple of 64KiB WebAssembly pages) at the end to catch reg+imm accesses which exceed 32-bit, anything beyond the redzone is explicitly bounds-checked |
| crashIfWebAssemblyCantFastMemory | false | If true, we will crash if we can't obtain fast memory for wasm. |
| maxNumWebAssemblyFastMemories | 4 | |
| useFastTLSForWasmContext | true | If true, we will store context in fast TLS. If false, we will pin it to a register. |
| useWebAssemblyStreamingApi | false | Allow to run WebAssembly's Streaming API |
| useCallICsForWebAssemblyToJSCalls | true | If true, we will use CallLinkInfo to inline cache Wasm to JS calls. |
| useEagerWebAssemblyModuleHashing | false | Unnamed WebAssembly modules are identified in backtraces through their hash, if available. |
| useObjectRestSpread | true | If true, we will enable Object Rest/Spread feature. |
| useBigInt | false | If true, we will enable BigInt support. |
| useIntlNumberFormatToParts | false | If true, we will enable Intl.NumberFormat.prototype.formatToParts |
| useIntlPluralRules | false | If true, we will enable Intl.PluralRules. |
| useArrayAllocationProfiling | true | If true, we will use our normal array allocation profiling. If false, the allocation profile will always claim to be undecided. |
| forcePolyProto | false | If true, create_this will always create an object with a poly proto structure. |
| forceMiniVMMode | false | If true, it will force mini VM mode on. |
| useTracePoints | false |