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 #ifndef SHARE_VM_RUNTIME_GLOBALS_HPP
26 #define SHARE_VM_RUNTIME_GLOBALS_HPP
27
28 #include "utilities/debug.hpp"
29
30 // use this for flags that are true per default in the tiered build
31 // but false in non-tiered builds, and vice versa
32 #ifdef TIERED
33 #define trueInTiered true
34 #define falseInTiered false
35 #else
36 #define trueInTiered false
37 #define falseInTiered true
38 #endif
39
40 #ifdef TARGET_ARCH_x86
41 # include "globals_x86.hpp"
42 #endif
43 #ifdef TARGET_ARCH_sparc
44 # include "globals_sparc.hpp"
45 #endif
46 #ifdef TARGET_ARCH_zero
47 # include "globals_zero.hpp"
510 // but false in development builds, and vice versa
511 #ifdef PRODUCT
512 #define trueInProduct true
513 #define falseInProduct false
514 #else
515 #define trueInProduct false
516 #define falseInProduct true
517 #endif
518
519 #ifdef JAVASE_EMBEDDED
520 #define falseInEmbedded false
521 #else
522 #define falseInEmbedded true
523 #endif
524
525 // develop flags are settable / visible only during development and are constant in the PRODUCT version
526 // product flags are always settable / visible
527 // notproduct flags are settable / visible only during development and are not declared in the PRODUCT version
528
529 // A flag must be declared with one of the following types:
530 // bool, intx, uintx, size_t, ccstr, double, or uint64_t.
531 // The type "ccstr" is an alias for "const char*" and is used
532 // only in this file, because the macrology requires single-token type names.
533
534 // Note: Diagnostic options not meant for VM tuning or for product modes.
535 // They are to be used for VM quality assurance or field diagnosis
536 // of VM bugs. They are hidden so that users will not be encouraged to
537 // try them as if they were VM ordinary execution options. However, they
538 // are available in the product version of the VM. Under instruction
539 // from support engineers, VM customers can turn them on to collect
540 // diagnostic information about VM problems. To use a VM diagnostic
541 // option, you must first specify +UnlockDiagnosticVMOptions.
542 // (This master switch also affects the behavior of -Xprintflags.)
543 //
544 // experimental flags are in support of features that are not
545 // part of the officially supported product, but are available
546 // for experimenting with. They could, for example, be performance
547 // features that may not have undergone full or rigorous QA, but which may
548 // help performance in some cases and released for experimentation
549 // by the community of users and developers. This flag also allows one to
550 // be able to build a fully supported product that nonetheless also
683 "AdaptiveNUMAChunkSizing") \
684 range(0, 100) \
685 \
686 product(size_t, NUMASpaceResizeRate, 1*G, \
687 "Do not reallocate more than this amount per collection") \
688 \
689 product(bool, UseAdaptiveNUMAChunkSizing, true, \
690 "Enable adaptive chunk sizing for NUMA") \
691 \
692 product(bool, NUMAStats, false, \
693 "Print NUMA stats in detailed heap information") \
694 \
695 product(uintx, NUMAPageScanRate, 256, \
696 "Maximum number of pages to include in the page scan procedure") \
697 \
698 product_pd(bool, NeedsDeoptSuspend, \
699 "True for register window machines (sparc/ia64)") \
700 \
701 product(intx, UseSSE, 99, \
702 "Highest supported SSE instructions set on x86/x64") \
703 \
704 product(bool, UseAES, false, \
705 "Control whether AES instructions can be used on x86/x64") \
706 \
707 product(bool, UseSHA, false, \
708 "Control whether SHA instructions can be used " \
709 "on SPARC and on ARM") \
710 \
711 product(bool, UseGHASHIntrinsics, false, \
712 "Use intrinsics for GHASH versions of crypto") \
713 \
714 product(size_t, LargePageSizeInBytes, 0, \
715 "Large page size (0 to let VM choose the page size)") \
716 \
717 product(size_t, LargePageHeapSizeThreshold, 128*M, \
718 "Use large pages if maximum heap is at least this big") \
719 \
720 product(bool, ForceTimeHighResolution, false, \
721 "Using high time resolution (for Win32 only)") \
722 \
1231 product(bool, ConvertYieldToSleep, false, \
1232 "Convert yield to a sleep of MinSleepInterval to simulate Win32 " \
1233 "behavior") \
1234 \
1235 develop(bool, UseDetachedThreads, true, \
1236 "Use detached threads that are recycled upon termination " \
1237 "(for Solaris only)") \
1238 \
1239 product(bool, UseLWPSynchronization, true, \
1240 "Use LWP-based instead of libthread-based synchronization " \
1241 "(SPARC only)") \
1242 \
1243 experimental(ccstr, SyncKnobs, NULL, \
1244 "(Unstable) Various monitor synchronization tunables") \
1245 \
1246 experimental(intx, EmitSync, 0, \
1247 "(Unsafe, Unstable) " \
1248 "Control emission of inline sync fast-path code") \
1249 \
1250 product(intx, MonitorBound, 0, "Bound Monitor population") \
1251 \
1252 product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \
1253 \
1254 experimental(intx, SyncFlags, 0, "(Unsafe, Unstable) " \
1255 "Experimental Sync flags") \
1256 \
1257 experimental(intx, SyncVerbose, 0, "(Unstable)") \
1258 \
1259 diagnostic(bool, InlineNotify, true, "intrinsify subset of notify") \
1260 \
1261 experimental(intx, ClearFPUAtPark, 0, "(Unsafe, Unstable)") \
1262 \
1263 experimental(intx, hashCode, 5, \
1264 "(Unstable) select hashCode generation algorithm") \
1265 \
1266 experimental(intx, WorkAroundNPTLTimedWaitHang, 0, \
1267 "(Unstable, Linux-specific) " \
1268 "avoid NPTL-FUTEX hang pthread_cond_timedwait") \
1269 \
1270 product(bool, FilterSpuriousWakeups, true, \
2693 "Eagerly initialize classes if possible") \
2694 \
2695 diagnostic(bool, LogTouchedMethods, false, \
2696 "Log methods which have been ever touched in runtime") \
2697 \
2698 diagnostic(bool, PrintTouchedMethodsAtExit, false, \
2699 "Print all methods that have been ever touched in runtime") \
2700 \
2701 develop(bool, TraceMethodReplacement, false, \
2702 "Print when methods are replaced do to recompilation") \
2703 \
2704 develop(bool, PrintMethodFlushing, false, \
2705 "Print the nmethods being flushed") \
2706 \
2707 diagnostic(bool, PrintMethodFlushingStatistics, false, \
2708 "print statistics about method flushing") \
2709 \
2710 diagnostic(intx, HotMethodDetectionLimit, 100000, \
2711 "Number of compiled code invocations after which " \
2712 "the method is considered as hot by the flusher") \
2713 \
2714 diagnostic(intx, MinPassesBeforeFlush, 10, \
2715 "Minimum number of sweeper passes before an nmethod " \
2716 "can be flushed") \
2717 \
2718 product(bool, UseCodeAging, true, \
2719 "Insert counter to detect warm methods") \
2720 \
2721 diagnostic(bool, StressCodeAging, false, \
2722 "Start with counters compiled in") \
2723 \
2724 develop(bool, UseRelocIndex, false, \
2725 "Use an index to speed random access to relocations") \
2726 \
2727 develop(bool, StressCodeBuffers, false, \
2728 "Exercise code buffer expansion and other rare state changes") \
2729 \
2730 diagnostic(bool, DebugNonSafepoints, trueInDebug, \
2731 "Generate extra debugging information for non-safepoints in " \
2732 "nmethods") \
2851 "Trace queries of liveness analysis information") \
2852 \
2853 notproduct(bool, CollectIndexSetStatistics, false, \
2854 "Collect information about IndexSets") \
2855 \
2856 develop(bool, UseLoopSafepoints, true, \
2857 "Generate Safepoint nodes in every loop") \
2858 \
2859 develop(intx, FastAllocateSizeLimit, 128*K, \
2860 /* Note: This value is zero mod 1<<13 for a cheap sparc set. */ \
2861 "Inline allocations larger than this in doublewords must go slow")\
2862 \
2863 product(bool, AggressiveOpts, false, \
2864 "Enable aggressive optimizations - see arguments.cpp") \
2865 \
2866 product_pd(uintx, TypeProfileLevel, \
2867 "=XYZ, with Z: Type profiling of arguments at call; " \
2868 "Y: Type profiling of return value at call; " \
2869 "X: Type profiling of parameters to methods; " \
2870 "X, Y and Z in 0=off ; 1=jsr292 only; 2=all methods") \
2871 \
2872 product(intx, TypeProfileArgsLimit, 2, \
2873 "max number of call arguments to consider for type profiling") \
2874 \
2875 product(intx, TypeProfileParmsLimit, 2, \
2876 "max number of incoming parameters to consider for type profiling"\
2877 ", -1 for all") \
2878 \
2879 /* statistics */ \
2880 develop(bool, CountCompiledCalls, false, \
2881 "Count method invocations") \
2882 \
2883 notproduct(bool, CountRuntimeCalls, false, \
2884 "Count VM runtime calls") \
2885 \
2886 develop(bool, CountJNICalls, false, \
2887 "Count jni method invocations") \
2888 \
2889 notproduct(bool, CountJVMCalls, false, \
2890 "Count jvm method invocations") \
2891 \
2892 notproduct(bool, CountRemovableExceptions, false, \
2893 "Count exceptions that could be replaced by branches due to " \
2894 "inlining") \
2895 \
2896 notproduct(bool, ICMissHistogram, false, \
2897 "Produce histogram of IC misses") \
3016 \
3017 develop(intx, CounterHalfLifeTime, 30, \
3018 "Half-life time of invocation counters (in seconds)") \
3019 \
3020 develop(intx, CounterDecayMinIntervalLength, 500, \
3021 "The minimum interval (in milliseconds) between invocation of " \
3022 "CounterDecay") \
3023 \
3024 product(bool, AlwaysCompileLoopMethods, false, \
3025 "When using recompilation, never interpret methods " \
3026 "containing loops") \
3027 \
3028 product(bool, DontCompileHugeMethods, true, \
3029 "Do not compile methods > HugeMethodLimit") \
3030 \
3031 /* Bytecode escape analysis estimation. */ \
3032 product(bool, EstimateArgEscape, true, \
3033 "Analyze bytecodes to estimate escape state of arguments") \
3034 \
3035 product(intx, BCEATraceLevel, 0, \
3036 "How much tracing to do of bytecode escape analysis estimates") \
3037 \
3038 product(intx, MaxBCEAEstimateLevel, 5, \
3039 "Maximum number of nested calls that are analyzed by BC EA") \
3040 \
3041 product(intx, MaxBCEAEstimateSize, 150, \
3042 "Maximum bytecode size of a method to be analyzed by BC EA") \
3043 \
3044 product(intx, AllocatePrefetchStyle, 1, \
3045 "0 = no prefetch, " \
3046 "1 = prefetch instructions for each allocation, " \
3047 "2 = use TLAB watermark to gate allocation prefetch, " \
3048 "3 = use BIS instruction on Sparc for allocation prefetch") \
3049 range(0, 3) \
3050 \
3051 product(intx, AllocatePrefetchDistance, -1, \
3052 "Distance to prefetch ahead of allocation pointer") \
3053 \
3054 product(intx, AllocatePrefetchLines, 3, \
3055 "Number of lines to prefetch ahead of array allocation pointer") \
3056 \
3057 product(intx, AllocateInstancePrefetchLines, 1, \
3058 "Number of lines to prefetch ahead of instance allocation " \
3059 "pointer") \
3060 \
3061 product(intx, AllocatePrefetchStepSize, 16, \
3062 "Step size in bytes of sequential prefetch instructions") \
3063 \
3064 product(intx, AllocatePrefetchInstr, 0, \
3065 "Prefetch instruction to prefetch ahead of allocation pointer") \
3066 \
3067 /* deoptimization */ \
3068 develop(bool, TraceDeoptimization, false, \
3069 "Trace deoptimization") \
3070 \
3071 develop(bool, DebugDeoptimization, false, \
3072 "Tracing various information while debugging deoptimization") \
3073 \
3074 product(intx, SelfDestructTimer, 0, \
3075 "Will cause VM to terminate after a given time (in minutes) " \
3076 "(0 means off)") \
3077 \
3078 product(intx, MaxJavaStackTraceDepth, 1024, \
3079 "The maximum number of lines in the stack trace for Java " \
3080 "exceptions (0 means all)") \
3081 \
3082 NOT_EMBEDDED(diagnostic(intx, GuaranteedSafepointInterval, 1000, \
3083 "Guarantee a safepoint (at least) every so many milliseconds " \
3084 "(0 means none)")) \
3085 \
3112 \
3113 notproduct(size_t, HandleAllocationLimit, 1024, \
3114 "Threshold for HandleMark allocation when +TraceHandleAllocation "\
3115 "is used") \
3116 \
3117 develop(size_t, TotalHandleAllocationLimit, 1024, \
3118 "Threshold for total handle allocation when " \
3119 "+TraceHandleAllocation is used") \
3120 \
3121 develop(intx, StackPrintLimit, 100, \
3122 "number of stack frames to print in VM-level stack dump") \
3123 \
3124 notproduct(intx, MaxElementPrintSize, 256, \
3125 "maximum number of elements to print") \
3126 \
3127 notproduct(intx, MaxSubklassPrintSize, 4, \
3128 "maximum number of subklasses to print when printing klass") \
3129 \
3130 product(intx, MaxInlineLevel, 9, \
3131 "maximum number of nested calls that are inlined") \
3132 \
3133 product(intx, MaxRecursiveInlineLevel, 1, \
3134 "maximum number of nested recursive calls that are inlined") \
3135 \
3136 develop(intx, MaxForceInlineLevel, 100, \
3137 "maximum number of nested calls that are forced for inlining " \
3138 "(using CompileCommand or marked w/ @ForceInline)") \
3139 \
3140 product_pd(intx, InlineSmallCode, \
3141 "Only inline already compiled methods if their code size is " \
3142 "less than this") \
3143 \
3144 product(intx, MaxInlineSize, 35, \
3145 "The maximum bytecode size of a method to be inlined") \
3146 \
3147 product_pd(intx, FreqInlineSize, \
3148 "The maximum bytecode size of a frequent method to be inlined") \
3149 \
3150 product(intx, MaxTrivialSize, 6, \
3151 "The maximum bytecode size of a trivial method to be inlined") \
3152 \
3153 product(intx, MinInliningThreshold, 250, \
3154 "The minimum invocation count a method needs to have to be " \
3155 "inlined") \
3156 \
3157 develop(intx, MethodHistogramCutoff, 100, \
3158 "The cutoff value for method invocation histogram (+CountCalls)") \
3159 \
3160 develop(intx, ProfilerNumberOfInterpretedMethods, 25, \
3161 "Number of interpreted methods to show in profile") \
3162 \
3163 develop(intx, ProfilerNumberOfCompiledMethods, 25, \
3164 "Number of compiled methods to show in profile") \
3165 \
3166 develop(intx, ProfilerNumberOfStubMethods, 25, \
3167 "Number of stub methods to show in profile") \
3168 \
3169 develop(intx, ProfilerNumberOfRuntimeStubNodes, 25, \
3170 "Number of runtime stub nodes to show in profile") \
3171 \
3172 product(intx, ProfileIntervalsTicks, 100, \
3173 "Number of ticks between printing of interval profile " \
3174 "(+ProfileIntervals)") \
3175 \
3199 notproduct(intx, DeoptimizeALotInterval, 5, \
3200 "Number of exits until DeoptimizeALot kicks in") \
3201 \
3202 notproduct(intx, ZombieALotInterval, 5, \
3203 "Number of exits until ZombieALot kicks in") \
3204 \
3205 diagnostic(intx, MallocVerifyInterval, 0, \
3206 "If non-zero, verify C heap after every N calls to " \
3207 "malloc/realloc/free") \
3208 \
3209 diagnostic(intx, MallocVerifyStart, 0, \
3210 "If non-zero, start verifying C heap after Nth call to " \
3211 "malloc/realloc/free") \
3212 \
3213 diagnostic(uintx, MallocMaxTestWords, 0, \
3214 "If non-zero, maximum number of words that malloc/realloc can " \
3215 "allocate (for testing only)") \
3216 \
3217 product(intx, TypeProfileWidth, 2, \
3218 "Number of receiver types to record in call/cast profile") \
3219 \
3220 develop(intx, BciProfileWidth, 2, \
3221 "Number of return bci's to record in ret profile") \
3222 \
3223 product(intx, PerMethodRecompilationCutoff, 400, \
3224 "After recompiling N times, stay in the interpreter (-1=>'Inf')") \
3225 range(-1, max_intx) \
3226 \
3227 product(intx, PerBytecodeRecompilationCutoff, 200, \
3228 "Per-BCI limit on repeated recompilation (-1=>'Inf')") \
3229 range(-1, max_intx) \
3230 \
3231 product(intx, PerMethodTrapLimit, 100, \
3232 "Limit on traps (of one kind) in a method (includes inlines)") \
3233 \
3234 experimental(intx, PerMethodSpecTrapLimit, 5000, \
3235 "Limit on speculative traps (of one kind) in a method " \
3236 "(includes inlines)") \
3237 \
3238 product(intx, PerBytecodeTrapLimit, 4, \
3239 "Limit on traps (of one kind) at a particular BCI") \
3240 \
3241 experimental(intx, SpecTrapLimitExtraEntries, 3, \
3242 "Extra method data trap entries for speculation") \
3243 \
3244 develop(intx, InlineFrequencyRatio, 20, \
3245 "Ratio of call site execution to caller method invocation") \
3246 \
3247 develop_pd(intx, InlineFrequencyCount, \
3248 "Count of call site execution necessary to trigger frequent " \
3249 "inlining") \
3250 \
3251 develop(intx, InlineThrowCount, 50, \
3252 "Force inlining of interpreted methods that throw this often") \
3253 \
3254 develop(intx, InlineThrowMaxSize, 200, \
3255 "Force inlining of throwing methods smaller than this") \
3256 \
3257 develop(intx, ProfilerNodeSize, 1024, \
3258 "Size in K to allocate for the Profile Nodes of each thread") \
3259 \
3260 /* gc parameters */ \
3261 product(size_t, InitialHeapSize, 0, \
3262 "Initial heap size (in bytes); zero means use ergonomics") \
3263 \
3264 product(size_t, MaxHeapSize, ScaleForWordSize(96*M), \
3265 "Maximum heap size (in bytes)") \
3266 \
3267 product(size_t, OldSize, ScaleForWordSize(4*M), \
3268 "Initial tenured generation size (in bytes)") \
3269 \
3270 product(size_t, NewSize, ScaleForWordSize(1*M), \
3271 "Initial new generation size (in bytes)") \
3272 \
3273 product(size_t, MaxNewSize, max_uintx, \
3274 "Maximum new generation size (in bytes), max_uintx means set " \
3275 "ergonomically") \
3276 \
3277 product(size_t, PretenureSizeThreshold, 0, \
3278 "Maximum size in bytes of objects allocated in DefNew " \
3442 range(1, max_intx) \
3443 \
3444 product_pd(intx, StackRedPages, \
3445 "Number of red zone (unrecoverable overflows) pages") \
3446 range(1, max_intx) \
3447 \
3448 /* greater stack shadow pages can't generate instruction to bang stack */ \
3449 product_pd(intx, StackShadowPages, \
3450 "Number of shadow zone (for overflow checking) pages " \
3451 "this should exceed the depth of the VM and native call stack") \
3452 range(1, 50) \
3453 \
3454 product_pd(intx, ThreadStackSize, \
3455 "Thread Stack Size (in Kbytes)") \
3456 \
3457 product_pd(intx, VMThreadStackSize, \
3458 "Non-Java Thread Stack Size (in Kbytes)") \
3459 \
3460 product_pd(intx, CompilerThreadStackSize, \
3461 "Compiler Thread Stack Size (in Kbytes)") \
3462 \
3463 develop_pd(size_t, JVMInvokeMethodSlack, \
3464 "Stack space (bytes) required for JVM_InvokeMethod to complete") \
3465 \
3466 /* code cache parameters */ \
3467 /* ppc64/tiered compilation has large code-entry alignment. */ \
3468 develop(uintx, CodeCacheSegmentSize, 64 PPC64_ONLY(+64) NOT_PPC64(TIERED_ONLY(+64)),\
3469 "Code cache segment size (in bytes) - smallest unit of " \
3470 "allocation") \
3471 range(1, 1024) \
3472 \
3473 develop_pd(intx, CodeEntryAlignment, \
3474 "Code entry alignment for generated code (in bytes)") \
3475 \
3476 product_pd(intx, OptoLoopAlignment, \
3477 "Align inner loops to zero relative to this modulus") \
3478 \
3479 product_pd(uintx, InitialCodeCacheSize, \
3480 "Initial code cache size (in bytes)") \
3481 \
3482 develop_pd(uintx, CodeCacheMinimumUseSpace, \
3483 "Minimum code cache size (in bytes) required to start VM.") \
3484 \
3485 product(bool, SegmentedCodeCache, false, \
3486 "Use a segmented code cache") \
3487 \
3488 product_pd(uintx, ReservedCodeCacheSize, \
3489 "Reserved code cache size (in bytes) - maximum code cache size") \
3490 \
3491 product_pd(uintx, NonProfiledCodeHeapSize, \
3492 "Size of code heap with non-profiled methods (in bytes)") \
3493 \
3494 product_pd(uintx, ProfiledCodeHeapSize, \
3495 "Size of code heap with profiled methods (in bytes)") \
3496 \
3497 product_pd(uintx, NonNMethodCodeHeapSize, \
3498 "Size of code heap with non-nmethods (in bytes)") \
3499 \
3500 product_pd(uintx, CodeCacheExpansionSize, \
3501 "Code cache expansion size (in bytes)") \
3502 \
3503 develop_pd(uintx, CodeCacheMinBlockLength, \
3504 "Minimum number of segments in a code cache block") \
3505 range(1, 100) \
3506 \
3507 notproduct(bool, ExitOnFullCodeCache, false, \
3508 "Exit the VM if we fill the code cache") \
3509 \
3510 product(bool, UseCodeCacheFlushing, true, \
3511 "Remove cold/old nmethods from the code cache") \
3512 \
3513 product(uintx, StartAggressiveSweepingAt, 10, \
3514 "Start aggressive sweeping if X[%] of the code cache is free." \
3515 "Segmented code cache: X[%] of the non-profiled heap." \
3516 "Non-segmented code cache: X[%] of the total code cache") \
3517 range(0, 100) \
3518 \
3519 /* interpreter debugging */ \
3520 develop(intx, BinarySwitchThreshold, 5, \
3521 "Minimal number of lookupswitch entries for rewriting to binary " \
3611 " THREAD_PRIORITY_TIME_CRITICAL, as it may interfere with "\
3612 " system threads. On Linux thread priorities are ignored "\
3613 " because the OS does not support static priority in "\
3614 " SCHED_OTHER scheduling class which is the only choice for "\
3615 " non-root, non-realtime applications. "\
3616 "1 : Aggressive. "\
3617 " Java thread priorities map over to the entire range of "\
3618 " native thread priorities. Higher Java thread priorities map "\
3619 " to higher native thread priorities. This policy should be "\
3620 " used with care, as sometimes it can cause performance "\
3621 " degradation in the application and/or the entire system. On "\
3622 " Linux this policy requires root privilege.") \
3623 range(0, 1) \
3624 \
3625 product(bool, ThreadPriorityVerbose, false, \
3626 "Print priority changes") \
3627 \
3628 product(intx, CompilerThreadPriority, -1, \
3629 "The native priority at which compiler threads should run " \
3630 "(-1 means no change)") \
3631 \
3632 product(intx, VMThreadPriority, -1, \
3633 "The native priority at which the VM thread should run " \
3634 "(-1 means no change)") \
3635 \
3636 product(bool, CompilerThreadHintNoPreempt, true, \
3637 "(Solaris only) Give compiler threads an extra quanta") \
3638 \
3639 product(bool, VMThreadHintNoPreempt, false, \
3640 "(Solaris only) Give VM thread an extra quanta") \
3641 \
3642 product(intx, JavaPriority1_To_OSPriority, -1, \
3643 "Map Java priorities to OS priorities") \
3644 \
3645 product(intx, JavaPriority2_To_OSPriority, -1, \
3646 "Map Java priorities to OS priorities") \
3647 \
3648 product(intx, JavaPriority3_To_OSPriority, -1, \
3649 "Map Java priorities to OS priorities") \
3650 \
3683 "First class to consider when using +CompileTheWorld") \
3684 \
3685 notproduct(intx, CompileTheWorldStopAt, max_jint, \
3686 "Last class to consider when using +CompileTheWorld") \
3687 \
3688 develop(intx, NewCodeParameter, 0, \
3689 "Testing Only: Create a dedicated integer parameter before " \
3690 "putback") \
3691 \
3692 /* new oopmap storage allocation */ \
3693 develop(intx, MinOopMapAllocation, 8, \
3694 "Minimum number of OopMap entries in an OopMapSet") \
3695 \
3696 /* Background Compilation */ \
3697 develop(intx, LongCompileThreshold, 50, \
3698 "Used with +TraceLongCompiles") \
3699 \
3700 /* recompilation */ \
3701 product_pd(intx, CompileThreshold, \
3702 "number of interpreted method invocations before (re-)compiling") \
3703 \
3704 product(double, CompileThresholdScaling, 1.0, \
3705 "Factor to control when first compilation happens " \
3706 "(both with and without tiered compilation): " \
3707 "values greater than 1.0 delay counter overflow, " \
3708 "values between 0 and 1.0 rush counter overflow, " \
3709 "value of 1.0 leaves compilation thresholds unchanged " \
3710 "value of 0.0 is equivalent to -Xint. " \
3711 "" \
3712 "Flag can be set as per-method option. " \
3713 "If a value is specified for a method, compilation thresholds " \
3714 "for that method are scaled by both the value of the global flag "\
3715 "and the value of the per-method flag.") \
3716 \
3717 product(intx, Tier0InvokeNotifyFreqLog, 7, \
3718 "Interpreter (tier 0) invocation notification frequency") \
3719 \
3720 product(intx, Tier2InvokeNotifyFreqLog, 11, \
3721 "C1 without MDO (tier 2) invocation notification frequency") \
3722 \
3723 product(intx, Tier3InvokeNotifyFreqLog, 10, \
3724 "C1 with MDO profiling (tier 3) invocation notification " \
3725 "frequency") \
3726 \
3727 product(intx, Tier23InlineeNotifyFreqLog, 20, \
3728 "Inlinee invocation (tiers 2 and 3) notification frequency") \
3729 \
3730 product(intx, Tier0BackedgeNotifyFreqLog, 10, \
3731 "Interpreter (tier 0) invocation notification frequency") \
3732 \
3733 product(intx, Tier2BackedgeNotifyFreqLog, 14, \
3734 "C1 without MDO (tier 2) invocation notification frequency") \
3735 \
3736 product(intx, Tier3BackedgeNotifyFreqLog, 13, \
3737 "C1 with MDO profiling (tier 3) invocation notification " \
3738 "frequency") \
3739 \
3740 product(intx, Tier2CompileThreshold, 0, \
3741 "threshold at which tier 2 compilation is invoked") \
3742 \
3743 product(intx, Tier2BackEdgeThreshold, 0, \
3744 "Back edge threshold at which tier 2 compilation is invoked") \
3745 \
3746 product(intx, Tier3InvocationThreshold, 200, \
3747 "Compile if number of method invocations crosses this " \
3748 "threshold") \
3749 \
3750 product(intx, Tier3MinInvocationThreshold, 100, \
3751 "Minimum invocation to compile at tier 3") \
3752 \
3753 product(intx, Tier3CompileThreshold, 2000, \
3754 "Threshold at which tier 3 compilation is invoked (invocation " \
3755 "minimum must be satisfied") \
3756 \
3757 product(intx, Tier3BackEdgeThreshold, 60000, \
3758 "Back edge threshold at which tier 3 OSR compilation is invoked") \
3759 \
3760 product(intx, Tier4InvocationThreshold, 5000, \
3761 "Compile if number of method invocations crosses this " \
3762 "threshold") \
3763 \
3764 product(intx, Tier4MinInvocationThreshold, 600, \
3765 "Minimum invocation to compile at tier 4") \
3766 \
3767 product(intx, Tier4CompileThreshold, 15000, \
3768 "Threshold at which tier 4 compilation is invoked (invocation " \
3769 "minimum must be satisfied") \
3770 \
3771 product(intx, Tier4BackEdgeThreshold, 40000, \
3772 "Back edge threshold at which tier 4 OSR compilation is invoked") \
3773 \
3774 product(intx, Tier3DelayOn, 5, \
3775 "If C2 queue size grows over this amount per compiler thread " \
3776 "stop compiling at tier 3 and start compiling at tier 2") \
3777 \
3778 product(intx, Tier3DelayOff, 2, \
3779 "If C2 queue size is less than this amount per compiler thread " \
3780 "allow methods compiled at tier 2 transition to tier 3") \
3781 \
3782 product(intx, Tier3LoadFeedback, 5, \
3783 "Tier 3 thresholds will increase twofold when C1 queue size " \
3784 "reaches this amount per compiler thread") \
3785 \
3786 product(intx, Tier4LoadFeedback, 3, \
3787 "Tier 4 thresholds will increase twofold when C2 queue size " \
3788 "reaches this amount per compiler thread") \
3789 \
3790 product(intx, TieredCompileTaskTimeout, 50, \
3791 "Kill compile task if method was not used within " \
3792 "given timeout in milliseconds") \
3793 \
3794 product(intx, TieredStopAtLevel, 4, \
3795 "Stop at given compilation level") \
3796 \
3797 product(intx, Tier0ProfilingStartPercentage, 200, \
3798 "Start profiling in interpreter if the counters exceed tier 3 " \
3799 "thresholds by the specified percentage") \
3800 \
3801 product(uintx, IncreaseFirstTierCompileThresholdAt, 50, \
3802 "Increase the compile threshold for C1 compilation if the code " \
3803 "cache is filled by the specified percentage") \
3804 range(0, 99) \
3805 \
3806 product(intx, TieredRateUpdateMinTime, 1, \
3807 "Minimum rate sampling interval (in milliseconds)") \
3808 \
3809 product(intx, TieredRateUpdateMaxTime, 25, \
3810 "Maximum rate sampling interval (in milliseconds)") \
3811 \
3812 product_pd(bool, TieredCompilation, \
3813 "Enable tiered compilation") \
3814 \
3815 product(bool, PrintTieredEvents, false, \
3816 "Print tiered events notifications") \
3817 \
3818 product_pd(intx, OnStackReplacePercentage, \
3819 "NON_TIERED number of method invocations/branches (expressed as " \
3820 "% of CompileThreshold) before (re-)compiling OSR code") \
3821 \
3822 product(intx, InterpreterProfilePercentage, 33, \
3823 "NON_TIERED number of method invocations/branches (expressed as " \
3824 "% of CompileThreshold) before profiling in the interpreter") \
3825 range(0, 100) \
3826 \
3827 develop(intx, MaxRecompilationSearchLength, 10, \
3828 "The maximum number of frames to inspect when searching for " \
3829 "recompilee") \
3830 \
3831 develop(intx, MaxInterpretedSearchLength, 3, \
3832 "The maximum number of interpreted frames to skip when searching "\
3833 "for recompilee") \
3834 \
3835 develop(intx, DesiredMethodLimit, 8000, \
3836 "The desired maximum method size (in bytecodes) after inlining") \
3837 \
3838 develop(intx, HugeMethodLimit, 8000, \
3839 "Don't compile methods larger than this if " \
3840 "+DontCompileHugeMethods") \
|
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 #ifndef SHARE_VM_RUNTIME_GLOBALS_HPP
26 #define SHARE_VM_RUNTIME_GLOBALS_HPP
27
28 #include <float.h>
29 #include "utilities/debug.hpp"
30
31 // use this for flags that are true per default in the tiered build
32 // but false in non-tiered builds, and vice versa
33 #ifdef TIERED
34 #define trueInTiered true
35 #define falseInTiered false
36 #else
37 #define trueInTiered false
38 #define falseInTiered true
39 #endif
40
41 #ifdef TARGET_ARCH_x86
42 # include "globals_x86.hpp"
43 #endif
44 #ifdef TARGET_ARCH_sparc
45 # include "globals_sparc.hpp"
46 #endif
47 #ifdef TARGET_ARCH_zero
48 # include "globals_zero.hpp"
511 // but false in development builds, and vice versa
512 #ifdef PRODUCT
513 #define trueInProduct true
514 #define falseInProduct false
515 #else
516 #define trueInProduct false
517 #define falseInProduct true
518 #endif
519
520 #ifdef JAVASE_EMBEDDED
521 #define falseInEmbedded false
522 #else
523 #define falseInEmbedded true
524 #endif
525
526 // develop flags are settable / visible only during development and are constant in the PRODUCT version
527 // product flags are always settable / visible
528 // notproduct flags are settable / visible only during development and are not declared in the PRODUCT version
529
530 // A flag must be declared with one of the following types:
531 // bool, int, uint, intx, uintx, size_t, ccstr, double, or uint64_t.
532 // The type "ccstr" is an alias for "const char*" and is used
533 // only in this file, because the macrology requires single-token type names.
534
535 // Note: Diagnostic options not meant for VM tuning or for product modes.
536 // They are to be used for VM quality assurance or field diagnosis
537 // of VM bugs. They are hidden so that users will not be encouraged to
538 // try them as if they were VM ordinary execution options. However, they
539 // are available in the product version of the VM. Under instruction
540 // from support engineers, VM customers can turn them on to collect
541 // diagnostic information about VM problems. To use a VM diagnostic
542 // option, you must first specify +UnlockDiagnosticVMOptions.
543 // (This master switch also affects the behavior of -Xprintflags.)
544 //
545 // experimental flags are in support of features that are not
546 // part of the officially supported product, but are available
547 // for experimenting with. They could, for example, be performance
548 // features that may not have undergone full or rigorous QA, but which may
549 // help performance in some cases and released for experimentation
550 // by the community of users and developers. This flag also allows one to
551 // be able to build a fully supported product that nonetheless also
684 "AdaptiveNUMAChunkSizing") \
685 range(0, 100) \
686 \
687 product(size_t, NUMASpaceResizeRate, 1*G, \
688 "Do not reallocate more than this amount per collection") \
689 \
690 product(bool, UseAdaptiveNUMAChunkSizing, true, \
691 "Enable adaptive chunk sizing for NUMA") \
692 \
693 product(bool, NUMAStats, false, \
694 "Print NUMA stats in detailed heap information") \
695 \
696 product(uintx, NUMAPageScanRate, 256, \
697 "Maximum number of pages to include in the page scan procedure") \
698 \
699 product_pd(bool, NeedsDeoptSuspend, \
700 "True for register window machines (sparc/ia64)") \
701 \
702 product(intx, UseSSE, 99, \
703 "Highest supported SSE instructions set on x86/x64") \
704 range(0, 99) \
705 \
706 product(bool, UseAES, false, \
707 "Control whether AES instructions can be used on x86/x64") \
708 \
709 product(bool, UseSHA, false, \
710 "Control whether SHA instructions can be used " \
711 "on SPARC and on ARM") \
712 \
713 product(bool, UseGHASHIntrinsics, false, \
714 "Use intrinsics for GHASH versions of crypto") \
715 \
716 product(size_t, LargePageSizeInBytes, 0, \
717 "Large page size (0 to let VM choose the page size)") \
718 \
719 product(size_t, LargePageHeapSizeThreshold, 128*M, \
720 "Use large pages if maximum heap is at least this big") \
721 \
722 product(bool, ForceTimeHighResolution, false, \
723 "Using high time resolution (for Win32 only)") \
724 \
1233 product(bool, ConvertYieldToSleep, false, \
1234 "Convert yield to a sleep of MinSleepInterval to simulate Win32 " \
1235 "behavior") \
1236 \
1237 develop(bool, UseDetachedThreads, true, \
1238 "Use detached threads that are recycled upon termination " \
1239 "(for Solaris only)") \
1240 \
1241 product(bool, UseLWPSynchronization, true, \
1242 "Use LWP-based instead of libthread-based synchronization " \
1243 "(SPARC only)") \
1244 \
1245 experimental(ccstr, SyncKnobs, NULL, \
1246 "(Unstable) Various monitor synchronization tunables") \
1247 \
1248 experimental(intx, EmitSync, 0, \
1249 "(Unsafe, Unstable) " \
1250 "Control emission of inline sync fast-path code") \
1251 \
1252 product(intx, MonitorBound, 0, "Bound Monitor population") \
1253 range(0, max_jint) \
1254 \
1255 product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \
1256 \
1257 experimental(intx, SyncFlags, 0, "(Unsafe, Unstable) " \
1258 "Experimental Sync flags") \
1259 \
1260 experimental(intx, SyncVerbose, 0, "(Unstable)") \
1261 \
1262 diagnostic(bool, InlineNotify, true, "intrinsify subset of notify") \
1263 \
1264 experimental(intx, ClearFPUAtPark, 0, "(Unsafe, Unstable)") \
1265 \
1266 experimental(intx, hashCode, 5, \
1267 "(Unstable) select hashCode generation algorithm") \
1268 \
1269 experimental(intx, WorkAroundNPTLTimedWaitHang, 0, \
1270 "(Unstable, Linux-specific) " \
1271 "avoid NPTL-FUTEX hang pthread_cond_timedwait") \
1272 \
1273 product(bool, FilterSpuriousWakeups, true, \
2696 "Eagerly initialize classes if possible") \
2697 \
2698 diagnostic(bool, LogTouchedMethods, false, \
2699 "Log methods which have been ever touched in runtime") \
2700 \
2701 diagnostic(bool, PrintTouchedMethodsAtExit, false, \
2702 "Print all methods that have been ever touched in runtime") \
2703 \
2704 develop(bool, TraceMethodReplacement, false, \
2705 "Print when methods are replaced do to recompilation") \
2706 \
2707 develop(bool, PrintMethodFlushing, false, \
2708 "Print the nmethods being flushed") \
2709 \
2710 diagnostic(bool, PrintMethodFlushingStatistics, false, \
2711 "print statistics about method flushing") \
2712 \
2713 diagnostic(intx, HotMethodDetectionLimit, 100000, \
2714 "Number of compiled code invocations after which " \
2715 "the method is considered as hot by the flusher") \
2716 range(1, max_jint) \
2717 \
2718 diagnostic(intx, MinPassesBeforeFlush, 10, \
2719 "Minimum number of sweeper passes before an nmethod " \
2720 "can be flushed") \
2721 \
2722 product(bool, UseCodeAging, true, \
2723 "Insert counter to detect warm methods") \
2724 \
2725 diagnostic(bool, StressCodeAging, false, \
2726 "Start with counters compiled in") \
2727 \
2728 develop(bool, UseRelocIndex, false, \
2729 "Use an index to speed random access to relocations") \
2730 \
2731 develop(bool, StressCodeBuffers, false, \
2732 "Exercise code buffer expansion and other rare state changes") \
2733 \
2734 diagnostic(bool, DebugNonSafepoints, trueInDebug, \
2735 "Generate extra debugging information for non-safepoints in " \
2736 "nmethods") \
2855 "Trace queries of liveness analysis information") \
2856 \
2857 notproduct(bool, CollectIndexSetStatistics, false, \
2858 "Collect information about IndexSets") \
2859 \
2860 develop(bool, UseLoopSafepoints, true, \
2861 "Generate Safepoint nodes in every loop") \
2862 \
2863 develop(intx, FastAllocateSizeLimit, 128*K, \
2864 /* Note: This value is zero mod 1<<13 for a cheap sparc set. */ \
2865 "Inline allocations larger than this in doublewords must go slow")\
2866 \
2867 product(bool, AggressiveOpts, false, \
2868 "Enable aggressive optimizations - see arguments.cpp") \
2869 \
2870 product_pd(uintx, TypeProfileLevel, \
2871 "=XYZ, with Z: Type profiling of arguments at call; " \
2872 "Y: Type profiling of return value at call; " \
2873 "X: Type profiling of parameters to methods; " \
2874 "X, Y and Z in 0=off ; 1=jsr292 only; 2=all methods") \
2875 constraint(TypeProfileLevelConstraintFunc, AfterErgo) \
2876 \
2877 product(intx, TypeProfileArgsLimit, 2, \
2878 "max number of call arguments to consider for type profiling") \
2879 range(0, 16) \
2880 \
2881 product(intx, TypeProfileParmsLimit, 2, \
2882 "max number of incoming parameters to consider for type profiling"\
2883 ", -1 for all") \
2884 range(-1, 64) \
2885 \
2886 /* statistics */ \
2887 develop(bool, CountCompiledCalls, false, \
2888 "Count method invocations") \
2889 \
2890 notproduct(bool, CountRuntimeCalls, false, \
2891 "Count VM runtime calls") \
2892 \
2893 develop(bool, CountJNICalls, false, \
2894 "Count jni method invocations") \
2895 \
2896 notproduct(bool, CountJVMCalls, false, \
2897 "Count jvm method invocations") \
2898 \
2899 notproduct(bool, CountRemovableExceptions, false, \
2900 "Count exceptions that could be replaced by branches due to " \
2901 "inlining") \
2902 \
2903 notproduct(bool, ICMissHistogram, false, \
2904 "Produce histogram of IC misses") \
3023 \
3024 develop(intx, CounterHalfLifeTime, 30, \
3025 "Half-life time of invocation counters (in seconds)") \
3026 \
3027 develop(intx, CounterDecayMinIntervalLength, 500, \
3028 "The minimum interval (in milliseconds) between invocation of " \
3029 "CounterDecay") \
3030 \
3031 product(bool, AlwaysCompileLoopMethods, false, \
3032 "When using recompilation, never interpret methods " \
3033 "containing loops") \
3034 \
3035 product(bool, DontCompileHugeMethods, true, \
3036 "Do not compile methods > HugeMethodLimit") \
3037 \
3038 /* Bytecode escape analysis estimation. */ \
3039 product(bool, EstimateArgEscape, true, \
3040 "Analyze bytecodes to estimate escape state of arguments") \
3041 \
3042 product(intx, BCEATraceLevel, 0, \
3043 "How much tracing to do of bytecode escape analysis estimates " \
3044 "(0-3)") \
3045 range(0, 3) \
3046 \
3047 product(intx, MaxBCEAEstimateLevel, 5, \
3048 "Maximum number of nested calls that are analyzed by BC EA") \
3049 range(0, max_jint) \
3050 \
3051 product(intx, MaxBCEAEstimateSize, 150, \
3052 "Maximum bytecode size of a method to be analyzed by BC EA") \
3053 range(0, max_jint) \
3054 \
3055 product(intx, AllocatePrefetchStyle, 1, \
3056 "0 = no prefetch, " \
3057 "1 = prefetch instructions for each allocation, " \
3058 "2 = use TLAB watermark to gate allocation prefetch, " \
3059 "3 = use BIS instruction on Sparc for allocation prefetch") \
3060 range(0, 3) \
3061 \
3062 product(intx, AllocatePrefetchDistance, -1, \
3063 "Distance to prefetch ahead of allocation pointer. " \
3064 "-1: use system-specific value (automatically determined") \
3065 constraint(AllocatePrefetchDistanceConstraintFunc, AfterMemoryInit)\
3066 \
3067 product(intx, AllocatePrefetchLines, 3, \
3068 "Number of lines to prefetch ahead of array allocation pointer") \
3069 range(1, max_jint / 2) \
3070 \
3071 product(intx, AllocateInstancePrefetchLines, 1, \
3072 "Number of lines to prefetch ahead of instance allocation " \
3073 "pointer") \
3074 range(1, max_jint / 2) \
3075 \
3076 product(intx, AllocatePrefetchStepSize, 16, \
3077 "Step size in bytes of sequential prefetch instructions") \
3078 constraint(AllocatePrefetchStepSizeConstraintFunc,AfterMemoryInit)\
3079 \
3080 product(intx, AllocatePrefetchInstr, 0, \
3081 "Prefetch instruction to prefetch ahead of allocation pointer") \
3082 constraint(AllocatePrefetchInstrConstraintFunc, AfterErgo) \
3083 \
3084 /* deoptimization */ \
3085 develop(bool, TraceDeoptimization, false, \
3086 "Trace deoptimization") \
3087 \
3088 develop(bool, DebugDeoptimization, false, \
3089 "Tracing various information while debugging deoptimization") \
3090 \
3091 product(intx, SelfDestructTimer, 0, \
3092 "Will cause VM to terminate after a given time (in minutes) " \
3093 "(0 means off)") \
3094 \
3095 product(intx, MaxJavaStackTraceDepth, 1024, \
3096 "The maximum number of lines in the stack trace for Java " \
3097 "exceptions (0 means all)") \
3098 \
3099 NOT_EMBEDDED(diagnostic(intx, GuaranteedSafepointInterval, 1000, \
3100 "Guarantee a safepoint (at least) every so many milliseconds " \
3101 "(0 means none)")) \
3102 \
3129 \
3130 notproduct(size_t, HandleAllocationLimit, 1024, \
3131 "Threshold for HandleMark allocation when +TraceHandleAllocation "\
3132 "is used") \
3133 \
3134 develop(size_t, TotalHandleAllocationLimit, 1024, \
3135 "Threshold for total handle allocation when " \
3136 "+TraceHandleAllocation is used") \
3137 \
3138 develop(intx, StackPrintLimit, 100, \
3139 "number of stack frames to print in VM-level stack dump") \
3140 \
3141 notproduct(intx, MaxElementPrintSize, 256, \
3142 "maximum number of elements to print") \
3143 \
3144 notproduct(intx, MaxSubklassPrintSize, 4, \
3145 "maximum number of subklasses to print when printing klass") \
3146 \
3147 product(intx, MaxInlineLevel, 9, \
3148 "maximum number of nested calls that are inlined") \
3149 range(0, max_jint) \
3150 \
3151 product(intx, MaxRecursiveInlineLevel, 1, \
3152 "maximum number of nested recursive calls that are inlined") \
3153 range(0, max_jint) \
3154 \
3155 develop(intx, MaxForceInlineLevel, 100, \
3156 "maximum number of nested calls that are forced for inlining " \
3157 "(using CompileCommand or marked w/ @ForceInline)") \
3158 range(0, max_jint) \
3159 \
3160 product_pd(intx, InlineSmallCode, \
3161 "Only inline already compiled methods if their code size is " \
3162 "less than this") \
3163 range(0, max_jint) \
3164 \
3165 product(intx, MaxInlineSize, 35, \
3166 "The maximum bytecode size of a method to be inlined") \
3167 range(0, max_jint) \
3168 \
3169 product_pd(intx, FreqInlineSize, \
3170 "The maximum bytecode size of a frequent method to be inlined") \
3171 range(0, max_jint) \
3172 \
3173 product(intx, MaxTrivialSize, 6, \
3174 "The maximum bytecode size of a trivial method to be inlined") \
3175 range(0, max_jint) \
3176 \
3177 product(intx, MinInliningThreshold, 250, \
3178 "The minimum invocation count a method needs to have to be " \
3179 "inlined") \
3180 range(0, max_jint) \
3181 \
3182 develop(intx, MethodHistogramCutoff, 100, \
3183 "The cutoff value for method invocation histogram (+CountCalls)") \
3184 \
3185 develop(intx, ProfilerNumberOfInterpretedMethods, 25, \
3186 "Number of interpreted methods to show in profile") \
3187 \
3188 develop(intx, ProfilerNumberOfCompiledMethods, 25, \
3189 "Number of compiled methods to show in profile") \
3190 \
3191 develop(intx, ProfilerNumberOfStubMethods, 25, \
3192 "Number of stub methods to show in profile") \
3193 \
3194 develop(intx, ProfilerNumberOfRuntimeStubNodes, 25, \
3195 "Number of runtime stub nodes to show in profile") \
3196 \
3197 product(intx, ProfileIntervalsTicks, 100, \
3198 "Number of ticks between printing of interval profile " \
3199 "(+ProfileIntervals)") \
3200 \
3224 notproduct(intx, DeoptimizeALotInterval, 5, \
3225 "Number of exits until DeoptimizeALot kicks in") \
3226 \
3227 notproduct(intx, ZombieALotInterval, 5, \
3228 "Number of exits until ZombieALot kicks in") \
3229 \
3230 diagnostic(intx, MallocVerifyInterval, 0, \
3231 "If non-zero, verify C heap after every N calls to " \
3232 "malloc/realloc/free") \
3233 \
3234 diagnostic(intx, MallocVerifyStart, 0, \
3235 "If non-zero, start verifying C heap after Nth call to " \
3236 "malloc/realloc/free") \
3237 \
3238 diagnostic(uintx, MallocMaxTestWords, 0, \
3239 "If non-zero, maximum number of words that malloc/realloc can " \
3240 "allocate (for testing only)") \
3241 \
3242 product(intx, TypeProfileWidth, 2, \
3243 "Number of receiver types to record in call/cast profile") \
3244 range(0, 4) \
3245 \
3246 develop(intx, BciProfileWidth, 2, \
3247 "Number of return bci's to record in ret profile") \
3248 \
3249 product(intx, PerMethodRecompilationCutoff, 400, \
3250 "After recompiling N times, stay in the interpreter (-1=>'Inf')") \
3251 range(-1, max_intx) \
3252 \
3253 product(intx, PerBytecodeRecompilationCutoff, 200, \
3254 "Per-BCI limit on repeated recompilation (-1=>'Inf')") \
3255 range(-1, max_intx) \
3256 \
3257 product(intx, PerMethodTrapLimit, 100, \
3258 "Limit on traps (of one kind) in a method (includes inlines)") \
3259 range(0, max_jint) \
3260 \
3261 experimental(intx, PerMethodSpecTrapLimit, 5000, \
3262 "Limit on speculative traps (of one kind) in a method " \
3263 "(includes inlines)") \
3264 range(0, max_jint) \
3265 \
3266 product(intx, PerBytecodeTrapLimit, 4, \
3267 "Limit on traps (of one kind) at a particular BCI") \
3268 range(0, max_jint) \
3269 \
3270 experimental(intx, SpecTrapLimitExtraEntries, 3, \
3271 "Extra method data trap entries for speculation") \
3272 \
3273 develop(intx, InlineFrequencyRatio, 20, \
3274 "Ratio of call site execution to caller method invocation") \
3275 range(0, max_jint) \
3276 \
3277 develop_pd(intx, InlineFrequencyCount, \
3278 "Count of call site execution necessary to trigger frequent " \
3279 "inlining") \
3280 range(0, max_jint) \
3281 \
3282 develop(intx, InlineThrowCount, 50, \
3283 "Force inlining of interpreted methods that throw this often") \
3284 range(0, max_jint) \
3285 \
3286 develop(intx, InlineThrowMaxSize, 200, \
3287 "Force inlining of throwing methods smaller than this") \
3288 range(0, max_jint) \
3289 \
3290 develop(intx, ProfilerNodeSize, 1024, \
3291 "Size in K to allocate for the Profile Nodes of each thread") \
3292 range(0, 1024) \
3293 \
3294 /* gc parameters */ \
3295 product(size_t, InitialHeapSize, 0, \
3296 "Initial heap size (in bytes); zero means use ergonomics") \
3297 \
3298 product(size_t, MaxHeapSize, ScaleForWordSize(96*M), \
3299 "Maximum heap size (in bytes)") \
3300 \
3301 product(size_t, OldSize, ScaleForWordSize(4*M), \
3302 "Initial tenured generation size (in bytes)") \
3303 \
3304 product(size_t, NewSize, ScaleForWordSize(1*M), \
3305 "Initial new generation size (in bytes)") \
3306 \
3307 product(size_t, MaxNewSize, max_uintx, \
3308 "Maximum new generation size (in bytes), max_uintx means set " \
3309 "ergonomically") \
3310 \
3311 product(size_t, PretenureSizeThreshold, 0, \
3312 "Maximum size in bytes of objects allocated in DefNew " \
3476 range(1, max_intx) \
3477 \
3478 product_pd(intx, StackRedPages, \
3479 "Number of red zone (unrecoverable overflows) pages") \
3480 range(1, max_intx) \
3481 \
3482 /* greater stack shadow pages can't generate instruction to bang stack */ \
3483 product_pd(intx, StackShadowPages, \
3484 "Number of shadow zone (for overflow checking) pages " \
3485 "this should exceed the depth of the VM and native call stack") \
3486 range(1, 50) \
3487 \
3488 product_pd(intx, ThreadStackSize, \
3489 "Thread Stack Size (in Kbytes)") \
3490 \
3491 product_pd(intx, VMThreadStackSize, \
3492 "Non-Java Thread Stack Size (in Kbytes)") \
3493 \
3494 product_pd(intx, CompilerThreadStackSize, \
3495 "Compiler Thread Stack Size (in Kbytes)") \
3496 range(0, max_intx) \
3497 \
3498 develop_pd(size_t, JVMInvokeMethodSlack, \
3499 "Stack space (bytes) required for JVM_InvokeMethod to complete") \
3500 \
3501 /* code cache parameters */ \
3502 /* ppc64/tiered compilation has large code-entry alignment. */ \
3503 develop(uintx, CodeCacheSegmentSize, 64 PPC64_ONLY(+64) NOT_PPC64(TIERED_ONLY(+64)),\
3504 "Code cache segment size (in bytes) - smallest unit of " \
3505 "allocation") \
3506 range(1, 1024) \
3507 constraint(CodeCacheSegmentSizeConstraintFunc, AfterErgo) \
3508 \
3509 develop_pd(intx, CodeEntryAlignment, \
3510 "Code entry alignment for generated code (in bytes)") \
3511 constraint(CodeEntryAlignmentConstraintFunc, AfterErgo) \
3512 \
3513 product_pd(intx, OptoLoopAlignment, \
3514 "Align inner loops to zero relative to this modulus") \
3515 constraint(OptoLoopAlignmentConstraintFunc, AfterErgo) \
3516 \
3517 product_pd(uintx, InitialCodeCacheSize, \
3518 "Initial code cache size (in bytes)") \
3519 range(0, max_uintx) \
3520 \
3521 develop_pd(uintx, CodeCacheMinimumUseSpace, \
3522 "Minimum code cache size (in bytes) required to start VM.") \
3523 range(0, max_uintx) \
3524 \
3525 product(bool, SegmentedCodeCache, false, \
3526 "Use a segmented code cache") \
3527 \
3528 product_pd(uintx, ReservedCodeCacheSize, \
3529 "Reserved code cache size (in bytes) - maximum code cache size") \
3530 range(0, max_uintx) \
3531 \
3532 product_pd(uintx, NonProfiledCodeHeapSize, \
3533 "Size of code heap with non-profiled methods (in bytes)") \
3534 range(0, max_uintx) \
3535 \
3536 product_pd(uintx, ProfiledCodeHeapSize, \
3537 "Size of code heap with profiled methods (in bytes)") \
3538 range(0, max_uintx) \
3539 \
3540 product_pd(uintx, NonNMethodCodeHeapSize, \
3541 "Size of code heap with non-nmethods (in bytes)") \
3542 range(0, max_uintx) \
3543 \
3544 product_pd(uintx, CodeCacheExpansionSize, \
3545 "Code cache expansion size (in bytes)") \
3546 range(0, max_uintx) \
3547 \
3548 develop_pd(uintx, CodeCacheMinBlockLength, \
3549 "Minimum number of segments in a code cache block") \
3550 range(1, 100) \
3551 \
3552 notproduct(bool, ExitOnFullCodeCache, false, \
3553 "Exit the VM if we fill the code cache") \
3554 \
3555 product(bool, UseCodeCacheFlushing, true, \
3556 "Remove cold/old nmethods from the code cache") \
3557 \
3558 product(uintx, StartAggressiveSweepingAt, 10, \
3559 "Start aggressive sweeping if X[%] of the code cache is free." \
3560 "Segmented code cache: X[%] of the non-profiled heap." \
3561 "Non-segmented code cache: X[%] of the total code cache") \
3562 range(0, 100) \
3563 \
3564 /* interpreter debugging */ \
3565 develop(intx, BinarySwitchThreshold, 5, \
3566 "Minimal number of lookupswitch entries for rewriting to binary " \
3656 " THREAD_PRIORITY_TIME_CRITICAL, as it may interfere with "\
3657 " system threads. On Linux thread priorities are ignored "\
3658 " because the OS does not support static priority in "\
3659 " SCHED_OTHER scheduling class which is the only choice for "\
3660 " non-root, non-realtime applications. "\
3661 "1 : Aggressive. "\
3662 " Java thread priorities map over to the entire range of "\
3663 " native thread priorities. Higher Java thread priorities map "\
3664 " to higher native thread priorities. This policy should be "\
3665 " used with care, as sometimes it can cause performance "\
3666 " degradation in the application and/or the entire system. On "\
3667 " Linux this policy requires root privilege.") \
3668 range(0, 1) \
3669 \
3670 product(bool, ThreadPriorityVerbose, false, \
3671 "Print priority changes") \
3672 \
3673 product(intx, CompilerThreadPriority, -1, \
3674 "The native priority at which compiler threads should run " \
3675 "(-1 means no change)") \
3676 constraint(CompilerThreadPriorityConstraintFunc, AfterErgo) \
3677 \
3678 product(intx, VMThreadPriority, -1, \
3679 "The native priority at which the VM thread should run " \
3680 "(-1 means no change)") \
3681 \
3682 product(bool, CompilerThreadHintNoPreempt, true, \
3683 "(Solaris only) Give compiler threads an extra quanta") \
3684 \
3685 product(bool, VMThreadHintNoPreempt, false, \
3686 "(Solaris only) Give VM thread an extra quanta") \
3687 \
3688 product(intx, JavaPriority1_To_OSPriority, -1, \
3689 "Map Java priorities to OS priorities") \
3690 \
3691 product(intx, JavaPriority2_To_OSPriority, -1, \
3692 "Map Java priorities to OS priorities") \
3693 \
3694 product(intx, JavaPriority3_To_OSPriority, -1, \
3695 "Map Java priorities to OS priorities") \
3696 \
3729 "First class to consider when using +CompileTheWorld") \
3730 \
3731 notproduct(intx, CompileTheWorldStopAt, max_jint, \
3732 "Last class to consider when using +CompileTheWorld") \
3733 \
3734 develop(intx, NewCodeParameter, 0, \
3735 "Testing Only: Create a dedicated integer parameter before " \
3736 "putback") \
3737 \
3738 /* new oopmap storage allocation */ \
3739 develop(intx, MinOopMapAllocation, 8, \
3740 "Minimum number of OopMap entries in an OopMapSet") \
3741 \
3742 /* Background Compilation */ \
3743 develop(intx, LongCompileThreshold, 50, \
3744 "Used with +TraceLongCompiles") \
3745 \
3746 /* recompilation */ \
3747 product_pd(intx, CompileThreshold, \
3748 "number of interpreted method invocations before (re-)compiling") \
3749 constraint(CompileThresholdConstraintFunc, AfterErgo) \
3750 \
3751 product(double, CompileThresholdScaling, 1.0, \
3752 "Factor to control when first compilation happens " \
3753 "(both with and without tiered compilation): " \
3754 "values greater than 1.0 delay counter overflow, " \
3755 "values between 0 and 1.0 rush counter overflow, " \
3756 "value of 1.0 leaves compilation thresholds unchanged " \
3757 "value of 0.0 is equivalent to -Xint. " \
3758 "" \
3759 "Flag can be set as per-method option. " \
3760 "If a value is specified for a method, compilation thresholds " \
3761 "for that method are scaled by both the value of the global flag "\
3762 "and the value of the per-method flag.") \
3763 range(0.0, DBL_MAX) \
3764 \
3765 product(intx, Tier0InvokeNotifyFreqLog, 7, \
3766 "Interpreter (tier 0) invocation notification frequency") \
3767 range(0, 30) \
3768 \
3769 product(intx, Tier2InvokeNotifyFreqLog, 11, \
3770 "C1 without MDO (tier 2) invocation notification frequency") \
3771 range(0, 30) \
3772 \
3773 product(intx, Tier3InvokeNotifyFreqLog, 10, \
3774 "C1 with MDO profiling (tier 3) invocation notification " \
3775 "frequency") \
3776 range(0, 30) \
3777 \
3778 product(intx, Tier23InlineeNotifyFreqLog, 20, \
3779 "Inlinee invocation (tiers 2 and 3) notification frequency") \
3780 range(0, 30) \
3781 \
3782 product(intx, Tier0BackedgeNotifyFreqLog, 10, \
3783 "Interpreter (tier 0) invocation notification frequency") \
3784 range(0, 30) \
3785 \
3786 product(intx, Tier2BackedgeNotifyFreqLog, 14, \
3787 "C1 without MDO (tier 2) invocation notification frequency") \
3788 range(0, 30) \
3789 \
3790 product(intx, Tier3BackedgeNotifyFreqLog, 13, \
3791 "C1 with MDO profiling (tier 3) invocation notification " \
3792 "frequency") \
3793 range(0, 30) \
3794 \
3795 product(intx, Tier2CompileThreshold, 0, \
3796 "threshold at which tier 2 compilation is invoked") \
3797 range(0, max_jint) \
3798 \
3799 product(intx, Tier2BackEdgeThreshold, 0, \
3800 "Back edge threshold at which tier 2 compilation is invoked") \
3801 range(0, max_jint) \
3802 \
3803 product(intx, Tier3InvocationThreshold, 200, \
3804 "Compile if number of method invocations crosses this " \
3805 "threshold") \
3806 range(0, max_jint) \
3807 \
3808 product(intx, Tier3MinInvocationThreshold, 100, \
3809 "Minimum invocation to compile at tier 3") \
3810 range(0, max_jint) \
3811 \
3812 product(intx, Tier3CompileThreshold, 2000, \
3813 "Threshold at which tier 3 compilation is invoked (invocation " \
3814 "minimum must be satisfied") \
3815 range(0, max_jint) \
3816 \
3817 product(intx, Tier3BackEdgeThreshold, 60000, \
3818 "Back edge threshold at which tier 3 OSR compilation is invoked") \
3819 range(0, max_jint) \
3820 \
3821 product(intx, Tier4InvocationThreshold, 5000, \
3822 "Compile if number of method invocations crosses this " \
3823 "threshold") \
3824 range(0, max_jint) \
3825 \
3826 product(intx, Tier4MinInvocationThreshold, 600, \
3827 "Minimum invocation to compile at tier 4") \
3828 range(0, max_jint) \
3829 \
3830 product(intx, Tier4CompileThreshold, 15000, \
3831 "Threshold at which tier 4 compilation is invoked (invocation " \
3832 "minimum must be satisfied") \
3833 range(0, max_jint) \
3834 \
3835 product(intx, Tier4BackEdgeThreshold, 40000, \
3836 "Back edge threshold at which tier 4 OSR compilation is invoked") \
3837 range(0, max_jint) \
3838 \
3839 product(intx, Tier3DelayOn, 5, \
3840 "If C2 queue size grows over this amount per compiler thread " \
3841 "stop compiling at tier 3 and start compiling at tier 2") \
3842 range(0, max_jint) \
3843 \
3844 product(intx, Tier3DelayOff, 2, \
3845 "If C2 queue size is less than this amount per compiler thread " \
3846 "allow methods compiled at tier 2 transition to tier 3") \
3847 range(0, max_jint) \
3848 \
3849 product(intx, Tier3LoadFeedback, 5, \
3850 "Tier 3 thresholds will increase twofold when C1 queue size " \
3851 "reaches this amount per compiler thread") \
3852 range(0, max_jint) \
3853 \
3854 product(intx, Tier4LoadFeedback, 3, \
3855 "Tier 4 thresholds will increase twofold when C2 queue size " \
3856 "reaches this amount per compiler thread") \
3857 range(0, max_jint) \
3858 \
3859 product(intx, TieredCompileTaskTimeout, 50, \
3860 "Kill compile task if method was not used within " \
3861 "given timeout in milliseconds") \
3862 range(0, max_intx) \
3863 \
3864 product(intx, TieredStopAtLevel, 4, \
3865 "Stop at given compilation level") \
3866 range(0, 4) \
3867 \
3868 product(intx, Tier0ProfilingStartPercentage, 200, \
3869 "Start profiling in interpreter if the counters exceed tier 3 " \
3870 "thresholds by the specified percentage") \
3871 range(0, max_jint) \
3872 \
3873 product(uintx, IncreaseFirstTierCompileThresholdAt, 50, \
3874 "Increase the compile threshold for C1 compilation if the code " \
3875 "cache is filled by the specified percentage") \
3876 range(0, 99) \
3877 \
3878 product(intx, TieredRateUpdateMinTime, 1, \
3879 "Minimum rate sampling interval (in milliseconds)") \
3880 range(0, max_intx) \
3881 \
3882 product(intx, TieredRateUpdateMaxTime, 25, \
3883 "Maximum rate sampling interval (in milliseconds)") \
3884 range(0, max_intx) \
3885 \
3886 product_pd(bool, TieredCompilation, \
3887 "Enable tiered compilation") \
3888 \
3889 product(bool, PrintTieredEvents, false, \
3890 "Print tiered events notifications") \
3891 \
3892 product_pd(intx, OnStackReplacePercentage, \
3893 "NON_TIERED number of method invocations/branches (expressed as " \
3894 "% of CompileThreshold) before (re-)compiling OSR code") \
3895 constraint(OnStackReplacePercentageConstraintFunc, AfterErgo) \
3896 \
3897 product(intx, InterpreterProfilePercentage, 33, \
3898 "NON_TIERED number of method invocations/branches (expressed as " \
3899 "% of CompileThreshold) before profiling in the interpreter") \
3900 range(0, 100) \
3901 \
3902 develop(intx, MaxRecompilationSearchLength, 10, \
3903 "The maximum number of frames to inspect when searching for " \
3904 "recompilee") \
3905 \
3906 develop(intx, MaxInterpretedSearchLength, 3, \
3907 "The maximum number of interpreted frames to skip when searching "\
3908 "for recompilee") \
3909 \
3910 develop(intx, DesiredMethodLimit, 8000, \
3911 "The desired maximum method size (in bytecodes) after inlining") \
3912 \
3913 develop(intx, HugeMethodLimit, 8000, \
3914 "Don't compile methods larger than this if " \
3915 "+DontCompileHugeMethods") \
|