src/share/vm/runtime/globals.hpp

Mon, 12 Nov 2012 14:03:53 -0800

author
minqi
date
Mon, 12 Nov 2012 14:03:53 -0800
changeset 4267
bd7a7ce2e264
parent 4246
ec204374e626
child 4280
80e866b1d053
permissions
-rw-r--r--

6830717: replay of compilations would help with debugging
Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method.
Reviewed-by: kvn, twisti, sspitsyn
Contributed-by: yumin.qi@oracle.com

     1 /*
     2  * Copyright (c) 1997, 2012, 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  */
    25 #ifndef SHARE_VM_RUNTIME_GLOBALS_HPP
    26 #define SHARE_VM_RUNTIME_GLOBALS_HPP
    28 #include "utilities/debug.hpp"
    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
    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"
    48 #endif
    49 #ifdef TARGET_ARCH_arm
    50 # include "globals_arm.hpp"
    51 #endif
    52 #ifdef TARGET_ARCH_ppc
    53 # include "globals_ppc.hpp"
    54 #endif
    55 #ifdef TARGET_OS_FAMILY_linux
    56 # include "globals_linux.hpp"
    57 #endif
    58 #ifdef TARGET_OS_FAMILY_solaris
    59 # include "globals_solaris.hpp"
    60 #endif
    61 #ifdef TARGET_OS_FAMILY_windows
    62 # include "globals_windows.hpp"
    63 #endif
    64 #ifdef TARGET_OS_FAMILY_bsd
    65 # include "globals_bsd.hpp"
    66 #endif
    67 #ifdef TARGET_OS_ARCH_linux_x86
    68 # include "globals_linux_x86.hpp"
    69 #endif
    70 #ifdef TARGET_OS_ARCH_linux_sparc
    71 # include "globals_linux_sparc.hpp"
    72 #endif
    73 #ifdef TARGET_OS_ARCH_linux_zero
    74 # include "globals_linux_zero.hpp"
    75 #endif
    76 #ifdef TARGET_OS_ARCH_solaris_x86
    77 # include "globals_solaris_x86.hpp"
    78 #endif
    79 #ifdef TARGET_OS_ARCH_solaris_sparc
    80 # include "globals_solaris_sparc.hpp"
    81 #endif
    82 #ifdef TARGET_OS_ARCH_windows_x86
    83 # include "globals_windows_x86.hpp"
    84 #endif
    85 #ifdef TARGET_OS_ARCH_linux_arm
    86 # include "globals_linux_arm.hpp"
    87 #endif
    88 #ifdef TARGET_OS_ARCH_linux_ppc
    89 # include "globals_linux_ppc.hpp"
    90 #endif
    91 #ifdef TARGET_OS_ARCH_bsd_x86
    92 # include "globals_bsd_x86.hpp"
    93 #endif
    94 #ifdef TARGET_OS_ARCH_bsd_zero
    95 # include "globals_bsd_zero.hpp"
    96 #endif
    97 #ifdef COMPILER1
    98 #ifdef TARGET_ARCH_x86
    99 # include "c1_globals_x86.hpp"
   100 #endif
   101 #ifdef TARGET_ARCH_sparc
   102 # include "c1_globals_sparc.hpp"
   103 #endif
   104 #ifdef TARGET_ARCH_arm
   105 # include "c1_globals_arm.hpp"
   106 #endif
   107 #ifdef TARGET_ARCH_ppc
   108 # include "c1_globals_ppc.hpp"
   109 #endif
   110 #ifdef TARGET_OS_FAMILY_linux
   111 # include "c1_globals_linux.hpp"
   112 #endif
   113 #ifdef TARGET_OS_FAMILY_solaris
   114 # include "c1_globals_solaris.hpp"
   115 #endif
   116 #ifdef TARGET_OS_FAMILY_windows
   117 # include "c1_globals_windows.hpp"
   118 #endif
   119 #ifdef TARGET_OS_FAMILY_bsd
   120 # include "c1_globals_bsd.hpp"
   121 #endif
   122 #endif
   123 #ifdef COMPILER2
   124 #ifdef TARGET_ARCH_x86
   125 # include "c2_globals_x86.hpp"
   126 #endif
   127 #ifdef TARGET_ARCH_sparc
   128 # include "c2_globals_sparc.hpp"
   129 #endif
   130 #ifdef TARGET_ARCH_arm
   131 # include "c2_globals_arm.hpp"
   132 #endif
   133 #ifdef TARGET_OS_FAMILY_linux
   134 # include "c2_globals_linux.hpp"
   135 #endif
   136 #ifdef TARGET_OS_FAMILY_solaris
   137 # include "c2_globals_solaris.hpp"
   138 #endif
   139 #ifdef TARGET_OS_FAMILY_windows
   140 # include "c2_globals_windows.hpp"
   141 #endif
   142 #ifdef TARGET_OS_FAMILY_bsd
   143 # include "c2_globals_bsd.hpp"
   144 #endif
   145 #endif
   146 #ifdef SHARK
   147 #ifdef TARGET_ARCH_zero
   148 # include "shark_globals_zero.hpp"
   149 #endif
   150 #endif
   152 #if !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK)
   153 define_pd_global(bool, BackgroundCompilation,        false);
   154 define_pd_global(bool, UseTLAB,                      false);
   155 define_pd_global(bool, CICompileOSR,                 false);
   156 define_pd_global(bool, UseTypeProfile,               false);
   157 define_pd_global(bool, UseOnStackReplacement,        false);
   158 define_pd_global(bool, InlineIntrinsics,             false);
   159 define_pd_global(bool, PreferInterpreterNativeStubs, true);
   160 define_pd_global(bool, ProfileInterpreter,           false);
   161 define_pd_global(bool, ProfileTraps,                 false);
   162 define_pd_global(bool, TieredCompilation,            false);
   164 define_pd_global(intx, CompileThreshold,             0);
   165 define_pd_global(intx, BackEdgeThreshold,            0);
   167 define_pd_global(intx, OnStackReplacePercentage,     0);
   168 define_pd_global(bool, ResizeTLAB,                   false);
   169 define_pd_global(intx, FreqInlineSize,               0);
   170 define_pd_global(intx, InlineSmallCode,              0);
   171 define_pd_global(intx, NewSizeThreadIncrease,        4*K);
   172 define_pd_global(intx, InlineClassNatives,           true);
   173 define_pd_global(intx, InlineUnsafeOps,              true);
   174 define_pd_global(intx, InitialCodeCacheSize,         160*K);
   175 define_pd_global(intx, ReservedCodeCacheSize,        32*M);
   176 define_pd_global(intx, CodeCacheExpansionSize,       32*K);
   177 define_pd_global(intx, CodeCacheMinBlockLength,      1);
   178 define_pd_global(uintx,MetaspaceSize,    ScaleForWordSize(4*M));
   179 define_pd_global(bool, NeverActAsServerClassMachine, true);
   180 define_pd_global(uint64_t,MaxRAM,                    1ULL*G);
   181 #define CI_COMPILER_COUNT 0
   182 #else
   184 #ifdef COMPILER2
   185 #define CI_COMPILER_COUNT 2
   186 #else
   187 #define CI_COMPILER_COUNT 1
   188 #endif // COMPILER2
   190 #endif // no compilers
   192 // string type aliases used only in this file
   193 typedef const char* ccstr;
   194 typedef const char* ccstrlist;   // represents string arguments which accumulate
   196 enum FlagValueOrigin {
   197   DEFAULT          = 0,
   198   COMMAND_LINE     = 1,
   199   ENVIRON_VAR      = 2,
   200   CONFIG_FILE      = 3,
   201   MANAGEMENT       = 4,
   202   ERGONOMIC        = 5,
   203   ATTACH_ON_DEMAND = 6,
   204   INTERNAL         = 99
   205 };
   207 struct Flag {
   208   const char *type;
   209   const char *name;
   210   void*       addr;
   212   NOT_PRODUCT(const char *doc;)
   214   const char *kind;
   215   FlagValueOrigin origin;
   217   // points to all Flags static array
   218   static Flag *flags;
   220   // number of flags
   221   static size_t numFlags;
   223   static Flag* find_flag(char* name, size_t length, bool allow_locked = false);
   225   bool is_bool() const        { return strcmp(type, "bool") == 0; }
   226   bool get_bool() const       { return *((bool*) addr); }
   227   void set_bool(bool value)   { *((bool*) addr) = value; }
   229   bool is_intx()  const       { return strcmp(type, "intx")  == 0; }
   230   intx get_intx() const       { return *((intx*) addr); }
   231   void set_intx(intx value)   { *((intx*) addr) = value; }
   233   bool is_uintx() const       { return strcmp(type, "uintx") == 0; }
   234   uintx get_uintx() const     { return *((uintx*) addr); }
   235   void set_uintx(uintx value) { *((uintx*) addr) = value; }
   237   bool is_uint64_t() const          { return strcmp(type, "uint64_t") == 0; }
   238   uint64_t get_uint64_t() const     { return *((uint64_t*) addr); }
   239   void set_uint64_t(uint64_t value) { *((uint64_t*) addr) = value; }
   241   bool is_double() const        { return strcmp(type, "double") == 0; }
   242   double get_double() const     { return *((double*) addr); }
   243   void set_double(double value) { *((double*) addr) = value; }
   245   bool is_ccstr() const          { return strcmp(type, "ccstr") == 0 || strcmp(type, "ccstrlist") == 0; }
   246   bool ccstr_accumulates() const { return strcmp(type, "ccstrlist") == 0; }
   247   ccstr get_ccstr() const     { return *((ccstr*) addr); }
   248   void set_ccstr(ccstr value) { *((ccstr*) addr) = value; }
   250   bool is_unlocker() const;
   251   bool is_unlocked() const;
   252   bool is_writeable() const;
   253   bool is_external() const;
   255   bool is_unlocker_ext() const;
   256   bool is_unlocked_ext() const;
   257   bool is_writeable_ext() const;
   258   bool is_external_ext() const;
   260   void get_locked_message(char*, int) const;
   261   void get_locked_message_ext(char*, int) const;
   263   void print_on(outputStream* st, bool withComments = false );
   264   void print_as_flag(outputStream* st);
   265 };
   267 // debug flags control various aspects of the VM and are global accessible
   269 // use FlagSetting to temporarily change some debug flag
   270 // e.g. FlagSetting fs(DebugThisAndThat, true);
   271 // restored to previous value upon leaving scope
   272 class FlagSetting {
   273   bool val;
   274   bool* flag;
   275  public:
   276   FlagSetting(bool& fl, bool newValue) { flag = &fl; val = fl; fl = newValue; }
   277   ~FlagSetting()                       { *flag = val; }
   278 };
   281 class CounterSetting {
   282   intx* counter;
   283  public:
   284   CounterSetting(intx* cnt) { counter = cnt; (*counter)++; }
   285   ~CounterSetting()         { (*counter)--; }
   286 };
   289 class IntFlagSetting {
   290   intx val;
   291   intx* flag;
   292  public:
   293   IntFlagSetting(intx& fl, intx newValue) { flag = &fl; val = fl; fl = newValue; }
   294   ~IntFlagSetting()                       { *flag = val; }
   295 };
   298 class DoubleFlagSetting {
   299   double val;
   300   double* flag;
   301  public:
   302   DoubleFlagSetting(double& fl, double newValue) { flag = &fl; val = fl; fl = newValue; }
   303   ~DoubleFlagSetting()                           { *flag = val; }
   304 };
   307 class CommandLineFlags {
   308  public:
   309   static bool boolAt(char* name, size_t len, bool* value);
   310   static bool boolAt(char* name, bool* value)      { return boolAt(name, strlen(name), value); }
   311   static bool boolAtPut(char* name, size_t len, bool* value, FlagValueOrigin origin);
   312   static bool boolAtPut(char* name, bool* value, FlagValueOrigin origin)   { return boolAtPut(name, strlen(name), value, origin); }
   314   static bool intxAt(char* name, size_t len, intx* value);
   315   static bool intxAt(char* name, intx* value)      { return intxAt(name, strlen(name), value); }
   316   static bool intxAtPut(char* name, size_t len, intx* value, FlagValueOrigin origin);
   317   static bool intxAtPut(char* name, intx* value, FlagValueOrigin origin)   { return intxAtPut(name, strlen(name), value, origin); }
   319   static bool uintxAt(char* name, size_t len, uintx* value);
   320   static bool uintxAt(char* name, uintx* value)    { return uintxAt(name, strlen(name), value); }
   321   static bool uintxAtPut(char* name, size_t len, uintx* value, FlagValueOrigin origin);
   322   static bool uintxAtPut(char* name, uintx* value, FlagValueOrigin origin) { return uintxAtPut(name, strlen(name), value, origin); }
   324   static bool uint64_tAt(char* name, size_t len, uint64_t* value);
   325   static bool uint64_tAt(char* name, uint64_t* value) { return uint64_tAt(name, strlen(name), value); }
   326   static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, FlagValueOrigin origin);
   327   static bool uint64_tAtPut(char* name, uint64_t* value, FlagValueOrigin origin) { return uint64_tAtPut(name, strlen(name), value, origin); }
   329   static bool doubleAt(char* name, size_t len, double* value);
   330   static bool doubleAt(char* name, double* value)    { return doubleAt(name, strlen(name), value); }
   331   static bool doubleAtPut(char* name, size_t len, double* value, FlagValueOrigin origin);
   332   static bool doubleAtPut(char* name, double* value, FlagValueOrigin origin) { return doubleAtPut(name, strlen(name), value, origin); }
   334   static bool ccstrAt(char* name, size_t len, ccstr* value);
   335   static bool ccstrAt(char* name, ccstr* value)    { return ccstrAt(name, strlen(name), value); }
   336   static bool ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin);
   337   static bool ccstrAtPut(char* name, ccstr* value, FlagValueOrigin origin) { return ccstrAtPut(name, strlen(name), value, origin); }
   339   // Returns false if name is not a command line flag.
   340   static bool wasSetOnCmdline(const char* name, bool* value);
   341   static void printSetFlags(outputStream* out);
   343   static void printFlags(outputStream* out, bool withComments);
   345   static void verify() PRODUCT_RETURN;
   346 };
   348 // use this for flags that are true by default in the debug version but
   349 // false in the optimized version, and vice versa
   350 #ifdef ASSERT
   351 #define trueInDebug  true
   352 #define falseInDebug false
   353 #else
   354 #define trueInDebug  false
   355 #define falseInDebug true
   356 #endif
   358 // use this for flags that are true per default in the product build
   359 // but false in development builds, and vice versa
   360 #ifdef PRODUCT
   361 #define trueInProduct  true
   362 #define falseInProduct false
   363 #else
   364 #define trueInProduct  false
   365 #define falseInProduct true
   366 #endif
   368 #ifdef JAVASE_EMBEDDED
   369 #define falseInEmbedded false
   370 #else
   371 #define falseInEmbedded true
   372 #endif
   374 // develop flags are settable / visible only during development and are constant in the PRODUCT version
   375 // product flags are always settable / visible
   376 // notproduct flags are settable / visible only during development and are not declared in the PRODUCT version
   378 // A flag must be declared with one of the following types:
   379 // bool, intx, uintx, ccstr.
   380 // The type "ccstr" is an alias for "const char*" and is used
   381 // only in this file, because the macrology requires single-token type names.
   383 // Note: Diagnostic options not meant for VM tuning or for product modes.
   384 // They are to be used for VM quality assurance or field diagnosis
   385 // of VM bugs.  They are hidden so that users will not be encouraged to
   386 // try them as if they were VM ordinary execution options.  However, they
   387 // are available in the product version of the VM.  Under instruction
   388 // from support engineers, VM customers can turn them on to collect
   389 // diagnostic information about VM problems.  To use a VM diagnostic
   390 // option, you must first specify +UnlockDiagnosticVMOptions.
   391 // (This master switch also affects the behavior of -Xprintflags.)
   392 //
   393 // experimental flags are in support of features that are not
   394 //    part of the officially supported product, but are available
   395 //    for experimenting with. They could, for example, be performance
   396 //    features that may not have undergone full or rigorous QA, but which may
   397 //    help performance in some cases and released for experimentation
   398 //    by the community of users and developers. This flag also allows one to
   399 //    be able to build a fully supported product that nonetheless also
   400 //    ships with some unsupported, lightly tested, experimental features.
   401 //    Like the UnlockDiagnosticVMOptions flag above, there is a corresponding
   402 //    UnlockExperimentalVMOptions flag, which allows the control and
   403 //    modification of the experimental flags.
   404 //
   405 // Nota bene: neither diagnostic nor experimental options should be used casually,
   406 //    and they are not supported on production loads, except under explicit
   407 //    direction from support engineers.
   408 //
   409 // manageable flags are writeable external product flags.
   410 //    They are dynamically writeable through the JDK management interface
   411 //    (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole.
   412 //    These flags are external exported interface (see CCC).  The list of
   413 //    manageable flags can be queried programmatically through the management
   414 //    interface.
   415 //
   416 //    A flag can be made as "manageable" only if
   417 //    - the flag is defined in a CCC as an external exported interface.
   418 //    - the VM implementation supports dynamic setting of the flag.
   419 //      This implies that the VM must *always* query the flag variable
   420 //      and not reuse state related to the flag state at any given time.
   421 //    - you want the flag to be queried programmatically by the customers.
   422 //
   423 // product_rw flags are writeable internal product flags.
   424 //    They are like "manageable" flags but for internal/private use.
   425 //    The list of product_rw flags are internal/private flags which
   426 //    may be changed/removed in a future release.  It can be set
   427 //    through the management interface to get/set value
   428 //    when the name of flag is supplied.
   429 //
   430 //    A flag can be made as "product_rw" only if
   431 //    - the VM implementation supports dynamic setting of the flag.
   432 //      This implies that the VM must *always* query the flag variable
   433 //      and not reuse state related to the flag state at any given time.
   434 //
   435 // Note that when there is a need to support develop flags to be writeable,
   436 // it can be done in the same way as product_rw.
   438 #define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \
   439                                                                             \
   440   lp64_product(bool, UseCompressedOops, false,                              \
   441             "Use 32-bit object references in 64-bit VM  "                   \
   442             "lp64_product means flag is always constant in 32 bit VM")      \
   443                                                                             \
   444   lp64_product(bool, UseCompressedKlassPointers, false,                     \
   445             "Use 32-bit klass pointers in 64-bit VM  "                      \
   446             "lp64_product means flag is always constant in 32 bit VM")      \
   447                                                                             \
   448   notproduct(bool, CheckCompressedOops, true,                               \
   449             "generate checks in encoding/decoding code in debug VM")        \
   450                                                                             \
   451   product_pd(uintx, HeapBaseMinAddress,                                     \
   452             "OS specific low limit for heap base address")                  \
   453                                                                             \
   454   diagnostic(bool, PrintCompressedOopsMode, false,                          \
   455             "Print compressed oops base address and encoding mode")         \
   456                                                                             \
   457   lp64_product(intx, ObjectAlignmentInBytes, 8,                             \
   458           "Default object alignment in bytes, 8 is minimum")                \
   459                                                                             \
   460   /* UseMembar is theoretically a temp flag used for memory barrier         \
   461    * removal testing.  It was supposed to be removed before FCS but has     \
   462    * been re-added (see 6401008) */                                         \
   463   product_pd(bool, UseMembar,                                               \
   464           "(Unstable) Issues membars on thread state transitions")          \
   465                                                                             \
   466   /* Temp PPC Flag to allow disabling the use of lwsync on ppc platforms    \
   467    * that don't support it.  This will be replaced by processor detection   \
   468    * logic.                                                                 \
   469    */                                                                       \
   470   product(bool, UsePPCLWSYNC, true,                                         \
   471           "Use lwsync instruction if true, else use slower sync")           \
   472                                                                             \
   473   develop(bool, CleanChunkPoolAsync, falseInEmbedded,                       \
   474           "Whether to clean the chunk pool asynchronously")                 \
   475                                                                             \
   476   /* Temporary: See 6948537 */                                              \
   477   experimental(bool, UseMemSetInBOT, true,                                  \
   478           "(Unstable) uses memset in BOT updates in GC code")               \
   479                                                                             \
   480   diagnostic(bool, UnlockDiagnosticVMOptions, trueInDebug,                  \
   481           "Enable normal processing of flags relating to field diagnostics")\
   482                                                                             \
   483   experimental(bool, UnlockExperimentalVMOptions, false,                    \
   484           "Enable normal processing of flags relating to experimental features")\
   485                                                                             \
   486   product(bool, JavaMonitorsInStackTrace, true,                             \
   487           "Print info. about Java monitor locks when the stacks are dumped")\
   488                                                                             \
   489   product_pd(bool, UseLargePages,                                           \
   490           "Use large page memory")                                          \
   491                                                                             \
   492   product_pd(bool, UseLargePagesIndividualAllocation,                       \
   493           "Allocate large pages individually for better affinity")          \
   494                                                                             \
   495   develop(bool, LargePagesIndividualAllocationInjectError, false,           \
   496           "Fail large pages individual allocation")                         \
   497                                                                             \
   498   develop(bool, TracePageSizes, false,                                      \
   499           "Trace page size selection and usage.")                           \
   500                                                                             \
   501   product(bool, UseNUMA, false,                                             \
   502           "Use NUMA if available")                                          \
   503                                                                             \
   504   product(bool, UseNUMAInterleaving, false,                                 \
   505           "Interleave memory across NUMA nodes if available")               \
   506                                                                             \
   507   product(uintx, NUMAInterleaveGranularity, 2*M,                            \
   508           "Granularity to use for NUMA interleaving on Windows OS")         \
   509                                                                             \
   510   product(bool, ForceNUMA, false,                                           \
   511           "Force NUMA optimizations on single-node/UMA systems")            \
   512                                                                             \
   513   product(intx, NUMAChunkResizeWeight, 20,                                  \
   514           "Percentage (0-100) used to weight the current sample when "      \
   515           "computing exponentially decaying average for "                   \
   516           "AdaptiveNUMAChunkSizing")                                        \
   517                                                                             \
   518   product(intx, NUMASpaceResizeRate, 1*G,                                   \
   519           "Do not reallocate more that this amount per collection")         \
   520                                                                             \
   521   product(bool, UseAdaptiveNUMAChunkSizing, true,                           \
   522           "Enable adaptive chunk sizing for NUMA")                          \
   523                                                                             \
   524   product(bool, NUMAStats, false,                                           \
   525           "Print NUMA stats in detailed heap information")                  \
   526                                                                             \
   527   product(intx, NUMAPageScanRate, 256,                                      \
   528           "Maximum number of pages to include in the page scan procedure")  \
   529                                                                             \
   530   product_pd(bool, NeedsDeoptSuspend,                                       \
   531           "True for register window machines (sparc/ia64)")                 \
   532                                                                             \
   533   product(intx, UseSSE, 99,                                                 \
   534           "Highest supported SSE instructions set on x86/x64")              \
   535                                                                             \
   536   product(bool, UseAES, false,                                               \
   537           "Control whether AES instructions can be used on x86/x64")        \
   538                                                                             \
   539   product(uintx, LargePageSizeInBytes, 0,                                   \
   540           "Large page size (0 to let VM choose the page size")              \
   541                                                                             \
   542   product(uintx, LargePageHeapSizeThreshold, 128*M,                         \
   543           "Use large pages if max heap is at least this big")               \
   544                                                                             \
   545   product(bool, ForceTimeHighResolution, false,                             \
   546           "Using high time resolution(For Win32 only)")                     \
   547                                                                             \
   548   develop(bool, TraceItables, false,                                        \
   549           "Trace initialization and use of itables")                        \
   550                                                                             \
   551   develop(bool, TracePcPatching, false,                                     \
   552           "Trace usage of frame::patch_pc")                                 \
   553                                                                             \
   554   develop(bool, TraceJumps, false,                                          \
   555           "Trace assembly jumps in thread ring buffer")                     \
   556                                                                             \
   557   develop(bool, TraceRelocator, false,                                      \
   558           "Trace the bytecode relocator")                                   \
   559                                                                             \
   560   develop(bool, TraceLongCompiles, false,                                   \
   561           "Print out every time compilation is longer than "                \
   562           "a given threashold")                                             \
   563                                                                             \
   564   develop(bool, SafepointALot, false,                                       \
   565           "Generates a lot of safepoints. Works with "                      \
   566           "GuaranteedSafepointInterval")                                    \
   567                                                                             \
   568   product_pd(bool, BackgroundCompilation,                                   \
   569           "A thread requesting compilation is not blocked during "          \
   570           "compilation")                                                    \
   571                                                                             \
   572   product(bool, PrintVMQWaitTime, false,                                    \
   573           "Prints out the waiting time in VM operation queue")              \
   574                                                                             \
   575   develop(bool, NoYieldsInMicrolock, false,                                 \
   576           "Disable yields in microlock")                                    \
   577                                                                             \
   578   develop(bool, TraceOopMapGeneration, false,                               \
   579           "Shows oopmap generation")                                        \
   580                                                                             \
   581   product(bool, MethodFlushing, true,                                       \
   582           "Reclamation of zombie and not-entrant methods")                  \
   583                                                                             \
   584   develop(bool, VerifyStack, false,                                         \
   585           "Verify stack of each thread when it is entering a runtime call") \
   586                                                                             \
   587   diagnostic(bool, ForceUnreachable, false,                                 \
   588           "Make all non code cache addresses to be unreachable with forcing use of 64bit literal fixups") \
   589                                                                             \
   590   notproduct(bool, StressDerivedPointers, false,                            \
   591           "Force scavenge when a derived pointers is detected on stack "    \
   592           "after rtm call")                                                 \
   593                                                                             \
   594   develop(bool, TraceDerivedPointers, false,                                \
   595           "Trace traversal of derived pointers on stack")                   \
   596                                                                             \
   597   notproduct(bool, TraceCodeBlobStacks, false,                              \
   598           "Trace stack-walk of codeblobs")                                  \
   599                                                                             \
   600   product(bool, PrintJNIResolving, false,                                   \
   601           "Used to implement -v:jni")                                       \
   602                                                                             \
   603   notproduct(bool, PrintRewrites, false,                                    \
   604           "Print methods that are being rewritten")                         \
   605                                                                             \
   606   product(bool, UseInlineCaches, true,                                      \
   607           "Use Inline Caches for virtual calls ")                           \
   608                                                                             \
   609   develop(bool, InlineArrayCopy, true,                                      \
   610           "inline arraycopy native that is known to be part of "            \
   611           "base library DLL")                                               \
   612                                                                             \
   613   develop(bool, InlineObjectHash, true,                                     \
   614           "inline Object::hashCode() native that is known to be part "      \
   615           "of base library DLL")                                            \
   616                                                                             \
   617   develop(bool, InlineNatives, true,                                        \
   618           "inline natives that are known to be part of base library DLL")   \
   619                                                                             \
   620   develop(bool, InlineMathNatives, true,                                    \
   621           "inline SinD, CosD, etc.")                                        \
   622                                                                             \
   623   develop(bool, InlineClassNatives, true,                                   \
   624           "inline Class.isInstance, etc")                                   \
   625                                                                             \
   626   develop(bool, InlineThreadNatives, true,                                  \
   627           "inline Thread.currentThread, etc")                               \
   628                                                                             \
   629   develop(bool, InlineUnsafeOps, true,                                      \
   630           "inline memory ops (native methods) from sun.misc.Unsafe")        \
   631                                                                             \
   632   product(bool, CriticalJNINatives, true,                                   \
   633           "check for critical JNI entry points")                            \
   634                                                                             \
   635   notproduct(bool, StressCriticalJNINatives, false,                         \
   636             "Exercise register saving code in critical natives")            \
   637                                                                             \
   638   product(bool, UseSSE42Intrinsics, false,                                  \
   639           "SSE4.2 versions of intrinsics")                                  \
   640                                                                             \
   641   product(bool, UseAESIntrinsics, false,                                    \
   642           "use intrinsics for AES versions of crypto")                      \
   643                                                                             \
   644   develop(bool, TraceCallFixup, false,                                      \
   645           "traces all call fixups")                                         \
   646                                                                             \
   647   develop(bool, DeoptimizeALot, false,                                      \
   648           "deoptimize at every exit from the runtime system")               \
   649                                                                             \
   650   notproduct(ccstrlist, DeoptimizeOnlyAt, "",                               \
   651           "a comma separated list of bcis to deoptimize at")                \
   652                                                                             \
   653   product(bool, DeoptimizeRandom, false,                                    \
   654           "deoptimize random frames on random exit from the runtime system")\
   655                                                                             \
   656   notproduct(bool, ZombieALot, false,                                       \
   657           "creates zombies (non-entrant) at exit from the runt. system")    \
   658                                                                             \
   659   product(bool, UnlinkSymbolsALot, false,                                   \
   660           "unlink unreferenced symbols from the symbol table at safepoints")\
   661                                                                             \
   662   notproduct(bool, WalkStackALot, false,                                    \
   663           "trace stack (no print) at every exit from the runtime system")   \
   664                                                                             \
   665   product(bool, Debugging, false,                                           \
   666           "set when executing debug methods in debug.ccp "                  \
   667           "(to prevent triggering assertions)")                             \
   668                                                                             \
   669   notproduct(bool, StrictSafepointChecks, trueInDebug,                      \
   670           "Enable strict checks that safepoints cannot happen for threads " \
   671           "that used No_Safepoint_Verifier")                                \
   672                                                                             \
   673   notproduct(bool, VerifyLastFrame, false,                                  \
   674           "Verify oops on last frame on entry to VM")                       \
   675                                                                             \
   676   develop(bool, TraceHandleAllocation, false,                               \
   677           "Prints out warnings when suspicious many handles are allocated") \
   678                                                                             \
   679   product(bool, UseCompilerSafepoints, true,                                \
   680           "Stop at safepoints in compiled code")                            \
   681                                                                             \
   682   product(bool, UseSplitVerifier, true,                                     \
   683           "use split verifier with StackMapTable attributes")               \
   684                                                                             \
   685   product(bool, FailOverToOldVerifier, true,                                \
   686           "fail over to old verifier when split verifier fails")            \
   687                                                                             \
   688   develop(bool, ShowSafepointMsgs, false,                                   \
   689           "Show msg. about safepoint synch.")                               \
   690                                                                             \
   691   product(bool, SafepointTimeout, false,                                    \
   692           "Time out and warn or fail after SafepointTimeoutDelay "          \
   693           "milliseconds if failed to reach safepoint")                      \
   694                                                                             \
   695   develop(bool, DieOnSafepointTimeout, false,                               \
   696           "Die upon failure to reach safepoint (see SafepointTimeout)")     \
   697                                                                             \
   698   /* 50 retries * (5 * current_retry_count) millis = ~6.375 seconds */      \
   699   /* typically, at most a few retries are needed */                         \
   700   product(intx, SuspendRetryCount, 50,                                      \
   701           "Maximum retry count for an external suspend request")            \
   702                                                                             \
   703   product(intx, SuspendRetryDelay, 5,                                       \
   704           "Milliseconds to delay per retry (* current_retry_count)")        \
   705                                                                             \
   706   product(bool, AssertOnSuspendWaitFailure, false,                          \
   707           "Assert/Guarantee on external suspend wait failure")              \
   708                                                                             \
   709   product(bool, TraceSuspendWaitFailures, false,                            \
   710           "Trace external suspend wait failures")                           \
   711                                                                             \
   712   product(bool, MaxFDLimit, true,                                           \
   713           "Bump the number of file descriptors to max in solaris.")         \
   714                                                                             \
   715   diagnostic(bool, LogEvents, true,                                         \
   716              "Enable the various ring buffer event logs")                   \
   717                                                                             \
   718   diagnostic(intx, LogEventsBufferEntries, 10,                              \
   719              "Enable the various ring buffer event logs")                   \
   720                                                                             \
   721   product(bool, BytecodeVerificationRemote, true,                           \
   722           "Enables the Java bytecode verifier for remote classes")          \
   723                                                                             \
   724   product(bool, BytecodeVerificationLocal, false,                           \
   725           "Enables the Java bytecode verifier for local classes")           \
   726                                                                             \
   727   develop(bool, ForceFloatExceptions, trueInDebug,                          \
   728           "Force exceptions on FP stack under/overflow")                    \
   729                                                                             \
   730   develop(bool, VerifyStackAtCalls, false,                                  \
   731           "Verify that the stack pointer is unchanged after calls")         \
   732                                                                             \
   733   develop(bool, TraceJavaAssertions, false,                                 \
   734           "Trace java language assertions")                                 \
   735                                                                             \
   736   notproduct(bool, CheckAssertionStatusDirectives, false,                   \
   737           "temporary - see javaClasses.cpp")                                \
   738                                                                             \
   739   notproduct(bool, PrintMallocFree, false,                                  \
   740           "Trace calls to C heap malloc/free allocation")                   \
   741                                                                             \
   742   product(bool, PrintOopAddress, false,                                     \
   743           "Always print the location of the oop")                           \
   744                                                                             \
   745   notproduct(bool, VerifyCodeCacheOften, false,                             \
   746           "Verify compiled-code cache often")                               \
   747                                                                             \
   748   develop(bool, ZapDeadCompiledLocals, false,                               \
   749           "Zap dead locals in compiler frames")                             \
   750                                                                             \
   751   notproduct(bool, ZapDeadLocalsOld, false,                                 \
   752           "Zap dead locals (old version, zaps all frames when "             \
   753           "entering the VM")                                                \
   754                                                                             \
   755   notproduct(bool, CheckOopishValues, false,                                \
   756           "Warn if value contains oop ( requires ZapDeadLocals)")           \
   757                                                                             \
   758   develop(bool, UseMallocOnly, false,                                       \
   759           "use only malloc/free for allocation (no resource area/arena)")   \
   760                                                                             \
   761   develop(bool, PrintMalloc, false,                                         \
   762           "print all malloc/free calls")                                    \
   763                                                                             \
   764   develop(bool, PrintMallocStatistics, false,                               \
   765           "print malloc/free statistics")                                   \
   766                                                                             \
   767   develop(bool, ZapResourceArea, trueInDebug,                               \
   768           "Zap freed resource/arena space with 0xABABABAB")                 \
   769                                                                             \
   770   notproduct(bool, ZapVMHandleArea, trueInDebug,                            \
   771           "Zap freed VM handle space with 0xBCBCBCBC")                      \
   772                                                                             \
   773   develop(bool, ZapJNIHandleArea, trueInDebug,                              \
   774           "Zap freed JNI handle space with 0xFEFEFEFE")                     \
   775                                                                             \
   776   notproduct(bool, ZapStackSegments, trueInDebug,                           \
   777              "Zap allocated/freed Stack segments with 0xFADFADED")          \
   778                                                                             \
   779   develop(bool, ZapUnusedHeapArea, trueInDebug,                             \
   780           "Zap unused heap space with 0xBAADBABE")                          \
   781                                                                             \
   782   develop(bool, TraceZapUnusedHeapArea, false,                              \
   783           "Trace zapping of unused heap space")                             \
   784                                                                             \
   785   develop(bool, CheckZapUnusedHeapArea, false,                              \
   786           "Check zapping of unused heap space")                             \
   787                                                                             \
   788   develop(bool, ZapFillerObjects, trueInDebug,                              \
   789           "Zap filler objects with 0xDEAFBABE")                             \
   790                                                                             \
   791   develop(bool, PrintVMMessages, true,                                      \
   792           "Print vm messages on console")                                   \
   793                                                                             \
   794   product(bool, PrintGCApplicationConcurrentTime, false,                    \
   795           "Print the time the application has been running")                \
   796                                                                             \
   797   product(bool, PrintGCApplicationStoppedTime, false,                       \
   798           "Print the time the application has been stopped")                \
   799                                                                             \
   800   diagnostic(bool, VerboseVerification, false,                              \
   801              "Display detailed verification details")                       \
   802                                                                             \
   803   notproduct(uintx, ErrorHandlerTest, 0,                                    \
   804           "If > 0, provokes an error after VM initialization; the value"    \
   805           "determines which error to provoke.  See test_error_handler()"    \
   806           "in debug.cpp.")                                                  \
   807                                                                             \
   808   develop(bool, Verbose, false,                                             \
   809           "Prints additional debugging information from other modes")       \
   810                                                                             \
   811   develop(bool, PrintMiscellaneous, false,                                  \
   812           "Prints uncategorized debugging information (requires +Verbose)") \
   813                                                                             \
   814   develop(bool, WizardMode, false,                                          \
   815           "Prints much more debugging information")                         \
   816                                                                             \
   817   product(bool, ShowMessageBoxOnError, false,                               \
   818           "Keep process alive on VM fatal error")                           \
   819                                                                             \
   820   product(bool, CreateMinidumpOnCrash, false,                               \
   821           "Create minidump on VM fatal error")                              \
   822                                                                             \
   823   product_pd(bool, UseOSErrorReporting,                                     \
   824           "Let VM fatal error propagate to the OS (ie. WER on Windows)")    \
   825                                                                             \
   826   product(bool, SuppressFatalErrorMessage, false,                           \
   827           "Do NO Fatal Error report [Avoid deadlock]")                      \
   828                                                                             \
   829   product(ccstrlist, OnError, "",                                           \
   830           "Run user-defined commands on fatal error; see VMError.cpp "      \
   831           "for examples")                                                   \
   832                                                                             \
   833   product(ccstrlist, OnOutOfMemoryError, "",                                \
   834           "Run user-defined commands on first java.lang.OutOfMemoryError")  \
   835                                                                             \
   836   manageable(bool, HeapDumpBeforeFullGC, false,                             \
   837           "Dump heap to file before any major stop-world GC")               \
   838                                                                             \
   839   manageable(bool, HeapDumpAfterFullGC, false,                              \
   840           "Dump heap to file after any major stop-world GC")                \
   841                                                                             \
   842   manageable(bool, HeapDumpOnOutOfMemoryError, false,                       \
   843           "Dump heap to file when java.lang.OutOfMemoryError is thrown")    \
   844                                                                             \
   845   manageable(ccstr, HeapDumpPath, NULL,                                     \
   846           "When HeapDumpOnOutOfMemoryError is on, the path (filename or"    \
   847           "directory) of the dump file (defaults to java_pid<pid>.hprof"    \
   848           "in the working directory)")                                      \
   849                                                                             \
   850   develop(uintx, SegmentedHeapDumpThreshold, 2*G,                           \
   851           "Generate a segmented heap dump (JAVA PROFILE 1.0.2 format) "     \
   852           "when the heap usage is larger than this")                        \
   853                                                                             \
   854   develop(uintx, HeapDumpSegmentSize, 1*G,                                  \
   855           "Approximate segment size when generating a segmented heap dump") \
   856                                                                             \
   857   develop(bool, BreakAtWarning, false,                                      \
   858           "Execute breakpoint upon encountering VM warning")                \
   859                                                                             \
   860   develop(bool, TraceVMOperation, false,                                    \
   861           "Trace vm operations")                                            \
   862                                                                             \
   863   develop(bool, UseFakeTimers, false,                                       \
   864           "Tells whether the VM should use system time or a fake timer")    \
   865                                                                             \
   866   product(ccstr, NativeMemoryTracking, "off",                               \
   867           "Native memory tracking options")                                 \
   868                                                                             \
   869   diagnostic(bool, PrintNMTStatistics, false,                               \
   870           "Print native memory tracking summary data if it is on")          \
   871                                                                             \
   872   diagnostic(bool, LogCompilation, false,                                   \
   873           "Log compilation activity in detail to hotspot.log or LogFile")   \
   874                                                                             \
   875   product(bool, PrintCompilation, false,                                    \
   876           "Print compilations")                                             \
   877                                                                             \
   878   diagnostic(bool, TraceNMethodInstalls, false,                             \
   879              "Trace nmethod intallation")                                   \
   880                                                                             \
   881   diagnostic(intx, ScavengeRootsInCode, 2,                                  \
   882              "0: do not allow scavengable oops in the code cache; "         \
   883              "1: allow scavenging from the code cache; "                    \
   884              "2: emit as many constants as the compiler can see")           \
   885                                                                             \
   886   product(bool, AlwaysRestoreFPU, false,                                    \
   887           "Restore the FPU control word after every JNI call (expensive)")  \
   888                                                                             \
   889   diagnostic(bool, PrintCompilation2, false,                                \
   890           "Print additional statistics per compilation")                    \
   891                                                                             \
   892   diagnostic(bool, PrintAdapterHandlers, false,                             \
   893           "Print code generated for i2c/c2i adapters")                      \
   894                                                                             \
   895   diagnostic(bool, VerifyAdapterCalls, trueInDebug,                         \
   896           "Verify that i2c/c2i adapters are called properly")               \
   897                                                                             \
   898   develop(bool, VerifyAdapterSharing, false,                                \
   899           "Verify that the code for shared adapters is the equivalent")     \
   900                                                                             \
   901   diagnostic(bool, PrintAssembly, false,                                    \
   902           "Print assembly code (using external disassembler.so)")           \
   903                                                                             \
   904   diagnostic(ccstr, PrintAssemblyOptions, NULL,                             \
   905           "Options string passed to disassembler.so")                       \
   906                                                                             \
   907   diagnostic(bool, PrintNMethods, false,                                    \
   908           "Print assembly code for nmethods when generated")                \
   909                                                                             \
   910   diagnostic(bool, PrintNativeNMethods, false,                              \
   911           "Print assembly code for native nmethods when generated")         \
   912                                                                             \
   913   develop(bool, PrintDebugInfo, false,                                      \
   914           "Print debug information for all nmethods when generated")        \
   915                                                                             \
   916   develop(bool, PrintRelocations, false,                                    \
   917           "Print relocation information for all nmethods when generated")   \
   918                                                                             \
   919   develop(bool, PrintDependencies, false,                                   \
   920           "Print dependency information for all nmethods when generated")   \
   921                                                                             \
   922   develop(bool, PrintExceptionHandlers, false,                              \
   923           "Print exception handler tables for all nmethods when generated") \
   924                                                                             \
   925   develop(bool, InterceptOSException, false,                                \
   926           "Starts debugger when an implicit OS (e.g., NULL) "               \
   927           "exception happens")                                              \
   928                                                                             \
   929   notproduct(bool, PrintCodeCache, false,                                   \
   930           "Print the compiled_code cache when exiting")                     \
   931                                                                             \
   932   develop(bool, PrintCodeCache2, false,                                     \
   933           "Print detailed info on the compiled_code cache when exiting")    \
   934                                                                             \
   935   diagnostic(bool, PrintStubCode, false,                                    \
   936           "Print generated stub code")                                      \
   937                                                                             \
   938   product(bool, StackTraceInThrowable, true,                                \
   939           "Collect backtrace in throwable when exception happens")          \
   940                                                                             \
   941   product(bool, OmitStackTraceInFastThrow, true,                            \
   942           "Omit backtraces for some 'hot' exceptions in optimized code")    \
   943                                                                             \
   944   product(bool, ProfilerPrintByteCodeStatistics, false,                     \
   945           "Prints byte code statictics when dumping profiler output")       \
   946                                                                             \
   947   product(bool, ProfilerRecordPC, false,                                    \
   948           "Collects tick for each 16 byte interval of compiled code")       \
   949                                                                             \
   950   product(bool, ProfileVM, false,                                           \
   951           "Profiles ticks that fall within VM (either in the VM Thread "    \
   952           "or VM code called through stubs)")                               \
   953                                                                             \
   954   product(bool, ProfileIntervals, false,                                    \
   955           "Prints profiles for each interval (see ProfileIntervalsTicks)")  \
   956                                                                             \
   957   notproduct(bool, ProfilerCheckIntervals, false,                           \
   958           "Collect and print info on spacing of profiler ticks")            \
   959                                                                             \
   960   develop(bool, PrintJVMWarnings, false,                                    \
   961           "Prints warnings for unimplemented JVM functions")                \
   962                                                                             \
   963   product(bool, PrintWarnings, true,                                        \
   964           "Prints JVM warnings to output stream")                           \
   965                                                                             \
   966   notproduct(uintx, WarnOnStalledSpinLock, 0,                               \
   967           "Prints warnings for stalled SpinLocks")                          \
   968                                                                             \
   969   develop(bool, InitializeJavaLangSystem, true,                             \
   970           "Initialize java.lang.System - turn off for individual "          \
   971           "method debugging")                                               \
   972                                                                             \
   973   develop(bool, InitializeJavaLangString, true,                             \
   974           "Initialize java.lang.String - turn off for individual "          \
   975           "method debugging")                                               \
   976                                                                             \
   977   develop(bool, InitializeJavaLangExceptionsErrors, true,                   \
   978           "Initialize various error and exception classes - turn off for "  \
   979           "individual method debugging")                                    \
   980                                                                             \
   981   product(bool, RegisterFinalizersAtInit, true,                             \
   982           "Register finalizable objects at end of Object.<init> or "        \
   983           "after allocation")                                               \
   984                                                                             \
   985   develop(bool, RegisterReferences, true,                                   \
   986           "Tells whether the VM should register soft/weak/final/phantom "   \
   987           "references")                                                     \
   988                                                                             \
   989   develop(bool, IgnoreRewrites, false,                                      \
   990           "Supress rewrites of bytecodes in the oopmap generator. "         \
   991           "This is unsafe!")                                                \
   992                                                                             \
   993   develop(bool, PrintCodeCacheExtension, false,                             \
   994           "Print extension of code cache")                                  \
   995                                                                             \
   996   develop(bool, UsePrivilegedStack, true,                                   \
   997           "Enable the security JVM functions")                              \
   998                                                                             \
   999   develop(bool, ProtectionDomainVerification, true,                         \
  1000           "Verifies protection domain before resolution in system "         \
  1001           "dictionary")                                                     \
  1003   product(bool, ClassUnloading, true,                                       \
  1004           "Do unloading of classes")                                        \
  1006   develop(bool, DisableStartThread, false,                                  \
  1007           "Disable starting of additional Java threads "                    \
  1008           "(for debugging only)")                                           \
  1010   develop(bool, MemProfiling, false,                                        \
  1011           "Write memory usage profiling to log file")                       \
  1013   notproduct(bool, PrintSystemDictionaryAtExit, false,                      \
  1014           "Prints the system dictionary at exit")                           \
  1016   experimental(intx, PredictedLoadedClassCount, 0,                          \
  1017           "Experimental: Tune loaded class cache starting size.")           \
  1019   diagnostic(bool, UnsyncloadClass, false,                                  \
  1020           "Unstable: VM calls loadClass unsynchronized. Custom "            \
  1021           "class loader  must call VM synchronized for findClass "          \
  1022           "and defineClass.")                                               \
  1024   product(bool, AlwaysLockClassLoader, false,                               \
  1025           "Require the VM to acquire the class loader lock before calling " \
  1026           "loadClass() even for class loaders registering "                 \
  1027           "as parallel capable")                                            \
  1029   product(bool, AllowParallelDefineClass, false,                            \
  1030           "Allow parallel defineClass requests for class loaders "          \
  1031           "registering as parallel capable")                                \
  1033   product(bool, MustCallLoadClassInternal, false,                           \
  1034           "Call loadClassInternal() rather than loadClass()")               \
  1036   product_pd(bool, DontYieldALot,                                           \
  1037           "Throw away obvious excess yield calls (for SOLARIS only)")       \
  1039   product_pd(bool, ConvertSleepToYield,                                     \
  1040           "Converts sleep(0) to thread yield "                              \
  1041           "(may be off for SOLARIS to improve GUI)")                        \
  1043   product(bool, ConvertYieldToSleep, false,                                 \
  1044           "Converts yield to a sleep of MinSleepInterval to simulate Win32 "\
  1045           "behavior (SOLARIS only)")                                        \
  1047   product(bool, UseBoundThreads, true,                                      \
  1048           "Bind user level threads to kernel threads (for SOLARIS only)")   \
  1050   develop(bool, UseDetachedThreads, true,                                   \
  1051           "Use detached threads that are recycled upon termination "        \
  1052           "(for SOLARIS only)")                                             \
  1054   product(bool, UseLWPSynchronization, true,                                \
  1055           "Use LWP-based instead of libthread-based synchronization "       \
  1056           "(SPARC only)")                                                   \
  1058   product(ccstr, SyncKnobs, NULL,                                           \
  1059           "(Unstable) Various monitor synchronization tunables")            \
  1061   product(intx, EmitSync, 0,                                                \
  1062           "(Unsafe,Unstable) "                                              \
  1063           " Controls emission of inline sync fast-path code")               \
  1065   product(intx, MonitorBound, 0, "Bound Monitor population")                \
  1067   product(bool, MonitorInUseLists, false, "Track Monitors for Deflation")   \
  1069   product(intx, SyncFlags, 0, "(Unsafe,Unstable) Experimental Sync flags" ) \
  1071   product(intx, SyncVerbose, 0, "(Unstable)" )                              \
  1073   product(intx, ClearFPUAtPark, 0, "(Unsafe,Unstable)" )                    \
  1075   product(intx, hashCode, 0,                                                \
  1076          "(Unstable) select hashCode generation algorithm" )                \
  1078   product(intx, WorkAroundNPTLTimedWaitHang, 1,                             \
  1079          "(Unstable, Linux-specific)"                                       \
  1080          " avoid NPTL-FUTEX hang pthread_cond_timedwait" )                  \
  1082   product(bool, FilterSpuriousWakeups, true,                                \
  1083           "Prevent spurious or premature wakeups from object.wait "         \
  1084           "(Solaris only)")                                                 \
  1086   product(intx, NativeMonitorTimeout, -1, "(Unstable)" )                    \
  1087   product(intx, NativeMonitorFlags, 0, "(Unstable)" )                       \
  1088   product(intx, NativeMonitorSpinLimit, 20, "(Unstable)" )                  \
  1090   develop(bool, UsePthreads, false,                                         \
  1091           "Use pthread-based instead of libthread-based synchronization "   \
  1092           "(SPARC only)")                                                   \
  1094   product(bool, AdjustConcurrency, false,                                   \
  1095           "call thr_setconcurrency at thread create time to avoid "         \
  1096           "LWP starvation on MP systems (For Solaris Only)")                \
  1098   product(bool, ReduceSignalUsage, false,                                   \
  1099           "Reduce the use of OS signals in Java and/or the VM")             \
  1101   notproduct(bool, ValidateMarkSweep, false,                                \
  1102           "Do extra validation during MarkSweep collection")                \
  1104   notproduct(bool, RecordMarkSweepCompaction, false,                        \
  1105           "Enable GC-to-GC recording and querying of compaction during "    \
  1106           "MarkSweep")                                                      \
  1108   develop_pd(bool, ShareVtableStubs,                                        \
  1109           "Share vtable stubs (smaller code but worse branch prediction")   \
  1111   develop(bool, LoadLineNumberTables, true,                                 \
  1112           "Tells whether the class file parser loads line number tables")   \
  1114   develop(bool, LoadLocalVariableTables, true,                              \
  1115           "Tells whether the class file parser loads local variable tables")\
  1117   develop(bool, LoadLocalVariableTypeTables, true,                          \
  1118           "Tells whether the class file parser loads local variable type tables")\
  1120   product(bool, AllowUserSignalHandlers, false,                             \
  1121           "Do not complain if the application installs signal handlers "    \
  1122           "(Solaris & Linux only)")                                         \
  1124   product(bool, UseSignalChaining, true,                                    \
  1125           "Use signal-chaining to invoke signal handlers installed "        \
  1126           "by the application (Solaris & Linux only)")                      \
  1128   product(bool, UseAltSigs, false,                                          \
  1129           "Use alternate signals instead of SIGUSR1 & SIGUSR2 for VM "      \
  1130           "internal signals (Solaris only)")                                \
  1132   product(bool, AllowJNIEnvProxy, false,                                    \
  1133           "Allow JNIEnv proxies for jdbx")                                  \
  1135   product(bool, JNIDetachReleasesMonitors, true,                            \
  1136           "JNI DetachCurrentThread releases monitors owned by thread")      \
  1138   product(bool, RestoreMXCSROnJNICalls, false,                              \
  1139           "Restore MXCSR when returning from JNI calls")                    \
  1141   product(bool, CheckJNICalls, false,                                       \
  1142           "Verify all arguments to JNI calls")                              \
  1144   product(bool, UseFastJNIAccessors, true,                                  \
  1145           "Use optimized versions of Get<Primitive>Field")                  \
  1147   product(bool, EagerXrunInit, false,                                       \
  1148           "Eagerly initialize -Xrun libraries; allows startup profiling, "  \
  1149           " but not all -Xrun libraries may support the state of the VM at this time") \
  1151   product(bool, PreserveAllAnnotations, false,                              \
  1152           "Preserve RuntimeInvisibleAnnotations as well as RuntimeVisibleAnnotations") \
  1154   develop(uintx, PreallocatedOutOfMemoryErrorCount, 4,                      \
  1155           "Number of OutOfMemoryErrors preallocated with backtrace")        \
  1157   product(bool, LazyBootClassLoader, true,                                  \
  1158           "Enable/disable lazy opening of boot class path entries")         \
  1160   product(bool, UseXMMForArrayCopy, false,                                  \
  1161           "Use SSE2 MOVQ instruction for Arraycopy")                        \
  1163   product(intx, FieldsAllocationStyle, 1,                                   \
  1164           "0 - type based with oops first, 1 - with oops last, "            \
  1165           "2 - oops in super and sub classes are together")                 \
  1167   product(bool, CompactFields, true,                                        \
  1168           "Allocate nonstatic fields in gaps between previous fields")      \
  1170   notproduct(bool, PrintCompactFieldsSavings, false,                        \
  1171           "Print how many words were saved with CompactFields")             \
  1173   product(bool, UseBiasedLocking, true,                                     \
  1174           "Enable biased locking in JVM")                                   \
  1176   product(intx, BiasedLockingStartupDelay, 4000,                            \
  1177           "Number of milliseconds to wait before enabling biased locking")  \
  1179   diagnostic(bool, PrintBiasedLockingStatistics, false,                     \
  1180           "Print statistics of biased locking in JVM")                      \
  1182   product(intx, BiasedLockingBulkRebiasThreshold, 20,                       \
  1183           "Threshold of number of revocations per type to try to "          \
  1184           "rebias all objects in the heap of that type")                    \
  1186   product(intx, BiasedLockingBulkRevokeThreshold, 40,                       \
  1187           "Threshold of number of revocations per type to permanently "     \
  1188           "revoke biases of all objects in the heap of that type")          \
  1190   product(intx, BiasedLockingDecayTime, 25000,                              \
  1191           "Decay time (in milliseconds) to re-enable bulk rebiasing of a "  \
  1192           "type after previous bulk rebias")                                \
  1194   /* tracing */                                                             \
  1196   notproduct(bool, TraceRuntimeCalls, false,                                \
  1197           "Trace run-time calls")                                           \
  1199   develop(bool, TraceJNICalls, false,                                       \
  1200           "Trace JNI calls")                                                \
  1202   notproduct(bool, TraceJVMCalls, false,                                    \
  1203           "Trace JVM calls")                                                \
  1205   product(ccstr, TraceJVMTI, NULL,                                          \
  1206           "Trace flags for JVMTI functions and events")                     \
  1208   /* This option can change an EMCP method into an obsolete method. */      \
  1209   /* This can affect tests that except specific methods to be EMCP. */      \
  1210   /* This option should be used with caution. */                            \
  1211   product(bool, StressLdcRewrite, false,                                    \
  1212           "Force ldc -> ldc_w rewrite during RedefineClasses")              \
  1214   product(intx, TraceRedefineClasses, 0,                                    \
  1215           "Trace level for JVMTI RedefineClasses")                          \
  1217   develop(bool, StressMethodComparator, false,                              \
  1218           "run the MethodComparator on all loaded methods")                 \
  1220   /* change to false by default sometime after Mustang */                   \
  1221   product(bool, VerifyMergedCPBytecodes, true,                              \
  1222           "Verify bytecodes after RedefineClasses constant pool merging")   \
  1224   develop(bool, TraceJNIHandleAllocation, false,                            \
  1225           "Trace allocation/deallocation of JNI handle blocks")             \
  1227   develop(bool, TraceThreadEvents, false,                                   \
  1228           "Trace all thread events")                                        \
  1230   develop(bool, TraceBytecodes, false,                                      \
  1231           "Trace bytecode execution")                                       \
  1233   develop(bool, TraceClassInitialization, false,                            \
  1234           "Trace class initialization")                                     \
  1236   develop(bool, TraceExceptions, false,                                     \
  1237           "Trace exceptions")                                               \
  1239   develop(bool, TraceICs, false,                                            \
  1240           "Trace inline cache changes")                                     \
  1242   notproduct(bool, TraceInvocationCounterOverflow, false,                   \
  1243           "Trace method invocation counter overflow")                       \
  1245   develop(bool, TraceInlineCacheClearing, false,                            \
  1246           "Trace clearing of inline caches in nmethods")                    \
  1248   develop(bool, TraceDependencies, false,                                   \
  1249           "Trace dependencies")                                             \
  1251   develop(bool, VerifyDependencies, trueInDebug,                            \
  1252          "Exercise and verify the compilation dependency mechanism")        \
  1254   develop(bool, TraceNewOopMapGeneration, false,                            \
  1255           "Trace OopMapGeneration")                                         \
  1257   develop(bool, TraceNewOopMapGenerationDetailed, false,                    \
  1258           "Trace OopMapGeneration: print detailed cell states")             \
  1260   develop(bool, TimeOopMap, false,                                          \
  1261           "Time calls to GenerateOopMap::compute_map() in sum")             \
  1263   develop(bool, TimeOopMap2, false,                                         \
  1264           "Time calls to GenerateOopMap::compute_map() individually")       \
  1266   develop(bool, TraceMonitorMismatch, false,                                \
  1267           "Trace monitor matching failures during OopMapGeneration")        \
  1269   develop(bool, TraceOopMapRewrites, false,                                 \
  1270           "Trace rewritting of method oops during oop map generation")      \
  1272   develop(bool, TraceSafepoint, false,                                      \
  1273           "Trace safepoint operations")                                     \
  1275   develop(bool, TraceICBuffer, false,                                       \
  1276           "Trace usage of IC buffer")                                       \
  1278   develop(bool, TraceCompiledIC, false,                                     \
  1279           "Trace changes of compiled IC")                                   \
  1281   notproduct(bool, TraceZapDeadLocals, false,                               \
  1282           "Trace zapping dead locals")                                      \
  1284   develop(bool, TraceStartupTime, false,                                    \
  1285           "Trace setup time")                                               \
  1287   develop(bool, TraceProtectionDomainVerification, false,                   \
  1288           "Trace protection domain verifcation")                            \
  1290   develop(bool, TraceClearedExceptions, false,                              \
  1291           "Prints when an exception is forcibly cleared")                   \
  1293   product(bool, TraceClassResolution, false,                                \
  1294           "Trace all constant pool resolutions (for debugging)")            \
  1296   product(bool, TraceBiasedLocking, false,                                  \
  1297           "Trace biased locking in JVM")                                    \
  1299   product(bool, TraceMonitorInflation, false,                               \
  1300           "Trace monitor inflation in JVM")                                 \
  1302   /* gc */                                                                  \
  1304   product(bool, UseSerialGC, false,                                         \
  1305           "Use the serial garbage collector")                               \
  1307   product(bool, UseG1GC, false,                                             \
  1308           "Use the Garbage-First garbage collector")                        \
  1310   product(bool, UseParallelGC, false,                                       \
  1311           "Use the Parallel Scavenge garbage collector")                    \
  1313   product(bool, UseParallelOldGC, false,                                    \
  1314           "Use the Parallel Old garbage collector")                         \
  1316   product(uintx, HeapMaximumCompactionInterval, 20,                         \
  1317           "How often should we maximally compact the heap (not allowing "   \
  1318           "any dead space)")                                                \
  1320   product(uintx, HeapFirstMaximumCompactionCount, 3,                        \
  1321           "The collection count for the first maximum compaction")          \
  1323   product(bool, UseMaximumCompactionOnSystemGC, true,                       \
  1324           "In the Parallel Old garbage collector maximum compaction for "   \
  1325           "a system GC")                                                    \
  1327   product(uintx, ParallelOldDeadWoodLimiterMean, 50,                        \
  1328           "The mean used by the par compact dead wood"                      \
  1329           "limiter (a number between 0-100).")                              \
  1331   product(uintx, ParallelOldDeadWoodLimiterStdDev, 80,                      \
  1332           "The standard deviation used by the par compact dead wood"        \
  1333           "limiter (a number between 0-100).")                              \
  1335   product(uintx, ParallelGCThreads, 0,                                      \
  1336           "Number of parallel threads parallel gc will use")                \
  1338   product(bool, UseDynamicNumberOfGCThreads, false,                         \
  1339           "Dynamically choose the number of parallel threads "              \
  1340           "parallel gc will use")                                           \
  1342   diagnostic(bool, ForceDynamicNumberOfGCThreads, false,                    \
  1343           "Force dynamic selection of the number of"                        \
  1344           "parallel threads parallel gc will use to aid debugging")         \
  1346   product(uintx, HeapSizePerGCThread, ScaleForWordSize(64*M),               \
  1347           "Size of heap (bytes) per GC thread used in calculating the "     \
  1348           "number of GC threads")                                           \
  1350   product(bool, TraceDynamicGCThreads, false,                               \
  1351           "Trace the dynamic GC thread usage")                              \
  1353   develop(bool, ParallelOldGCSplitALot, false,                              \
  1354           "Provoke splitting (copying data from a young gen space to"       \
  1355           "multiple destination spaces)")                                   \
  1357   develop(uintx, ParallelOldGCSplitInterval, 3,                             \
  1358           "How often to provoke splitting a young gen space")               \
  1360   product(uintx, ConcGCThreads, 0,                                          \
  1361           "Number of threads concurrent gc will use")                       \
  1363   product(uintx, YoungPLABSize, 4096,                                       \
  1364           "Size of young gen promotion labs (in HeapWords)")                \
  1366   product(uintx, OldPLABSize, 1024,                                         \
  1367           "Size of old gen promotion labs (in HeapWords)")                  \
  1369   product(uintx, GCTaskTimeStampEntries, 200,                               \
  1370           "Number of time stamp entries per gc worker thread")              \
  1372   product(bool, AlwaysTenure, false,                                        \
  1373           "Always tenure objects in eden. (ParallelGC only)")               \
  1375   product(bool, NeverTenure, false,                                         \
  1376           "Never tenure objects in eden, May tenure on overflow "           \
  1377           "(ParallelGC only)")                                              \
  1379   product(bool, ScavengeBeforeFullGC, true,                                 \
  1380           "Scavenge youngest generation before each full GC, "              \
  1381           "used with UseParallelGC")                                        \
  1383   develop(bool, ScavengeWithObjectsInToSpace, false,                        \
  1384           "Allow scavenges to occur when to_space contains objects.")       \
  1386   product(bool, UseConcMarkSweepGC, false,                                  \
  1387           "Use Concurrent Mark-Sweep GC in the old generation")             \
  1389   product(bool, ExplicitGCInvokesConcurrent, false,                         \
  1390           "A System.gc() request invokes a concurrent collection;"          \
  1391           " (effective only when UseConcMarkSweepGC)")                      \
  1393   product(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false,        \
  1394           "A System.gc() request invokes a concurrent collection and "      \
  1395           "also unloads classes during such a concurrent gc cycle "         \
  1396           "(effective only when UseConcMarkSweepGC)")                       \
  1398   product(bool, GCLockerInvokesConcurrent, false,                           \
  1399           "The exit of a JNI CS necessitating a scavenge also"              \
  1400           " kicks off a bkgrd concurrent collection")                       \
  1402   product(uintx, GCLockerEdenExpansionPercent, 5,                           \
  1403           "How much the GC can expand the eden by while the GC locker  "    \
  1404           "is active (as a percentage)")                                    \
  1406   develop(bool, UseCMSAdaptiveFreeLists, true,                              \
  1407           "Use Adaptive Free Lists in the CMS generation")                  \
  1409   develop(bool, UseAsyncConcMarkSweepGC, true,                              \
  1410           "Use Asynchronous Concurrent Mark-Sweep GC in the old generation")\
  1412   develop(bool, RotateCMSCollectionTypes, false,                            \
  1413           "Rotate the CMS collections among concurrent and STW")            \
  1415   product(bool, UseCMSBestFit, true,                                        \
  1416           "Use CMS best fit allocation strategy")                           \
  1418   product(bool, UseCMSCollectionPassing, true,                              \
  1419           "Use passing of collection from background to foreground")        \
  1421   product(bool, UseParNewGC, false,                                         \
  1422           "Use parallel threads in the new generation.")                    \
  1424   product(bool, ParallelGCVerbose, false,                                   \
  1425           "Verbose output for parallel GC.")                                \
  1427   product(intx, ParallelGCBufferWastePct, 10,                               \
  1428           "wasted fraction of parallel allocation buffer.")                 \
  1430   diagnostic(bool, ParallelGCRetainPLAB, false,                             \
  1431              "Retain parallel allocation buffers across scavenges; "        \
  1432              " -- disabled because this currently conflicts with "          \
  1433              " parallel card scanning under certain conditions ")           \
  1435   product(intx, TargetPLABWastePct, 10,                                     \
  1436           "target wasted space in last buffer as pct of overall allocation")\
  1438   product(uintx, PLABWeight, 75,                                            \
  1439           "Percentage (0-100) used to weight the current sample when"       \
  1440           "computing exponentially decaying average for ResizePLAB.")       \
  1442   product(bool, ResizePLAB, true,                                           \
  1443           "Dynamically resize (survivor space) promotion labs")             \
  1445   product(bool, PrintPLAB, false,                                           \
  1446           "Print (survivor space) promotion labs sizing decisions")         \
  1448   product(intx, ParGCArrayScanChunk, 50,                                    \
  1449           "Scan a subset and push remainder, if array is bigger than this") \
  1451   product(bool, ParGCUseLocalOverflow, false,                               \
  1452           "Instead of a global overflow list, use local overflow stacks")   \
  1454   product(bool, ParGCTrimOverflow, true,                                    \
  1455           "Eagerly trim the local overflow lists (when ParGCUseLocalOverflow") \
  1457   notproduct(bool, ParGCWorkQueueOverflowALot, false,                       \
  1458           "Whether we should simulate work queue overflow in ParNew")       \
  1460   notproduct(uintx, ParGCWorkQueueOverflowInterval, 1000,                   \
  1461           "An `interval' counter that determines how frequently "           \
  1462           "we simulate overflow; a smaller number increases frequency")     \
  1464   product(uintx, ParGCDesiredObjsFromOverflowList, 20,                      \
  1465           "The desired number of objects to claim from the overflow list")  \
  1467   diagnostic(uintx, ParGCStridesPerThread, 2,                               \
  1468           "The number of strides per worker thread that we divide up the "  \
  1469           "card table scanning work into")                                  \
  1471   diagnostic(intx, ParGCCardsPerStrideChunk, 256,                           \
  1472           "The number of cards in each chunk of the parallel chunks used "  \
  1473           "during card table scanning")                                     \
  1475   product(uintx, CMSParPromoteBlocksToClaim, 16,                            \
  1476           "Number of blocks to attempt to claim when refilling CMS LAB for "\
  1477           "parallel GC.")                                                   \
  1479   product(uintx, OldPLABWeight, 50,                                         \
  1480           "Percentage (0-100) used to weight the current sample when"       \
  1481           "computing exponentially decaying average for resizing CMSParPromoteBlocksToClaim.") \
  1483   product(bool, ResizeOldPLAB, true,                                        \
  1484           "Dynamically resize (old gen) promotion labs")                    \
  1486   product(bool, PrintOldPLAB, false,                                        \
  1487           "Print (old gen) promotion labs sizing decisions")                \
  1489   product(uintx, CMSOldPLABMin, 16,                                         \
  1490           "Min size of CMS gen promotion lab caches per worker per blksize")\
  1492   product(uintx, CMSOldPLABMax, 1024,                                       \
  1493           "Max size of CMS gen promotion lab caches per worker per blksize")\
  1495   product(uintx, CMSOldPLABNumRefills, 4,                                   \
  1496           "Nominal number of refills of CMS gen promotion lab cache"        \
  1497           " per worker per block size")                                     \
  1499   product(bool, CMSOldPLABResizeQuicker, false,                             \
  1500           "Whether to react on-the-fly during a scavenge to a sudden"       \
  1501           " change in block demand rate")                                   \
  1503   product(uintx, CMSOldPLABToleranceFactor, 4,                              \
  1504           "The tolerance of the phase-change detector for on-the-fly"       \
  1505           " PLAB resizing during a scavenge")                               \
  1507   product(uintx, CMSOldPLABReactivityFactor, 2,                             \
  1508           "The gain in the feedback loop for on-the-fly PLAB resizing"      \
  1509           " during a scavenge")                                             \
  1511   product(bool, AlwaysPreTouch, false,                                      \
  1512           "It forces all freshly committed pages to be pre-touched.")       \
  1514   product_pd(intx, CMSYoungGenPerWorker,                                    \
  1515           "The maximum size of young gen chosen by default per GC worker "  \
  1516           "thread available")                                               \
  1518   product(bool, CMSIncrementalMode, false,                                  \
  1519           "Whether CMS GC should operate in \"incremental\" mode")          \
  1521   product(uintx, CMSIncrementalDutyCycle, 10,                               \
  1522           "CMS incremental mode duty cycle (a percentage, 0-100).  If"      \
  1523           "CMSIncrementalPacing is enabled, then this is just the initial"  \
  1524           "value")                                                          \
  1526   product(bool, CMSIncrementalPacing, true,                                 \
  1527           "Whether the CMS incremental mode duty cycle should be "          \
  1528           "automatically adjusted")                                         \
  1530   product(uintx, CMSIncrementalDutyCycleMin, 0,                             \
  1531           "Lower bound on the duty cycle when CMSIncrementalPacing is "     \
  1532           "enabled (a percentage, 0-100)")                                  \
  1534   product(uintx, CMSIncrementalSafetyFactor, 10,                            \
  1535           "Percentage (0-100) used to add conservatism when computing the " \
  1536           "duty cycle")                                                     \
  1538   product(uintx, CMSIncrementalOffset, 0,                                   \
  1539           "Percentage (0-100) by which the CMS incremental mode duty cycle" \
  1540           " is shifted to the right within the period between young GCs")   \
  1542   product(uintx, CMSExpAvgFactor, 50,                                       \
  1543           "Percentage (0-100) used to weight the current sample when"       \
  1544           "computing exponential averages for CMS statistics.")             \
  1546   product(uintx, CMS_FLSWeight, 75,                                         \
  1547           "Percentage (0-100) used to weight the current sample when"       \
  1548           "computing exponentially decating averages for CMS FLS statistics.") \
  1550   product(uintx, CMS_FLSPadding, 1,                                         \
  1551           "The multiple of deviation from mean to use for buffering"        \
  1552           "against volatility in free list demand.")                        \
  1554   product(uintx, FLSCoalescePolicy, 2,                                      \
  1555           "CMS: Aggression level for coalescing, increasing from 0 to 4")   \
  1557   product(bool, FLSAlwaysCoalesceLarge, false,                              \
  1558           "CMS: Larger free blocks are always available for coalescing")    \
  1560   product(double, FLSLargestBlockCoalesceProximity, 0.99,                   \
  1561           "CMS: the smaller the percentage the greater the coalition force")\
  1563   product(double, CMSSmallCoalSurplusPercent, 1.05,                         \
  1564           "CMS: the factor by which to inflate estimated demand of small"   \
  1565           " block sizes to prevent coalescing with an adjoining block")     \
  1567   product(double, CMSLargeCoalSurplusPercent, 0.95,                         \
  1568           "CMS: the factor by which to inflate estimated demand of large"   \
  1569           " block sizes to prevent coalescing with an adjoining block")     \
  1571   product(double, CMSSmallSplitSurplusPercent, 1.10,                        \
  1572           "CMS: the factor by which to inflate estimated demand of small"   \
  1573           " block sizes to prevent splitting to supply demand for smaller"  \
  1574           " blocks")                                                        \
  1576   product(double, CMSLargeSplitSurplusPercent, 1.00,                        \
  1577           "CMS: the factor by which to inflate estimated demand of large"   \
  1578           " block sizes to prevent splitting to supply demand for smaller"  \
  1579           " blocks")                                                        \
  1581   product(bool, CMSExtrapolateSweep, false,                                 \
  1582           "CMS: cushion for block demand during sweep")                     \
  1584   product(uintx, CMS_SweepWeight, 75,                                       \
  1585           "Percentage (0-100) used to weight the current sample when "      \
  1586           "computing exponentially decaying average for inter-sweep "       \
  1587           "duration")                                                       \
  1589   product(uintx, CMS_SweepPadding, 1,                                       \
  1590           "The multiple of deviation from mean to use for buffering "       \
  1591           "against volatility in inter-sweep duration.")                    \
  1593   product(uintx, CMS_SweepTimerThresholdMillis, 10,                         \
  1594           "Skip block flux-rate sampling for an epoch unless inter-sweep "  \
  1595           "duration exceeds this threhold in milliseconds")                 \
  1597   develop(bool, CMSTraceIncrementalMode, false,                             \
  1598           "Trace CMS incremental mode")                                     \
  1600   develop(bool, CMSTraceIncrementalPacing, false,                           \
  1601           "Trace CMS incremental mode pacing computation")                  \
  1603   develop(bool, CMSTraceThreadState, false,                                 \
  1604           "Trace the CMS thread state (enable the trace_state() method)")   \
  1606   product(bool, CMSClassUnloadingEnabled, false,                            \
  1607           "Whether class unloading enabled when using CMS GC")              \
  1609   product(uintx, CMSClassUnloadingMaxInterval, 0,                           \
  1610           "When CMS class unloading is enabled, the maximum CMS cycle count"\
  1611           " for which classes may not be unloaded")                         \
  1613   product(bool, CMSCompactWhenClearAllSoftRefs, true,                       \
  1614           "Compact when asked to collect CMS gen with clear_all_soft_refs") \
  1616   product(bool, UseCMSCompactAtFullCollection, true,                        \
  1617           "Use mark sweep compact at full collections")                     \
  1619   product(uintx, CMSFullGCsBeforeCompaction, 0,                             \
  1620           "Number of CMS full collection done before compaction if > 0")    \
  1622   develop(intx, CMSDictionaryChoice, 0,                                     \
  1623           "Use BinaryTreeDictionary as default in the CMS generation")      \
  1625   product(uintx, CMSIndexedFreeListReplenish, 4,                            \
  1626           "Replenish an indexed free list with this number of chunks")      \
  1628   product(bool, CMSReplenishIntermediate, true,                             \
  1629           "Replenish all intermediate free-list caches")                    \
  1631   product(bool, CMSSplitIndexedFreeListBlocks, true,                        \
  1632           "When satisfying batched demand, split blocks from the "          \
  1633           "IndexedFreeList whose size is a multiple of requested size")     \
  1635   product(bool, CMSLoopWarn, false,                                         \
  1636           "Warn in case of excessive CMS looping")                          \
  1638   develop(bool, CMSOverflowEarlyRestoration, false,                         \
  1639           "Whether preserved marks should be restored early")               \
  1641   product(uintx, MarkStackSize, NOT_LP64(32*K) LP64_ONLY(4*M),              \
  1642           "Size of marking stack")                                          \
  1644   product(uintx, MarkStackSizeMax, NOT_LP64(4*M) LP64_ONLY(512*M),          \
  1645           "Max size of marking stack")                                      \
  1647   notproduct(bool, CMSMarkStackOverflowALot, false,                         \
  1648           "Whether we should simulate frequent marking stack / work queue"  \
  1649           " overflow")                                                      \
  1651   notproduct(uintx, CMSMarkStackOverflowInterval, 1000,                     \
  1652           "An `interval' counter that determines how frequently"            \
  1653           " we simulate overflow; a smaller number increases frequency")    \
  1655   product(uintx, CMSMaxAbortablePrecleanLoops, 0,                           \
  1656           "(Temporary, subject to experimentation)"                         \
  1657           "Maximum number of abortable preclean iterations, if > 0")        \
  1659   product(intx, CMSMaxAbortablePrecleanTime, 5000,                          \
  1660           "(Temporary, subject to experimentation)"                         \
  1661           "Maximum time in abortable preclean in ms")                       \
  1663   product(uintx, CMSAbortablePrecleanMinWorkPerIteration, 100,              \
  1664           "(Temporary, subject to experimentation)"                         \
  1665           "Nominal minimum work per abortable preclean iteration")          \
  1667   manageable(intx, CMSAbortablePrecleanWaitMillis, 100,                     \
  1668           "(Temporary, subject to experimentation)"                         \
  1669           " Time that we sleep between iterations when not given"           \
  1670           " enough work per iteration")                                     \
  1672   product(uintx, CMSRescanMultiple, 32,                                     \
  1673           "Size (in cards) of CMS parallel rescan task")                    \
  1675   product(uintx, CMSConcMarkMultiple, 32,                                   \
  1676           "Size (in cards) of CMS concurrent MT marking task")              \
  1678   product(bool, CMSAbortSemantics, false,                                   \
  1679           "Whether abort-on-overflow semantics is implemented")             \
  1681   product(bool, CMSParallelRemarkEnabled, true,                             \
  1682           "Whether parallel remark enabled (only if ParNewGC)")             \
  1684   product(bool, CMSParallelSurvivorRemarkEnabled, true,                     \
  1685           "Whether parallel remark of survivor space"                       \
  1686           " enabled (effective only if CMSParallelRemarkEnabled)")          \
  1688   product(bool, CMSPLABRecordAlways, true,                                  \
  1689           "Whether to always record survivor space PLAB bdries"             \
  1690           " (effective only if CMSParallelSurvivorRemarkEnabled)")          \
  1692   product(bool, CMSConcurrentMTEnabled, true,                               \
  1693           "Whether multi-threaded concurrent work enabled (if ParNewGC)")   \
  1695   product(bool, CMSPrecleaningEnabled, true,                                \
  1696           "Whether concurrent precleaning enabled")                         \
  1698   product(uintx, CMSPrecleanIter, 3,                                        \
  1699           "Maximum number of precleaning iteration passes")                 \
  1701   product(uintx, CMSPrecleanNumerator, 2,                                   \
  1702           "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence"  \
  1703           " ratio")                                                         \
  1705   product(uintx, CMSPrecleanDenominator, 3,                                 \
  1706           "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence"  \
  1707           " ratio")                                                         \
  1709   product(bool, CMSPrecleanRefLists1, true,                                 \
  1710           "Preclean ref lists during (initial) preclean phase")             \
  1712   product(bool, CMSPrecleanRefLists2, false,                                \
  1713           "Preclean ref lists during abortable preclean phase")             \
  1715   product(bool, CMSPrecleanSurvivors1, false,                               \
  1716           "Preclean survivors during (initial) preclean phase")             \
  1718   product(bool, CMSPrecleanSurvivors2, true,                                \
  1719           "Preclean survivors during abortable preclean phase")             \
  1721   product(uintx, CMSPrecleanThreshold, 1000,                                \
  1722           "Don't re-iterate if #dirty cards less than this")                \
  1724   product(bool, CMSCleanOnEnter, true,                                      \
  1725           "Clean-on-enter optimization for reducing number of dirty cards") \
  1727   product(uintx, CMSRemarkVerifyVariant, 1,                                 \
  1728           "Choose variant (1,2) of verification following remark")          \
  1730   product(uintx, CMSScheduleRemarkEdenSizeThreshold, 2*M,                   \
  1731           "If Eden used is below this value, don't try to schedule remark") \
  1733   product(uintx, CMSScheduleRemarkEdenPenetration, 50,                      \
  1734           "The Eden occupancy % at which to try and schedule remark pause") \
  1736   product(uintx, CMSScheduleRemarkSamplingRatio, 5,                         \
  1737           "Start sampling Eden top at least before yg occupancy reaches"    \
  1738           " 1/<ratio> of the size at which we plan to schedule remark")     \
  1740   product(uintx, CMSSamplingGrain, 16*K,                                    \
  1741           "The minimum distance between eden samples for CMS (see above)")  \
  1743   product(bool, CMSScavengeBeforeRemark, false,                             \
  1744           "Attempt scavenge before the CMS remark step")                    \
  1746   develop(bool, CMSTraceSweeper, false,                                     \
  1747           "Trace some actions of the CMS sweeper")                          \
  1749   product(uintx, CMSWorkQueueDrainThreshold, 10,                            \
  1750           "Don't drain below this size per parallel worker/thief")          \
  1752   manageable(intx, CMSWaitDuration, 2000,                                   \
  1753           "Time in milliseconds that CMS thread waits for young GC")        \
  1755   product(bool, CMSYield, true,                                             \
  1756           "Yield between steps of concurrent mark & sweep")                 \
  1758   product(uintx, CMSBitMapYieldQuantum, 10*M,                               \
  1759           "Bitmap operations should process at most this many bits"         \
  1760           "between yields")                                                 \
  1762   product(bool, CMSDumpAtPromotionFailure, false,                           \
  1763           "Dump useful information about the state of the CMS old "         \
  1764           " generation upon a promotion failure.")                          \
  1766   product(bool, CMSPrintChunksInDump, false,                                \
  1767           "In a dump enabled by CMSDumpAtPromotionFailure, include "        \
  1768           " more detailed information about the free chunks.")              \
  1770   product(bool, CMSPrintObjectsInDump, false,                               \
  1771           "In a dump enabled by CMSDumpAtPromotionFailure, include "        \
  1772           " more detailed information about the allocated objects.")        \
  1774   diagnostic(bool, FLSVerifyAllHeapReferences, false,                       \
  1775           "Verify that all refs across the FLS boundary "                   \
  1776           " are to valid objects")                                          \
  1778   diagnostic(bool, FLSVerifyLists, false,                                   \
  1779           "Do lots of (expensive) FreeListSpace verification")              \
  1781   diagnostic(bool, FLSVerifyIndexTable, false,                              \
  1782           "Do lots of (expensive) FLS index table verification")            \
  1784   develop(bool, FLSVerifyDictionary, false,                                 \
  1785           "Do lots of (expensive) FLS dictionary verification")             \
  1787   develop(bool, VerifyBlockOffsetArray, false,                              \
  1788           "Do (expensive!) block offset array verification")                \
  1790   diagnostic(bool, BlockOffsetArrayUseUnallocatedBlock, false,              \
  1791           "Maintain _unallocated_block in BlockOffsetArray"                 \
  1792           " (currently applicable only to CMS collector)")                  \
  1794   develop(bool, TraceCMSState, false,                                       \
  1795           "Trace the state of the CMS collection")                          \
  1797   product(intx, RefDiscoveryPolicy, 0,                                      \
  1798           "Whether reference-based(0) or referent-based(1)")                \
  1800   product(bool, ParallelRefProcEnabled, false,                              \
  1801           "Enable parallel reference processing whenever possible")         \
  1803   product(bool, ParallelRefProcBalancingEnabled, true,                      \
  1804           "Enable balancing of reference processing queues")                \
  1806   product(intx, CMSTriggerRatio, 80,                                        \
  1807           "Percentage of MinHeapFreeRatio in CMS generation that is "       \
  1808           "allocated before a CMS collection cycle commences")              \
  1810   product(uintx, CMSBootstrapOccupancy, 50,                                 \
  1811           "Percentage CMS generation occupancy at which to "                \
  1812           "initiate CMS collection for bootstrapping collection stats")     \
  1814   product(intx, CMSInitiatingOccupancyFraction, -1,                         \
  1815           "Percentage CMS generation occupancy to start a CMS collection "  \
  1816           "cycle. A negative value means that CMSTriggerRatio is used")     \
  1818   product(uintx, InitiatingHeapOccupancyPercent, 45,                        \
  1819           "Percentage of the (entire) heap occupancy to start a "           \
  1820           "concurrent GC cycle. It us used by GCs that trigger a "          \
  1821           "concurrent GC cycle based on the occupancy of the entire heap, " \
  1822           "not just one of the generations (e.g., G1). A value of 0 "       \
  1823           "denotes 'do constant GC cycles'.")                               \
  1825   product(bool, UseCMSInitiatingOccupancyOnly, false,                       \
  1826           "Only use occupancy as a crierion for starting a CMS collection") \
  1828   product(intx, CMSIsTooFullPercentage, 98,                                 \
  1829           "An absolute ceiling above which CMS will always consider the "   \
  1830           "perm gen ripe for collection")                                   \
  1832   develop(bool, CMSTestInFreeList, false,                                   \
  1833           "Check if the coalesced range is already in the "                 \
  1834           "free lists as claimed")                                          \
  1836   notproduct(bool, CMSVerifyReturnedBytes, false,                           \
  1837           "Check that all the garbage collected was returned to the "       \
  1838           "free lists.")                                                    \
  1840   notproduct(bool, ScavengeALot, false,                                     \
  1841           "Force scavenge at every Nth exit from the runtime system "       \
  1842           "(N=ScavengeALotInterval)")                                       \
  1844   develop(bool, FullGCALot, false,                                          \
  1845           "Force full gc at every Nth exit from the runtime system "        \
  1846           "(N=FullGCALotInterval)")                                         \
  1848   notproduct(bool, GCALotAtAllSafepoints, false,                            \
  1849           "Enforce ScavengeALot/GCALot at all potential safepoints")        \
  1851   product(bool, PrintPromotionFailure, false,                               \
  1852           "Print additional diagnostic information following "              \
  1853           " promotion failure")                                             \
  1855   notproduct(bool, PromotionFailureALot, false,                             \
  1856           "Use promotion failure handling on every youngest generation "    \
  1857           "collection")                                                     \
  1859   develop(uintx, PromotionFailureALotCount, 1000,                           \
  1860           "Number of promotion failures occurring at ParGCAllocBuffer"      \
  1861           "refill attempts (ParNew) or promotion attempts "                 \
  1862           "(other young collectors) ")                                      \
  1864   develop(uintx, PromotionFailureALotInterval, 5,                           \
  1865           "Total collections between promotion failures alot")              \
  1867   experimental(intx, WorkStealingSleepMillis, 1,                            \
  1868           "Sleep time when sleep is used for yields")                       \
  1870   experimental(uintx, WorkStealingYieldsBeforeSleep, 5000,                  \
  1871           "Number of yields before a sleep is done during workstealing")    \
  1873   experimental(uintx, WorkStealingHardSpins, 4096,                          \
  1874           "Number of iterations in a spin loop between checks on "          \
  1875           "time out of hard spin")                                          \
  1877   experimental(uintx, WorkStealingSpinToYieldRatio, 10,                     \
  1878           "Ratio of hard spins to calls to yield")                          \
  1880   develop(uintx, ObjArrayMarkingStride, 512,                                \
  1881           "Number of ObjArray elements to push onto the marking stack"      \
  1882           "before pushing a continuation entry")                            \
  1884   develop(bool, MetadataAllocationFailALot, false,                          \
  1885           "Fail metadata allocations at intervals controlled by "           \
  1886           "MetadataAllocationFailALotInterval")                             \
  1888   develop(uintx, MetadataAllocationFailALotInterval, 1000,                  \
  1889           "metadata allocation failure alot interval")                      \
  1891   develop(bool, MetaDataDeallocateALot, false,                              \
  1892           "Deallocation bunches of metadata at intervals controlled by "    \
  1893           "MetaDataAllocateALotInterval")                                   \
  1895   develop(uintx, MetaDataDeallocateALotInterval, 100,                       \
  1896           "Metadata deallocation alot interval")                            \
  1898   develop(bool, TraceMetadataChunkAllocation, false,                        \
  1899           "Trace humongous metadata allocations")                           \
  1901   product(bool, TraceMetadataHumongousAllocation, false,                    \
  1902           "Trace humongous metadata allocations")                           \
  1904   develop(bool, TraceMetavirtualspaceAllocation, false,                     \
  1905           "Trace humongous metadata allocations")                           \
  1907   notproduct(bool, ExecuteInternalVMTests, false,                           \
  1908           "Enable execution of internal VM tests.")                         \
  1910   product_pd(bool, UseTLAB, "Use thread-local object allocation")           \
  1912   product_pd(bool, ResizeTLAB,                                              \
  1913           "Dynamically resize tlab size for threads")                       \
  1915   product(bool, ZeroTLAB, false,                                            \
  1916           "Zero out the newly created TLAB")                                \
  1918   product(bool, FastTLABRefill, true,                                       \
  1919           "Use fast TLAB refill code")                                      \
  1921   product(bool, PrintTLAB, false,                                           \
  1922           "Print various TLAB related information")                         \
  1924   product(bool, TLABStats, true,                                            \
  1925           "Print various TLAB related information")                         \
  1927   EMBEDDED_ONLY(product(bool, LowMemoryProtection, true,                    \
  1928           "Enable LowMemoryProtection"))                                    \
  1930   product_pd(bool, NeverActAsServerClassMachine,                            \
  1931           "Never act like a server-class machine")                          \
  1933   product(bool, AlwaysActAsServerClassMachine, false,                       \
  1934           "Always act like a server-class machine")                         \
  1936   product_pd(uint64_t, MaxRAM,                                              \
  1937           "Real memory size (in bytes) used to set maximum heap size")      \
  1939   product(uintx, ErgoHeapSizeLimit, 0,                                      \
  1940           "Maximum ergonomically set heap size (in bytes); zero means use " \
  1941           "MaxRAM / MaxRAMFraction")                                        \
  1943   product(uintx, MaxRAMFraction, 4,                                         \
  1944           "Maximum fraction (1/n) of real memory used for maximum heap "    \
  1945           "size")                                                           \
  1947   product(uintx, DefaultMaxRAMFraction, 4,                                  \
  1948           "Maximum fraction (1/n) of real memory used for maximum heap "    \
  1949           "size; deprecated: to be renamed to MaxRAMFraction")              \
  1951   product(uintx, MinRAMFraction, 2,                                         \
  1952           "Minimum fraction (1/n) of real memory used for maxmimum heap "   \
  1953           "size on systems with small physical memory size")                \
  1955   product(uintx, InitialRAMFraction, 64,                                    \
  1956           "Fraction (1/n) of real memory used for initial heap size")       \
  1958   product(bool, UseAutoGCSelectPolicy, false,                               \
  1959           "Use automatic collection selection policy")                      \
  1961   product(uintx, AutoGCSelectPauseMillis, 5000,                             \
  1962           "Automatic GC selection pause threshhold in ms")                  \
  1964   product(bool, UseAdaptiveSizePolicy, true,                                \
  1965           "Use adaptive generation sizing policies")                        \
  1967   product(bool, UsePSAdaptiveSurvivorSizePolicy, true,                      \
  1968           "Use adaptive survivor sizing policies")                          \
  1970   product(bool, UseAdaptiveGenerationSizePolicyAtMinorCollection, true,     \
  1971           "Use adaptive young-old sizing policies at minor collections")    \
  1973   product(bool, UseAdaptiveGenerationSizePolicyAtMajorCollection, true,     \
  1974           "Use adaptive young-old sizing policies at major collections")    \
  1976   product(bool, UseAdaptiveSizePolicyWithSystemGC, false,                   \
  1977           "Use statistics from System.GC for adaptive size policy")         \
  1979   product(bool, UseAdaptiveGCBoundary, false,                               \
  1980           "Allow young-old boundary to move")                               \
  1982   develop(bool, TraceAdaptiveGCBoundary, false,                             \
  1983           "Trace young-old boundary moves")                                 \
  1985   develop(intx, PSAdaptiveSizePolicyResizeVirtualSpaceAlot, -1,             \
  1986           "Resize the virtual spaces of the young or old generations")      \
  1988   product(uintx, AdaptiveSizeThroughPutPolicy, 0,                           \
  1989           "Policy for changeing generation size for throughput goals")      \
  1991   product(uintx, AdaptiveSizePausePolicy, 0,                                \
  1992           "Policy for changing generation size for pause goals")            \
  1994   develop(bool, PSAdjustTenuredGenForMinorPause, false,                     \
  1995           "Adjust tenured generation to achive a minor pause goal")         \
  1997   develop(bool, PSAdjustYoungGenForMajorPause, false,                       \
  1998           "Adjust young generation to achive a major pause goal")           \
  2000   product(uintx, AdaptiveSizePolicyInitializingSteps, 20,                   \
  2001           "Number of steps where heuristics is used before data is used")   \
  2003   develop(uintx, AdaptiveSizePolicyReadyThreshold, 5,                       \
  2004           "Number of collections before the adaptive sizing is started")    \
  2006   product(uintx, AdaptiveSizePolicyOutputInterval, 0,                       \
  2007           "Collecton interval for printing information; zero => never")     \
  2009   product(bool, UseAdaptiveSizePolicyFootprintGoal, true,                   \
  2010           "Use adaptive minimum footprint as a goal")                       \
  2012   product(uintx, AdaptiveSizePolicyWeight, 10,                              \
  2013           "Weight given to exponential resizing, between 0 and 100")        \
  2015   product(uintx, AdaptiveTimeWeight,       25,                              \
  2016           "Weight given to time in adaptive policy, between 0 and 100")     \
  2018   product(uintx, PausePadding, 1,                                           \
  2019           "How much buffer to keep for pause time")                         \
  2021   product(uintx, PromotedPadding, 3,                                        \
  2022           "How much buffer to keep for promotion failure")                  \
  2024   product(uintx, SurvivorPadding, 3,                                        \
  2025           "How much buffer to keep for survivor overflow")                  \
  2027   product(uintx, ThresholdTolerance, 10,                                    \
  2028           "Allowed collection cost difference between generations")         \
  2030   product(uintx, AdaptiveSizePolicyCollectionCostMargin, 50,                \
  2031           "If collection costs are within margin, reduce both by full "     \
  2032           "delta")                                                          \
  2034   product(uintx, YoungGenerationSizeIncrement, 20,                          \
  2035           "Adaptive size percentage change in young generation")            \
  2037   product(uintx, YoungGenerationSizeSupplement, 80,                         \
  2038           "Supplement to YoungedGenerationSizeIncrement used at startup")   \
  2040   product(uintx, YoungGenerationSizeSupplementDecay, 8,                     \
  2041           "Decay factor to YoungedGenerationSizeSupplement")                \
  2043   product(uintx, TenuredGenerationSizeIncrement, 20,                        \
  2044           "Adaptive size percentage change in tenured generation")          \
  2046   product(uintx, TenuredGenerationSizeSupplement, 80,                       \
  2047           "Supplement to TenuredGenerationSizeIncrement used at startup")   \
  2049   product(uintx, TenuredGenerationSizeSupplementDecay, 2,                   \
  2050           "Decay factor to TenuredGenerationSizeIncrement")                 \
  2052   product(uintx, MaxGCPauseMillis, max_uintx,                               \
  2053           "Adaptive size policy maximum GC pause time goal in msec, "       \
  2054           "or (G1 Only) the max. GC time per MMU time slice")               \
  2056   product(uintx, GCPauseIntervalMillis, 0,                                  \
  2057           "Time slice for MMU specification")                               \
  2059   product(uintx, MaxGCMinorPauseMillis, max_uintx,                          \
  2060           "Adaptive size policy maximum GC minor pause time goal in msec")  \
  2062   product(uintx, GCTimeRatio, 99,                                           \
  2063           "Adaptive size policy application time to GC time ratio")         \
  2065   product(uintx, AdaptiveSizeDecrementScaleFactor, 4,                       \
  2066           "Adaptive size scale down factor for shrinking")                  \
  2068   product(bool, UseAdaptiveSizeDecayMajorGCCost, true,                      \
  2069           "Adaptive size decays the major cost for long major intervals")   \
  2071   product(uintx, AdaptiveSizeMajorGCDecayTimeScale, 10,                     \
  2072           "Time scale over which major costs decay")                        \
  2074   product(uintx, MinSurvivorRatio, 3,                                       \
  2075           "Minimum ratio of young generation/survivor space size")          \
  2077   product(uintx, InitialSurvivorRatio, 8,                                   \
  2078           "Initial ratio of eden/survivor space size")                      \
  2080   product(uintx, BaseFootPrintEstimate, 256*M,                              \
  2081           "Estimate of footprint other than Java Heap")                     \
  2083   product(bool, UseGCOverheadLimit, true,                                   \
  2084           "Use policy to limit of proportion of time spent in GC "          \
  2085           "before an OutOfMemory error is thrown")                          \
  2087   product(uintx, GCTimeLimit, 98,                                           \
  2088           "Limit of proportion of time spent in GC before an OutOfMemory"   \
  2089           "error is thrown (used with GCHeapFreeLimit)")                    \
  2091   product(uintx, GCHeapFreeLimit, 2,                                        \
  2092           "Minimum percentage of free space after a full GC before an "     \
  2093           "OutOfMemoryError is thrown (used with GCTimeLimit)")             \
  2095   develop(uintx, AdaptiveSizePolicyGCTimeLimitThreshold, 5,                 \
  2096           "Number of consecutive collections before gc time limit fires")   \
  2098   product(bool, PrintAdaptiveSizePolicy, false,                             \
  2099           "Print information about AdaptiveSizePolicy")                     \
  2101   product(intx, PrefetchCopyIntervalInBytes, -1,                            \
  2102           "How far ahead to prefetch destination area (<= 0 means off)")    \
  2104   product(intx, PrefetchScanIntervalInBytes, -1,                            \
  2105           "How far ahead to prefetch scan area (<= 0 means off)")           \
  2107   product(intx, PrefetchFieldsAhead, -1,                                    \
  2108           "How many fields ahead to prefetch in oop scan (<= 0 means off)") \
  2110   diagnostic(bool, VerifyBeforeExit, trueInDebug,                           \
  2111           "Verify system before exiting")                                   \
  2113   diagnostic(bool, VerifyBeforeGC, false,                                   \
  2114           "Verify memory system before GC")                                 \
  2116   diagnostic(bool, VerifyAfterGC, false,                                    \
  2117           "Verify memory system after GC")                                  \
  2119   diagnostic(bool, VerifyDuringGC, false,                                   \
  2120           "Verify memory system during GC (between phases)")                \
  2122   diagnostic(bool, GCParallelVerificationEnabled, true,                     \
  2123           "Enable parallel memory system verification")                     \
  2125   diagnostic(bool, DeferInitialCardMark, false,                             \
  2126           "When +ReduceInitialCardMarks, explicitly defer any that "        \
  2127            "may arise from new_pre_store_barrier")                          \
  2129   diagnostic(bool, VerifyRememberedSets, false,                             \
  2130           "Verify GC remembered sets")                                      \
  2132   diagnostic(bool, VerifyObjectStartArray, true,                            \
  2133           "Verify GC object start array if verify before/after")            \
  2135   product(bool, DisableExplicitGC, false,                                   \
  2136           "Tells whether calling System.gc() does a full GC")               \
  2138   notproduct(bool, CheckMemoryInitialization, false,                        \
  2139           "Checks memory initialization")                                   \
  2141   product(bool, CollectGen0First, false,                                    \
  2142           "Collect youngest generation before each full GC")                \
  2144   diagnostic(bool, BindCMSThreadToCPU, false,                               \
  2145           "Bind CMS Thread to CPU if possible")                             \
  2147   diagnostic(uintx, CPUForCMSThread, 0,                                     \
  2148           "When BindCMSThreadToCPU is true, the CPU to bind CMS thread to") \
  2150   product(bool, BindGCTaskThreadsToCPUs, false,                             \
  2151           "Bind GCTaskThreads to CPUs if possible")                         \
  2153   product(bool, UseGCTaskAffinity, false,                                   \
  2154           "Use worker affinity when asking for GCTasks")                    \
  2156   product(uintx, ProcessDistributionStride, 4,                              \
  2157           "Stride through processors when distributing processes")          \
  2159   product(uintx, CMSCoordinatorYieldSleepCount, 10,                         \
  2160           "number of times the coordinator GC thread will sleep while "     \
  2161           "yielding before giving up and resuming GC")                      \
  2163   product(uintx, CMSYieldSleepCount, 0,                                     \
  2164           "number of times a GC thread (minus the coordinator) "            \
  2165           "will sleep while yielding before giving up and resuming GC")     \
  2167   /* gc tracing */                                                          \
  2168   manageable(bool, PrintGC, false,                                          \
  2169           "Print message at garbage collect")                               \
  2171   manageable(bool, PrintGCDetails, false,                                   \
  2172           "Print more details at garbage collect")                          \
  2174   manageable(bool, PrintGCDateStamps, false,                                \
  2175           "Print date stamps at garbage collect")                           \
  2177   manageable(bool, PrintGCTimeStamps, false,                                \
  2178           "Print timestamps at garbage collect")                            \
  2180   product(bool, PrintGCTaskTimeStamps, false,                               \
  2181           "Print timestamps for individual gc worker thread tasks")         \
  2183   develop(intx, ConcGCYieldTimeout, 0,                                      \
  2184           "If non-zero, assert that GC threads yield within this # of ms.") \
  2186   notproduct(bool, TraceMarkSweep, false,                                   \
  2187           "Trace mark sweep")                                               \
  2189   product(bool, PrintReferenceGC, false,                                    \
  2190           "Print times spent handling reference objects during GC "         \
  2191           " (enabled only when PrintGCDetails)")                            \
  2193   develop(bool, TraceReferenceGC, false,                                    \
  2194           "Trace handling of soft/weak/final/phantom references")           \
  2196   develop(bool, TraceFinalizerRegistration, false,                          \
  2197          "Trace registration of final references")                          \
  2199   notproduct(bool, TraceScavenge, false,                                    \
  2200           "Trace scavenge")                                                 \
  2202   product_rw(bool, TraceClassLoading, false,                                \
  2203           "Trace all classes loaded")                                       \
  2205   product(bool, TraceClassLoadingPreorder, false,                           \
  2206           "Trace all classes loaded in order referenced (not loaded)")      \
  2208   product_rw(bool, TraceClassUnloading, false,                              \
  2209           "Trace unloading of classes")                                     \
  2211   product_rw(bool, TraceLoaderConstraints, false,                           \
  2212           "Trace loader constraints")                                       \
  2214   develop(bool, TraceClassLoaderData, false,                                \
  2215           "Trace class loader loader_data lifetime")                        \
  2217   product(uintx, InitialBootClassLoaderMetaspaceSize, 3*M,                  \
  2218           "Initial size of the boot class loader data metaspace")           \
  2220   product(bool, TraceGen0Time, false,                                       \
  2221           "Trace accumulated time for Gen 0 collection")                    \
  2223   product(bool, TraceGen1Time, false,                                       \
  2224           "Trace accumulated time for Gen 1 collection")                    \
  2226   product(bool, PrintTenuringDistribution, false,                           \
  2227           "Print tenuring age information")                                 \
  2229   product_rw(bool, PrintHeapAtGC, false,                                    \
  2230           "Print heap layout before and after each GC")                     \
  2232   product_rw(bool, PrintHeapAtGCExtended, false,                            \
  2233           "Prints extended information about the layout of the heap "       \
  2234           "when -XX:+PrintHeapAtGC is set")                                 \
  2236   product(bool, PrintHeapAtSIGBREAK, true,                                  \
  2237           "Print heap layout in response to SIGBREAK")                      \
  2239   manageable(bool, PrintClassHistogramBeforeFullGC, false,                  \
  2240           "Print a class histogram before any major stop-world GC")         \
  2242   manageable(bool, PrintClassHistogramAfterFullGC, false,                   \
  2243           "Print a class histogram after any major stop-world GC")          \
  2245   manageable(bool, PrintClassHistogram, false,                              \
  2246           "Print a histogram of class instances")                           \
  2248   develop(bool, TraceWorkGang, false,                                       \
  2249           "Trace activities of work gangs")                                 \
  2251   product(bool, TraceParallelOldGCTasks, false,                             \
  2252           "Trace multithreaded GC activity")                                \
  2254   develop(bool, TraceBlockOffsetTable, false,                               \
  2255           "Print BlockOffsetTable maps")                                    \
  2257   develop(bool, TraceCardTableModRefBS, false,                              \
  2258           "Print CardTableModRefBS maps")                                   \
  2260   develop(bool, TraceGCTaskManager, false,                                  \
  2261           "Trace actions of the GC task manager")                           \
  2263   develop(bool, TraceGCTaskQueue, false,                                    \
  2264           "Trace actions of the GC task queues")                            \
  2266   diagnostic(bool, TraceGCTaskThread, false,                                \
  2267           "Trace actions of the GC task threads")                           \
  2269   product(bool, PrintParallelOldGCPhaseTimes, false,                        \
  2270           "Print the time taken by each parallel old gc phase."             \
  2271           "PrintGCDetails must also be enabled.")                           \
  2273   develop(bool, TraceParallelOldGCMarkingPhase, false,                      \
  2274           "Trace parallel old gc marking phase")                            \
  2276   develop(bool, TraceParallelOldGCSummaryPhase, false,                      \
  2277           "Trace parallel old gc summary phase")                            \
  2279   develop(bool, TraceParallelOldGCCompactionPhase, false,                   \
  2280           "Trace parallel old gc compaction phase")                         \
  2282   develop(bool, TraceParallelOldGCDensePrefix, false,                       \
  2283           "Trace parallel old gc dense prefix computation")                 \
  2285   develop(bool, IgnoreLibthreadGPFault, false,                              \
  2286           "Suppress workaround for libthread GP fault")                     \
  2288   product(bool, PrintJNIGCStalls, false,                                    \
  2289           "Print diagnostic message when GC is stalled"                     \
  2290           "by JNI critical section")                                        \
  2292   /* GC log rotation setting */                                             \
  2294   product(bool, UseGCLogFileRotation, false,                                \
  2295           "Prevent large gclog file for long running app. "                 \
  2296           "Requires -Xloggc:<filename>")                                    \
  2298   product(uintx, NumberOfGCLogFiles, 0,                                     \
  2299           "Number of gclog files in rotation, "                             \
  2300           "Default: 0, no rotation")                                        \
  2302   product(uintx, GCLogFileSize, 0,                                          \
  2303           "GC log file size, Default: 0 bytes, no rotation "                \
  2304           "Only valid with UseGCLogFileRotation")                           \
  2306   /* JVMTI heap profiling */                                                \
  2308   diagnostic(bool, TraceJVMTIObjectTagging, false,                          \
  2309           "Trace JVMTI object tagging calls")                               \
  2311   diagnostic(bool, VerifyBeforeIteration, false,                            \
  2312           "Verify memory system before JVMTI iteration")                    \
  2314   /* compiler interface */                                                  \
  2316   develop(bool, CIPrintCompilerName, false,                                 \
  2317           "when CIPrint is active, print the name of the active compiler")  \
  2319   develop(bool, CIPrintCompileQueue, false,                                 \
  2320           "display the contents of the compile queue whenever a "           \
  2321           "compilation is enqueued")                                        \
  2323   develop(bool, CIPrintRequests, false,                                     \
  2324           "display every request for compilation")                          \
  2326   product(bool, CITime, false,                                              \
  2327           "collect timing information for compilation")                     \
  2329   develop(bool, CITimeEach, false,                                          \
  2330           "display timing information after each successful compilation")   \
  2332   develop(bool, CICountOSR, false,                                          \
  2333           "use a separate counter when assigning ids to osr compilations")  \
  2335   develop(bool, CICompileNatives, true,                                     \
  2336           "compile native methods if supported by the compiler")            \
  2338   develop_pd(bool, CICompileOSR,                                            \
  2339           "compile on stack replacement methods if supported by the "       \
  2340           "compiler")                                                       \
  2342   develop(bool, CIPrintMethodCodes, false,                                  \
  2343           "print method bytecodes of the compiled code")                    \
  2345   develop(bool, CIPrintTypeFlow, false,                                     \
  2346           "print the results of ciTypeFlow analysis")                       \
  2348   develop(bool, CITraceTypeFlow, false,                                     \
  2349           "detailed per-bytecode tracing of ciTypeFlow analysis")           \
  2351   develop(intx, OSROnlyBCI, -1,                                             \
  2352           "OSR only at this bci.  Negative values mean exclude that bci")   \
  2354   /* compiler */                                                            \
  2356   product(intx, CICompilerCount, CI_COMPILER_COUNT,                         \
  2357           "Number of compiler threads to run")                              \
  2359   product(intx, CompilationPolicyChoice, 0,                                 \
  2360           "which compilation policy (0/1)")                                 \
  2362   develop(bool, UseStackBanging, true,                                      \
  2363           "use stack banging for stack overflow checks (required for "      \
  2364           "proper StackOverflow handling; disable only to measure cost "    \
  2365           "of stackbanging)")                                               \
  2367   develop(bool, UseStrictFP, true,                                          \
  2368           "use strict fp if modifier strictfp is set")                      \
  2370   develop(bool, GenerateSynchronizationCode, true,                          \
  2371           "generate locking/unlocking code for synchronized methods and "   \
  2372           "monitors")                                                       \
  2374   develop(bool, GenerateCompilerNullChecks, true,                           \
  2375           "Generate explicit null checks for loads/stores/calls")           \
  2377   develop(bool, GenerateRangeChecks, true,                                  \
  2378           "Generate range checks for array accesses")                       \
  2380   develop_pd(bool, ImplicitNullChecks,                                      \
  2381           "generate code for implicit null checks")                         \
  2383   product(bool, PrintSafepointStatistics, false,                            \
  2384           "print statistics about safepoint synchronization")               \
  2386   product(intx, PrintSafepointStatisticsCount, 300,                         \
  2387           "total number of safepoint statistics collected "                 \
  2388           "before printing them out")                                       \
  2390   product(intx, PrintSafepointStatisticsTimeout,  -1,                       \
  2391           "print safepoint statistics only when safepoint takes"            \
  2392           " more than PrintSafepointSatisticsTimeout in millis")            \
  2394   product(bool, TraceSafepointCleanupTime, false,                           \
  2395           "print the break down of clean up tasks performed during"         \
  2396           " safepoint")                                                     \
  2398   product(bool, Inline, true,                                               \
  2399           "enable inlining")                                                \
  2401   product(bool, ClipInlining, true,                                         \
  2402           "clip inlining if aggregate method exceeds DesiredMethodLimit")   \
  2404   develop(bool, UseCHA, true,                                               \
  2405           "enable CHA")                                                     \
  2407   product(bool, UseTypeProfile, true,                                       \
  2408           "Check interpreter profile for historically monomorphic calls")   \
  2410   notproduct(bool, TimeCompiler, false,                                     \
  2411           "time the compiler")                                              \
  2413   diagnostic(bool, PrintInlining, false,                                    \
  2414           "prints inlining optimizations")                                  \
  2416   product(bool, UsePopCountInstruction, false,                              \
  2417           "Use population count instruction")                               \
  2419   develop(bool, EagerInitialization, false,                                 \
  2420           "Eagerly initialize classes if possible")                         \
  2422   develop(bool, TraceMethodReplacement, false,                              \
  2423           "Print when methods are replaced do to recompilation")            \
  2425   develop(bool, PrintMethodFlushing, false,                                 \
  2426           "print the nmethods being flushed")                               \
  2428   develop(bool, UseRelocIndex, false,                                       \
  2429          "use an index to speed random access to relocations")              \
  2431   develop(bool, StressCodeBuffers, false,                                   \
  2432          "Exercise code buffer expansion and other rare state changes")     \
  2434   diagnostic(bool, DebugNonSafepoints, trueInDebug,                         \
  2435          "Generate extra debugging info for non-safepoints in nmethods")    \
  2437   product(bool, PrintVMOptions, false,                                      \
  2438          "Print flags that appeared on the command line")                   \
  2440   product(bool, IgnoreUnrecognizedVMOptions, false,                         \
  2441          "Ignore unrecognized VM options")                                  \
  2443   product(bool, PrintCommandLineFlags, false,                               \
  2444          "Print flags specified on command line or set by ergonomics")      \
  2446   product(bool, PrintFlagsInitial, false,                                   \
  2447          "Print all VM flags before argument processing and exit VM")       \
  2449   product(bool, PrintFlagsFinal, false,                                     \
  2450          "Print all VM flags after argument and ergonomic processing")      \
  2452   notproduct(bool, PrintFlagsWithComments, false,                           \
  2453          "Print all VM flags with default values and descriptions and exit")\
  2455   diagnostic(bool, SerializeVMOutput, true,                                 \
  2456          "Use a mutex to serialize output to tty and hotspot.log")          \
  2458   diagnostic(bool, DisplayVMOutput, true,                                   \
  2459          "Display all VM output on the tty, independently of LogVMOutput")  \
  2461   diagnostic(bool, LogVMOutput, trueInDebug,                                \
  2462          "Save VM output to hotspot.log, or to LogFile")                    \
  2464   diagnostic(ccstr, LogFile, NULL,                                          \
  2465          "If LogVMOutput is on, save VM output to this file [hotspot.log]") \
  2467   product(ccstr, ErrorFile, NULL,                                           \
  2468          "If an error occurs, save the error data to this file "            \
  2469          "[default: ./hs_err_pid%p.log] (%p replaced with pid)")            \
  2471   product(bool, DisplayVMOutputToStderr, false,                             \
  2472          "If DisplayVMOutput is true, display all VM output to stderr")     \
  2474   product(bool, DisplayVMOutputToStdout, false,                             \
  2475          "If DisplayVMOutput is true, display all VM output to stdout")     \
  2477   product(bool, UseHeavyMonitors, false,                                    \
  2478           "use heavyweight instead of lightweight Java monitors")           \
  2480   product(bool, PrintStringTableStatistics, false,                          \
  2481           "print statistics about the StringTable and SymbolTable")         \
  2483   notproduct(bool, PrintSymbolTableSizeHistogram, false,                    \
  2484           "print histogram of the symbol table")                            \
  2486   notproduct(bool, ExitVMOnVerifyError, false,                              \
  2487           "standard exit from VM if bytecode verify error "                 \
  2488           "(only in debug mode)")                                           \
  2490   notproduct(ccstr, AbortVMOnException, NULL,                               \
  2491           "Call fatal if this exception is thrown.  Example: "              \
  2492           "java -XX:AbortVMOnException=java.lang.NullPointerException Foo") \
  2494   notproduct(ccstr, AbortVMOnExceptionMessage, NULL,                        \
  2495           "Call fatal if the exception pointed by AbortVMOnException "      \
  2496           "has this message.")                                              \
  2498   develop(bool, DebugVtables, false,                                        \
  2499           "add debugging code to vtable dispatch")                          \
  2501   develop(bool, PrintVtables, false,                                        \
  2502           "print vtables when printing klass")                              \
  2504   notproduct(bool, PrintVtableStats, false,                                 \
  2505           "print vtables stats at end of run")                              \
  2507   develop(bool, TraceCreateZombies, false,                                  \
  2508           "trace creation of zombie nmethods")                              \
  2510   notproduct(bool, IgnoreLockingAssertions, false,                          \
  2511           "disable locking assertions (for speed)")                         \
  2513   product(bool, RangeCheckElimination, true,                                \
  2514           "Split loop iterations to eliminate range checks")                \
  2516   develop_pd(bool, UncommonNullCast,                                        \
  2517           "track occurrences of null in casts; adjust compiler tactics")    \
  2519   develop(bool, TypeProfileCasts,  true,                                    \
  2520           "treat casts like calls for purposes of type profiling")          \
  2522   develop(bool, DelayCompilationDuringStartup, true,                        \
  2523           "Delay invoking the compiler until main application class is "    \
  2524           "loaded")                                                         \
  2526   develop(bool, CompileTheWorld, false,                                     \
  2527           "Compile all methods in all classes in bootstrap class path "     \
  2528           "(stress test)")                                                  \
  2530   develop(bool, CompileTheWorldPreloadClasses, true,                        \
  2531           "Preload all classes used by a class before start loading")       \
  2533   notproduct(intx, CompileTheWorldSafepointInterval, 100,                   \
  2534           "Force a safepoint every n compiles so sweeper can keep up")      \
  2536   develop(bool, FillDelaySlots, true,                                       \
  2537           "Fill delay slots (on SPARC only)")                               \
  2539   develop(bool, TimeLivenessAnalysis, false,                                \
  2540           "Time computation of bytecode liveness analysis")                 \
  2542   develop(bool, TraceLivenessGen, false,                                    \
  2543           "Trace the generation of liveness analysis information")          \
  2545   notproduct(bool, TraceLivenessQuery, false,                               \
  2546           "Trace queries of liveness analysis information")                 \
  2548   notproduct(bool, CollectIndexSetStatistics, false,                        \
  2549           "Collect information about IndexSets")                            \
  2551   develop(bool, UseLoopSafepoints, true,                                    \
  2552           "Generate Safepoint nodes in every loop")                         \
  2554   develop(intx, FastAllocateSizeLimit, 128*K,                               \
  2555           /* Note:  This value is zero mod 1<<13 for a cheap sparc set. */  \
  2556           "Inline allocations larger than this in doublewords must go slow")\
  2558   product(bool, AggressiveOpts, false,                                      \
  2559           "Enable aggressive optimizations - see arguments.cpp")            \
  2561   product(bool, UseStringCache, false,                                      \
  2562           "Enable String cache capabilities on String.java")                \
  2564   /* statistics */                                                          \
  2565   develop(bool, CountCompiledCalls, false,                                  \
  2566           "counts method invocations")                                      \
  2568   notproduct(bool, CountRuntimeCalls, false,                                \
  2569           "counts VM runtime calls")                                        \
  2571   develop(bool, CountJNICalls, false,                                       \
  2572           "counts jni method invocations")                                  \
  2574   notproduct(bool, CountJVMCalls, false,                                    \
  2575           "counts jvm method invocations")                                  \
  2577   notproduct(bool, CountRemovableExceptions, false,                         \
  2578           "count exceptions that could be replaced by branches due to "     \
  2579           "inlining")                                                       \
  2581   notproduct(bool, ICMissHistogram, false,                                  \
  2582           "produce histogram of IC misses")                                 \
  2584   notproduct(bool, PrintClassStatistics, false,                             \
  2585           "prints class statistics at end of run")                          \
  2587   notproduct(bool, PrintMethodStatistics, false,                            \
  2588           "prints method statistics at end of run")                         \
  2590   /* interpreter */                                                         \
  2591   develop(bool, ClearInterpreterLocals, false,                              \
  2592           "Always clear local variables of interpreter activations upon "   \
  2593           "entry")                                                          \
  2595   product_pd(bool, RewriteBytecodes,                                        \
  2596           "Allow rewriting of bytecodes (bytecodes are not immutable)")     \
  2598   product_pd(bool, RewriteFrequentPairs,                                    \
  2599           "Rewrite frequently used bytecode pairs into a single bytecode")  \
  2601   diagnostic(bool, PrintInterpreter, false,                                 \
  2602           "Prints the generated interpreter code")                          \
  2604   product(bool, UseInterpreter, true,                                       \
  2605           "Use interpreter for non-compiled methods")                       \
  2607   develop(bool, UseFastSignatureHandlers, true,                             \
  2608           "Use fast signature handlers for native calls")                   \
  2610   product(bool, UseLoopCounter, true,                                       \
  2611           "Increment invocation counter on backward branch")                \
  2613   product(bool, UseFastEmptyMethods, true,                                  \
  2614           "Use fast method entry code for empty methods")                   \
  2616   product(bool, UseFastAccessorMethods, true,                               \
  2617           "Use fast method entry code for accessor methods")                \
  2619   product_pd(bool, UseOnStackReplacement,                                   \
  2620            "Use on stack replacement, calls runtime if invoc. counter "     \
  2621            "overflows in loop")                                             \
  2623   notproduct(bool, TraceOnStackReplacement, false,                          \
  2624           "Trace on stack replacement")                                     \
  2626   product_pd(bool, PreferInterpreterNativeStubs,                            \
  2627           "Use always interpreter stubs for native methods invoked via "    \
  2628           "interpreter")                                                    \
  2630   develop(bool, CountBytecodes, false,                                      \
  2631           "Count number of bytecodes executed")                             \
  2633   develop(bool, PrintBytecodeHistogram, false,                              \
  2634           "Print histogram of the executed bytecodes")                      \
  2636   develop(bool, PrintBytecodePairHistogram, false,                          \
  2637           "Print histogram of the executed bytecode pairs")                 \
  2639   diagnostic(bool, PrintSignatureHandlers, false,                           \
  2640           "Print code generated for native method signature handlers")      \
  2642   develop(bool, VerifyOops, false,                                          \
  2643           "Do plausibility checks for oops")                                \
  2645   develop(bool, CheckUnhandledOops, false,                                  \
  2646           "Check for unhandled oops in VM code")                            \
  2648   develop(bool, VerifyJNIFields, trueInDebug,                               \
  2649           "Verify jfieldIDs for instance fields")                           \
  2651   notproduct(bool, VerifyJNIEnvThread, false,                               \
  2652           "Verify JNIEnv.thread == Thread::current() when entering VM "     \
  2653           "from JNI")                                                       \
  2655   develop(bool, VerifyFPU, false,                                           \
  2656           "Verify FPU state (check for NaN's, etc.)")                       \
  2658   develop(bool, VerifyThread, false,                                        \
  2659           "Watch the thread register for corruption (SPARC only)")          \
  2661   develop(bool, VerifyActivationFrameSize, false,                           \
  2662           "Verify that activation frame didn't become smaller than its "    \
  2663           "minimal size")                                                   \
  2665   develop(bool, TraceFrequencyInlining, false,                              \
  2666           "Trace frequency based inlining")                                 \
  2668   develop_pd(bool, InlineIntrinsics,                                        \
  2669            "Inline intrinsics that can be statically resolved")             \
  2671   product_pd(bool, ProfileInterpreter,                                      \
  2672            "Profile at the bytecode level during interpretation")           \
  2674   develop_pd(bool, ProfileTraps,                                            \
  2675           "Profile deoptimization traps at the bytecode level")             \
  2677   product(intx, ProfileMaturityPercentage, 20,                              \
  2678           "number of method invocations/branches (expressed as % of "       \
  2679           "CompileThreshold) before using the method's profile")            \
  2681   develop(bool, PrintMethodData, false,                                     \
  2682            "Print the results of +ProfileInterpreter at end of run")        \
  2684   develop(bool, VerifyDataPointer, trueInDebug,                             \
  2685           "Verify the method data pointer during interpreter profiling")    \
  2687   develop(bool, VerifyCompiledCode, false,                                  \
  2688           "Include miscellaneous runtime verifications in nmethod code; "   \
  2689           "default off because it disturbs nmethod size heuristics")        \
  2691   notproduct(bool, CrashGCForDumpingJavaThread, false,                      \
  2692           "Manually make GC thread crash then dump java stack trace;  "     \
  2693           "Test only")                                                      \
  2695   /* compilation */                                                         \
  2696   product(bool, UseCompiler, true,                                          \
  2697           "use compilation")                                                \
  2699   develop(bool, TraceCompilationPolicy, false,                              \
  2700           "Trace compilation policy")                                       \
  2702   develop(bool, TimeCompilationPolicy, false,                               \
  2703           "Time the compilation policy")                                    \
  2705   product(bool, UseCounterDecay, true,                                      \
  2706            "adjust recompilation counters")                                 \
  2708   develop(intx, CounterHalfLifeTime,    30,                                 \
  2709           "half-life time of invocation counters (in secs)")                \
  2711   develop(intx, CounterDecayMinIntervalLength,   500,                       \
  2712           "Min. ms. between invocation of CounterDecay")                    \
  2714   product(bool, AlwaysCompileLoopMethods, false,                            \
  2715           "when using recompilation, never interpret methods "              \
  2716           "containing loops")                                               \
  2718   product(bool, DontCompileHugeMethods, true,                               \
  2719           "don't compile methods > HugeMethodLimit")                        \
  2721   /* Bytecode escape analysis estimation. */                                \
  2722   product(bool, EstimateArgEscape, true,                                    \
  2723           "Analyze bytecodes to estimate escape state of arguments")        \
  2725   product(intx, BCEATraceLevel, 0,                                          \
  2726           "How much tracing to do of bytecode escape analysis estimates")   \
  2728   product(intx, MaxBCEAEstimateLevel, 5,                                    \
  2729           "Maximum number of nested calls that are analyzed by BC EA.")     \
  2731   product(intx, MaxBCEAEstimateSize, 150,                                   \
  2732           "Maximum bytecode size of a method to be analyzed by BC EA.")     \
  2734   product(intx,  AllocatePrefetchStyle, 1,                                  \
  2735           "0 = no prefetch, "                                               \
  2736           "1 = prefetch instructions for each allocation, "                 \
  2737           "2 = use TLAB watermark to gate allocation prefetch, "            \
  2738           "3 = use BIS instruction on Sparc for allocation prefetch")       \
  2740   product(intx,  AllocatePrefetchDistance, -1,                              \
  2741           "Distance to prefetch ahead of allocation pointer")               \
  2743   product(intx,  AllocatePrefetchLines, 3,                                  \
  2744           "Number of lines to prefetch ahead of array allocation pointer")  \
  2746   product(intx,  AllocateInstancePrefetchLines, 1,                          \
  2747           "Number of lines to prefetch ahead of instance allocation pointer") \
  2749   product(intx,  AllocatePrefetchStepSize, 16,                              \
  2750           "Step size in bytes of sequential prefetch instructions")         \
  2752   product(intx,  AllocatePrefetchInstr, 0,                                  \
  2753           "Prefetch instruction to prefetch ahead of allocation pointer")   \
  2755   /* deoptimization */                                                      \
  2756   develop(bool, TraceDeoptimization, false,                                 \
  2757           "Trace deoptimization")                                           \
  2759   develop(bool, DebugDeoptimization, false,                                 \
  2760           "Tracing various information while debugging deoptimization")     \
  2762   product(intx, SelfDestructTimer, 0,                                       \
  2763           "Will cause VM to terminate after a given time (in minutes) "     \
  2764           "(0 means off)")                                                  \
  2766   product(intx, MaxJavaStackTraceDepth, 1024,                               \
  2767           "Max. no. of lines in the stack trace for Java exceptions "       \
  2768           "(0 means all)")                                                  \
  2770   NOT_EMBEDDED(diagnostic(intx, GuaranteedSafepointInterval, 1000,          \
  2771           "Guarantee a safepoint (at least) every so many milliseconds "    \
  2772           "(0 means none)"))                                                \
  2774   EMBEDDED_ONLY(product(intx, GuaranteedSafepointInterval, 0,               \
  2775           "Guarantee a safepoint (at least) every so many milliseconds "    \
  2776           "(0 means none)"))                                                \
  2778   product(intx, SafepointTimeoutDelay, 10000,                               \
  2779           "Delay in milliseconds for option SafepointTimeout")              \
  2781   product(intx, NmethodSweepFraction, 16,                                   \
  2782           "Number of invocations of sweeper to cover all nmethods")         \
  2784   product(intx, NmethodSweepCheckInterval, 5,                               \
  2785           "Compilers wake up every n seconds to possibly sweep nmethods")   \
  2787   notproduct(bool, LogSweeper, false,                                       \
  2788             "Keep a ring buffer of sweeper activity")                       \
  2790   notproduct(intx, SweeperLogEntries, 1024,                                 \
  2791             "Number of records in the ring buffer of sweeper activity")     \
  2793   notproduct(intx, MemProfilingInterval, 500,                               \
  2794           "Time between each invocation of the MemProfiler")                \
  2796   develop(intx, MallocCatchPtr, -1,                                         \
  2797           "Hit breakpoint when mallocing/freeing this pointer")             \
  2799   notproduct(intx, AssertRepeat, 1,                                         \
  2800           "number of times to evaluate expression in assert "               \
  2801           "(to estimate overhead); only works with -DUSE_REPEATED_ASSERTS") \
  2803   notproduct(ccstrlist, SuppressErrorAt, "",                                \
  2804           "List of assertions (file:line) to muzzle")                       \
  2806   notproduct(uintx, HandleAllocationLimit, 1024,                            \
  2807           "Threshold for HandleMark allocation when +TraceHandleAllocation "\
  2808           "is used")                                                        \
  2810   develop(uintx, TotalHandleAllocationLimit, 1024,                          \
  2811           "Threshold for total handle allocation when "                     \
  2812           "+TraceHandleAllocation is used")                                 \
  2814   develop(intx, StackPrintLimit, 100,                                       \
  2815           "number of stack frames to print in VM-level stack dump")         \
  2817   notproduct(intx, MaxElementPrintSize, 256,                                \
  2818           "maximum number of elements to print")                            \
  2820   notproduct(intx, MaxSubklassPrintSize, 4,                                 \
  2821           "maximum number of subklasses to print when printing klass")      \
  2823   product(intx, MaxInlineLevel, 9,                                          \
  2824           "maximum number of nested calls that are inlined")                \
  2826   product(intx, MaxRecursiveInlineLevel, 1,                                 \
  2827           "maximum number of nested recursive calls that are inlined")      \
  2829   product_pd(intx, InlineSmallCode,                                         \
  2830           "Only inline already compiled methods if their code size is "     \
  2831           "less than this")                                                 \
  2833   product(intx, MaxInlineSize, 35,                                          \
  2834           "maximum bytecode size of a method to be inlined")                \
  2836   product_pd(intx, FreqInlineSize,                                          \
  2837           "maximum bytecode size of a frequent method to be inlined")       \
  2839   product(intx, MaxTrivialSize, 6,                                          \
  2840           "maximum bytecode size of a trivial method to be inlined")        \
  2842   product(intx, MinInliningThreshold, 250,                                  \
  2843           "min. invocation count a method needs to have to be inlined")     \
  2845   develop(intx, MethodHistogramCutoff, 100,                                 \
  2846           "cutoff value for method invoc. histogram (+CountCalls)")         \
  2848   develop(intx, ProfilerNumberOfInterpretedMethods, 25,                     \
  2849           "# of interpreted methods to show in profile")                    \
  2851   develop(intx, ProfilerNumberOfCompiledMethods, 25,                        \
  2852           "# of compiled methods to show in profile")                       \
  2854   develop(intx, ProfilerNumberOfStubMethods, 25,                            \
  2855           "# of stub methods to show in profile")                           \
  2857   develop(intx, ProfilerNumberOfRuntimeStubNodes, 25,                       \
  2858           "# of runtime stub nodes to show in profile")                     \
  2860   product(intx, ProfileIntervalsTicks, 100,                                 \
  2861           "# of ticks between printing of interval profile "                \
  2862           "(+ProfileIntervals)")                                            \
  2864   notproduct(intx, ScavengeALotInterval,     1,                             \
  2865           "Interval between which scavenge will occur with +ScavengeALot")  \
  2867   notproduct(intx, FullGCALotInterval,     1,                               \
  2868           "Interval between which full gc will occur with +FullGCALot")     \
  2870   notproduct(intx, FullGCALotStart,     0,                                  \
  2871           "For which invocation to start FullGCAlot")                       \
  2873   notproduct(intx, FullGCALotDummies,  32*K,                                \
  2874           "Dummy object allocated with +FullGCALot, forcing all objects "   \
  2875           "to move")                                                        \
  2877   develop(intx, DontYieldALotInterval,    10,                               \
  2878           "Interval between which yields will be dropped (milliseconds)")   \
  2880   develop(intx, MinSleepInterval,     1,                                    \
  2881           "Minimum sleep() interval (milliseconds) when "                   \
  2882           "ConvertSleepToYield is off (used for SOLARIS)")                  \
  2884   develop(intx, ProfilerPCTickThreshold,    15,                             \
  2885           "Number of ticks in a PC buckets to be a hotspot")                \
  2887   notproduct(intx, DeoptimizeALotInterval,     5,                           \
  2888           "Number of exits until DeoptimizeALot kicks in")                  \
  2890   notproduct(intx, ZombieALotInterval,     5,                               \
  2891           "Number of exits until ZombieALot kicks in")                      \
  2893   develop(bool, StressNonEntrant, false,                                    \
  2894           "Mark nmethods non-entrant at registration")                      \
  2896   diagnostic(intx, MallocVerifyInterval,     0,                             \
  2897           "if non-zero, verify C heap after every N calls to "              \
  2898           "malloc/realloc/free")                                            \
  2900   diagnostic(intx, MallocVerifyStart,     0,                                \
  2901           "if non-zero, start verifying C heap after Nth call to "          \
  2902           "malloc/realloc/free")                                            \
  2904   product(intx, TypeProfileWidth,     2,                                    \
  2905           "number of receiver types to record in call/cast profile")        \
  2907   develop(intx, BciProfileWidth,      2,                                    \
  2908           "number of return bci's to record in ret profile")                \
  2910   product(intx, PerMethodRecompilationCutoff, 400,                          \
  2911           "After recompiling N times, stay in the interpreter (-1=>'Inf')") \
  2913   product(intx, PerBytecodeRecompilationCutoff, 200,                        \
  2914           "Per-BCI limit on repeated recompilation (-1=>'Inf')")            \
  2916   product(intx, PerMethodTrapLimit,  100,                                   \
  2917           "Limit on traps (of one kind) in a method (includes inlines)")    \
  2919   product(intx, PerBytecodeTrapLimit,  4,                                   \
  2920           "Limit on traps (of one kind) at a particular BCI")               \
  2922   develop(intx, InlineFrequencyRatio,    20,                                \
  2923           "Ratio of call site execution to caller method invocation")       \
  2925   develop_pd(intx, InlineFrequencyCount,                                    \
  2926           "Count of call site execution necessary to trigger frequent "     \
  2927           "inlining")                                                       \
  2929   develop(intx, InlineThrowCount,    50,                                    \
  2930           "Force inlining of interpreted methods that throw this often")    \
  2932   develop(intx, InlineThrowMaxSize,   200,                                  \
  2933           "Force inlining of throwing methods smaller than this")           \
  2935   develop(intx, ProfilerNodeSize,  1024,                                    \
  2936           "Size in K to allocate for the Profile Nodes of each thread")     \
  2938   product_pd(intx, PreInflateSpin,                                          \
  2939           "Number of times to spin wait before inflation")                  \
  2941   /* gc parameters */                                                       \
  2942   product(uintx, InitialHeapSize, 0,                                        \
  2943           "Initial heap size (in bytes); zero means OldSize + NewSize")     \
  2945   product(uintx, MaxHeapSize, ScaleForWordSize(96*M),                       \
  2946           "Maximum heap size (in bytes)")                                   \
  2948   product(uintx, OldSize, ScaleForWordSize(4*M),                            \
  2949           "Initial tenured generation size (in bytes)")                     \
  2951   product(uintx, NewSize, ScaleForWordSize(1*M),                            \
  2952           "Initial new generation size (in bytes)")                         \
  2954   product(uintx, MaxNewSize, max_uintx,                                     \
  2955           "Maximum new generation size (in bytes), max_uintx means set "    \
  2956           "ergonomically")                                                  \
  2958   product(uintx, PretenureSizeThreshold, 0,                                 \
  2959           "Maximum size in bytes of objects allocated in DefNew "           \
  2960           "generation; zero means no maximum")                              \
  2962   product(uintx, TLABSize, 0,                                               \
  2963           "Starting TLAB size (in bytes); zero means set ergonomically")    \
  2965   product(uintx, MinTLABSize, 2*K,                                          \
  2966           "Minimum allowed TLAB size (in bytes)")                           \
  2968   product(uintx, TLABAllocationWeight, 35,                                  \
  2969           "Allocation averaging weight")                                    \
  2971   product(uintx, TLABWasteTargetPercent, 1,                                 \
  2972           "Percentage of Eden that can be wasted")                          \
  2974   product(uintx, TLABRefillWasteFraction,    64,                            \
  2975           "Max TLAB waste at a refill (internal fragmentation)")            \
  2977   product(uintx, TLABWasteIncrement,    4,                                  \
  2978           "Increment allowed waste at slow allocation")                     \
  2980   product(intx, SurvivorRatio, 8,                                           \
  2981           "Ratio of eden/survivor space size")                              \
  2983   product(intx, NewRatio, 2,                                                \
  2984           "Ratio of new/old generation sizes")                              \
  2986   product_pd(uintx, NewSizeThreadIncrease,                                  \
  2987           "Additional size added to desired new generation size per "       \
  2988           "non-daemon thread (in bytes)")                                   \
  2990   product_pd(uintx, MetaspaceSize,                                          \
  2991           "Initial size of Metaspaces (in bytes)")                          \
  2993   product(uintx, MaxMetaspaceSize, max_uintx,                               \
  2994           "Maximum size of Metaspaces (in bytes)")                          \
  2996   product(uintx, ClassMetaspaceSize, 2*M,                                   \
  2997           "Maximum size of InstanceKlass area in Metaspace used for "       \
  2998           "UseCompressedKlassPointers")                                     \
  3000   product(uintx, MinHeapFreeRatio,    40,                                   \
  3001           "Min percentage of heap free after GC to avoid expansion")        \
  3003   product(uintx, MaxHeapFreeRatio,    70,                                   \
  3004           "Max percentage of heap free after GC to avoid shrinking")        \
  3006   product(intx, SoftRefLRUPolicyMSPerMB, 1000,                              \
  3007           "Number of milliseconds per MB of free space in the heap")        \
  3009   product(uintx, MinHeapDeltaBytes, ScaleForWordSize(128*K),                \
  3010           "Min change in heap space due to GC (in bytes)")                  \
  3012   product(uintx, MinMetaspaceExpansion, ScaleForWordSize(256*K),            \
  3013           "Min expansion of permanent heap (in bytes)")                     \
  3015   product(uintx, MaxMetaspaceExpansion, ScaleForWordSize(4*M),              \
  3016           "Max expansion of permanent heap without full GC (in bytes)")     \
  3018   product(intx, QueuedAllocationWarningCount, 0,                            \
  3019           "Number of times an allocation that queues behind a GC "          \
  3020           "will retry before printing a warning")                           \
  3022   diagnostic(uintx, VerifyGCStartAt,   0,                                   \
  3023           "GC invoke count where +VerifyBefore/AfterGC kicks in")           \
  3025   diagnostic(intx, VerifyGCLevel,     0,                                    \
  3026           "Generation level at which to start +VerifyBefore/AfterGC")       \
  3028   product(uintx, MaxTenuringThreshold,    15,                               \
  3029           "Maximum value for tenuring threshold")                           \
  3031   product(uintx, InitialTenuringThreshold,    7,                            \
  3032           "Initial value for tenuring threshold")                           \
  3034   product(intx, TargetSurvivorRatio,    50,                                 \
  3035           "Desired percentage of survivor space used after scavenge")       \
  3037   product(uintx, MarkSweepDeadRatio,     5,                                 \
  3038           "Percentage (0-100) of the old gen allowed as dead wood."         \
  3039           "Serial mark sweep treats this as both the min and max value."    \
  3040           "CMS uses this value only if it falls back to mark sweep."        \
  3041           "Par compact uses a variable scale based on the density of the"   \
  3042           "generation and treats this as the max value when the heap is"    \
  3043           "either completely full or completely empty.  Par compact also"   \
  3044           "has a smaller default value; see arguments.cpp.")                \
  3046   product(intx, MarkSweepAlwaysCompactCount,     4,                         \
  3047           "How often should we fully compact the heap (ignoring the dead "  \
  3048           "space parameters)")                                              \
  3050   product(intx, PrintCMSStatistics, 0,                                      \
  3051           "Statistics for CMS")                                             \
  3053   product(bool, PrintCMSInitiationStatistics, false,                        \
  3054           "Statistics for initiating a CMS collection")                     \
  3056   product(intx, PrintFLSStatistics, 0,                                      \
  3057           "Statistics for CMS' FreeListSpace")                              \
  3059   product(intx, PrintFLSCensus, 0,                                          \
  3060           "Census for CMS' FreeListSpace")                                  \
  3062   develop(uintx, GCExpandToAllocateDelayMillis, 0,                          \
  3063           "Delay in ms between expansion and allocation")                   \
  3065   develop(uintx, GCWorkerDelayMillis, 0,                                    \
  3066           "Delay in ms in scheduling GC workers")                           \
  3068   product(intx, DeferThrSuspendLoopCount,     4000,                         \
  3069           "(Unstable) Number of times to iterate in safepoint loop "        \
  3070           " before blocking VM threads ")                                   \
  3072   product(intx, DeferPollingPageLoopCount,     -1,                          \
  3073           "(Unsafe,Unstable) Number of iterations in safepoint loop "       \
  3074           "before changing safepoint polling page to RO ")                  \
  3076   product(intx, SafepointSpinBeforeYield, 2000,  "(Unstable)")              \
  3078   product(bool, PSChunkLargeArrays, true,                                   \
  3079           "true: process large arrays in chunks")                           \
  3081   product(uintx, GCDrainStackTargetSize, 64,                                \
  3082           "how many entries we'll try to leave on the stack during "        \
  3083           "parallel GC")                                                    \
  3085   /* stack parameters */                                                    \
  3086   product_pd(intx, StackYellowPages,                                        \
  3087           "Number of yellow zone (recoverable overflows) pages")            \
  3089   product_pd(intx, StackRedPages,                                           \
  3090           "Number of red zone (unrecoverable overflows) pages")             \
  3092   product_pd(intx, StackShadowPages,                                        \
  3093           "Number of shadow zone (for overflow checking) pages"             \
  3094           " this should exceed the depth of the VM and native call stack")  \
  3096   product_pd(intx, ThreadStackSize,                                         \
  3097           "Thread Stack Size (in Kbytes)")                                  \
  3099   product_pd(intx, VMThreadStackSize,                                       \
  3100           "Non-Java Thread Stack Size (in Kbytes)")                         \
  3102   product_pd(intx, CompilerThreadStackSize,                                 \
  3103           "Compiler Thread Stack Size (in Kbytes)")                         \
  3105   develop_pd(uintx, JVMInvokeMethodSlack,                                   \
  3106           "Stack space (bytes) required for JVM_InvokeMethod to complete")  \
  3108   product(uintx, ThreadSafetyMargin, 50*M,                                  \
  3109           "Thread safety margin is used on fixed-stack LinuxThreads (on "   \
  3110           "Linux/x86 only) to prevent heap-stack collision. Set to 0 to "   \
  3111           "disable this feature")                                           \
  3113   /* code cache parameters */                                               \
  3114   develop(uintx, CodeCacheSegmentSize, 64,                                  \
  3115           "Code cache segment size (in bytes) - smallest unit of "          \
  3116           "allocation")                                                     \
  3118   develop_pd(intx, CodeEntryAlignment,                                      \
  3119           "Code entry alignment for generated code (in bytes)")             \
  3121   product_pd(intx, OptoLoopAlignment,                                       \
  3122           "Align inner loops to zero relative to this modulus")             \
  3124   product_pd(uintx, InitialCodeCacheSize,                                   \
  3125           "Initial code cache size (in bytes)")                             \
  3127   product_pd(uintx, ReservedCodeCacheSize,                                  \
  3128           "Reserved code cache size (in bytes) - maximum code cache size")  \
  3130   product(uintx, CodeCacheMinimumFreeSpace, 500*K,                          \
  3131           "When less than X space left, we stop compiling.")                \
  3133   product_pd(uintx, CodeCacheExpansionSize,                                 \
  3134           "Code cache expansion size (in bytes)")                           \
  3136   develop_pd(uintx, CodeCacheMinBlockLength,                                \
  3137           "Minimum number of segments in a code cache block.")              \
  3139   notproduct(bool, ExitOnFullCodeCache, false,                              \
  3140           "Exit the VM if we fill the code cache.")                         \
  3142   product(bool, UseCodeCacheFlushing, true,                                 \
  3143           "Attempt to clean the code cache before shutting off compiler")   \
  3145   product(intx,  MinCodeCacheFlushingInterval, 30,                          \
  3146           "Min number of seconds between code cache cleaning sessions")     \
  3148   product(uintx,  CodeCacheFlushingMinimumFreeSpace, 1500*K,                \
  3149           "When less than X space left, start code cache cleaning")         \
  3151   /* interpreter debugging */                                               \
  3152   develop(intx, BinarySwitchThreshold, 5,                                   \
  3153           "Minimal number of lookupswitch entries for rewriting to binary " \
  3154           "switch")                                                         \
  3156   develop(intx, StopInterpreterAt, 0,                                       \
  3157           "Stops interpreter execution at specified bytecode number")       \
  3159   develop(intx, TraceBytecodesAt, 0,                                        \
  3160           "Traces bytecodes starting with specified bytecode number")       \
  3162   /* compiler interface */                                                  \
  3163   develop(intx, CIStart, 0,                                                 \
  3164           "the id of the first compilation to permit")                      \
  3166   develop(intx, CIStop,    -1,                                              \
  3167           "the id of the last compilation to permit")                       \
  3169   develop(intx, CIStartOSR,     0,                                          \
  3170           "the id of the first osr compilation to permit "                  \
  3171           "(CICountOSR must be on)")                                        \
  3173   develop(intx, CIStopOSR,    -1,                                           \
  3174           "the id of the last osr compilation to permit "                   \
  3175           "(CICountOSR must be on)")                                        \
  3177   develop(intx, CIBreakAtOSR,    -1,                                        \
  3178           "id of osr compilation to break at")                              \
  3180   develop(intx, CIBreakAt,    -1,                                           \
  3181           "id of compilation to break at")                                  \
  3183   product(ccstrlist, CompileOnly, "",                                       \
  3184           "List of methods (pkg/class.name) to restrict compilation to")    \
  3186   product(ccstr, CompileCommandFile, NULL,                                  \
  3187           "Read compiler commands from this file [.hotspot_compiler]")      \
  3189   product(ccstrlist, CompileCommand, "",                                    \
  3190           "Prepend to .hotspot_compiler; e.g. log,java/lang/String.<init>") \
  3192   develop(bool, ReplayCompiles, false,                                      \
  3193           "Enable replay of compilations from ReplayDataFile")              \
  3195   develop(ccstr, ReplayDataFile, "replay.txt",                              \
  3196           "file containing compilation replay information")                 \
  3198   develop(intx, ReplaySuppressInitializers, 2,                              \
  3199           "Controls handling of class initialization during replay"         \
  3200           "0 - don't do anything special"                                   \
  3201           "1 - treat all class initializers as empty"                       \
  3202           "2 - treat class initializers for application classes as empty"   \
  3203           "3 - allow all class initializers to run during bootstrap but"    \
  3204           "    pretend they are empty after starting replay")               \
  3206   develop(bool, ReplayIgnoreInitErrors, false,                              \
  3207           "Ignore exceptions thrown during initialization for replay")      \
  3209   develop(bool, DumpReplayDataOnError, true,                                \
  3210           "record replay data for crashing compiler threads")               \
  3212   product(bool, CICompilerCountPerCPU, false,                               \
  3213           "1 compiler thread for log(N CPUs)")                              \
  3215   develop(intx, CIFireOOMAt,    -1,                                         \
  3216           "Fire OutOfMemoryErrors throughout CI for testing the compiler "  \
  3217           "(non-negative value throws OOM after this many CI accesses "     \
  3218           "in each compile)")                                               \
  3220   notproduct(bool, CIObjectFactoryVerify, false,                            \
  3221           "enable potentially expensive verification in ciObjectFactory")   \
  3223   /* Priorities */                                                          \
  3224   product_pd(bool, UseThreadPriorities,  "Use native thread priorities")    \
  3226   product(intx, ThreadPriorityPolicy, 0,                                    \
  3227           "0 : Normal.                                                     "\
  3228           "    VM chooses priorities that are appropriate for normal       "\
  3229           "    applications. On Solaris NORM_PRIORITY and above are mapped "\
  3230           "    to normal native priority. Java priorities below NORM_PRIORITY"\
  3231           "    map to lower native priority values. On Windows applications"\
  3232           "    are allowed to use higher native priorities. However, with  "\
  3233           "    ThreadPriorityPolicy=0, VM will not use the highest possible"\
  3234           "    native priority, THREAD_PRIORITY_TIME_CRITICAL, as it may   "\
  3235           "    interfere with system threads. On Linux thread priorities   "\
  3236           "    are ignored because the OS does not support static priority "\
  3237           "    in SCHED_OTHER scheduling class which is the only choice for"\
  3238           "    non-root, non-realtime applications.                        "\
  3239           "1 : Aggressive.                                                 "\
  3240           "    Java thread priorities map over to the entire range of      "\
  3241           "    native thread priorities. Higher Java thread priorities map "\
  3242           "    to higher native thread priorities. This policy should be   "\
  3243           "    used with care, as sometimes it can cause performance       "\
  3244           "    degradation in the application and/or the entire system. On "\
  3245           "    Linux this policy requires root privilege.")                 \
  3247   product(bool, ThreadPriorityVerbose, false,                               \
  3248           "Print priority changes")                                         \
  3250   product(intx, DefaultThreadPriority, -1,                                  \
  3251           "The native priority at which threads run if not elsewhere "      \
  3252           "specified (-1 means no change)")                                 \
  3254   product(intx, CompilerThreadPriority, -1,                                 \
  3255           "The native priority at which compiler threads should run "       \
  3256           "(-1 means no change)")                                           \
  3258   product(intx, VMThreadPriority, -1,                                       \
  3259           "The native priority at which the VM thread should run "          \
  3260           "(-1 means no change)")                                           \
  3262   product(bool, CompilerThreadHintNoPreempt, true,                          \
  3263           "(Solaris only) Give compiler threads an extra quanta")           \
  3265   product(bool, VMThreadHintNoPreempt, false,                               \
  3266           "(Solaris only) Give VM thread an extra quanta")                  \
  3268   product(intx, JavaPriority1_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3269   product(intx, JavaPriority2_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3270   product(intx, JavaPriority3_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3271   product(intx, JavaPriority4_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3272   product(intx, JavaPriority5_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3273   product(intx, JavaPriority6_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3274   product(intx, JavaPriority7_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3275   product(intx, JavaPriority8_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3276   product(intx, JavaPriority9_To_OSPriority, -1, "Map Java priorities to OS priorities") \
  3277   product(intx, JavaPriority10_To_OSPriority,-1, "Map Java priorities to OS priorities") \
  3279   experimental(bool, UseCriticalJavaThreadPriority, false,                  \
  3280           "Java thread priority 10 maps to critical scheduling priority")   \
  3282   experimental(bool, UseCriticalCompilerThreadPriority, false,              \
  3283           "Compiler thread(s) run at critical scheduling priority")         \
  3285   experimental(bool, UseCriticalCMSThreadPriority, false,                   \
  3286           "ConcurrentMarkSweep thread runs at critical scheduling priority")\
  3288   /* compiler debugging */                                                  \
  3289   notproduct(intx, CompileTheWorldStartAt,     1,                           \
  3290           "First class to consider when using +CompileTheWorld")            \
  3292   notproduct(intx, CompileTheWorldStopAt, max_jint,                         \
  3293           "Last class to consider when using +CompileTheWorld")             \
  3295   develop(intx, NewCodeParameter,      0,                                   \
  3296           "Testing Only: Create a dedicated integer parameter before "      \
  3297           "putback")                                                        \
  3299   /* new oopmap storage allocation */                                       \
  3300   develop(intx, MinOopMapAllocation,     8,                                 \
  3301           "Minimum number of OopMap entries in an OopMapSet")               \
  3303   /* Background Compilation */                                              \
  3304   develop(intx, LongCompileThreshold,     50,                               \
  3305           "Used with +TraceLongCompiles")                                   \
  3307   product(intx, StarvationMonitorInterval,    200,                          \
  3308           "Pause between each check in ms")                                 \
  3310   /* recompilation */                                                       \
  3311   product_pd(intx, CompileThreshold,                                        \
  3312           "number of interpreted method invocations before (re-)compiling") \
  3314   product_pd(intx, BackEdgeThreshold,                                       \
  3315           "Interpreter Back edge threshold at which an OSR compilation is invoked")\
  3317   product(intx, Tier0InvokeNotifyFreqLog, 7,                                \
  3318           "Interpreter (tier 0) invocation notification frequency.")        \
  3320   product(intx, Tier2InvokeNotifyFreqLog, 11,                               \
  3321           "C1 without MDO (tier 2) invocation notification frequency.")     \
  3323   product(intx, Tier3InvokeNotifyFreqLog, 10,                               \
  3324           "C1 with MDO profiling (tier 3) invocation notification "         \
  3325           "frequency.")                                                     \
  3327   product(intx, Tier23InlineeNotifyFreqLog, 20,                             \
  3328           "Inlinee invocation (tiers 2 and 3) notification frequency")      \
  3330   product(intx, Tier0BackedgeNotifyFreqLog, 10,                             \
  3331           "Interpreter (tier 0) invocation notification frequency.")        \
  3333   product(intx, Tier2BackedgeNotifyFreqLog, 14,                             \
  3334           "C1 without MDO (tier 2) invocation notification frequency.")     \
  3336   product(intx, Tier3BackedgeNotifyFreqLog, 13,                             \
  3337           "C1 with MDO profiling (tier 3) invocation notification "         \
  3338           "frequency.")                                                     \
  3340   product(intx, Tier2CompileThreshold, 0,                                   \
  3341           "threshold at which tier 2 compilation is invoked")               \
  3343   product(intx, Tier2BackEdgeThreshold, 0,                                  \
  3344           "Back edge threshold at which tier 2 compilation is invoked")     \
  3346   product(intx, Tier3InvocationThreshold, 200,                              \
  3347           "Compile if number of method invocations crosses this "           \
  3348           "threshold")                                                      \
  3350   product(intx, Tier3MinInvocationThreshold, 100,                           \
  3351           "Minimum invocation to compile at tier 3")                        \
  3353   product(intx, Tier3CompileThreshold, 2000,                                \
  3354           "Threshold at which tier 3 compilation is invoked (invocation "   \
  3355           "minimum must be satisfied.")                                     \
  3357   product(intx, Tier3BackEdgeThreshold,  60000,                             \
  3358           "Back edge threshold at which tier 3 OSR compilation is invoked") \
  3360   product(intx, Tier4InvocationThreshold, 5000,                             \
  3361           "Compile if number of method invocations crosses this "           \
  3362           "threshold")                                                      \
  3364   product(intx, Tier4MinInvocationThreshold, 600,                           \
  3365           "Minimum invocation to compile at tier 4")                        \
  3367   product(intx, Tier4CompileThreshold, 15000,                               \
  3368           "Threshold at which tier 4 compilation is invoked (invocation "   \
  3369           "minimum must be satisfied.")                                     \
  3371   product(intx, Tier4BackEdgeThreshold, 40000,                              \
  3372           "Back edge threshold at which tier 4 OSR compilation is invoked") \
  3374   product(intx, Tier3DelayOn, 5,                                            \
  3375           "If C2 queue size grows over this amount per compiler thread "    \
  3376           "stop compiling at tier 3 and start compiling at tier 2")         \
  3378   product(intx, Tier3DelayOff, 2,                                           \
  3379           "If C2 queue size is less than this amount per compiler thread "  \
  3380           "allow methods compiled at tier 2 transition to tier 3")          \
  3382   product(intx, Tier3LoadFeedback, 5,                                       \
  3383           "Tier 3 thresholds will increase twofold when C1 queue size "     \
  3384           "reaches this amount per compiler thread")                        \
  3386   product(intx, Tier4LoadFeedback, 3,                                       \
  3387           "Tier 4 thresholds will increase twofold when C2 queue size "     \
  3388           "reaches this amount per compiler thread")                        \
  3390   product(intx, TieredCompileTaskTimeout, 50,                               \
  3391           "Kill compile task if method was not used within "                \
  3392           "given timeout in milliseconds")                                  \
  3394   product(intx, TieredStopAtLevel, 4,                                       \
  3395           "Stop at given compilation level")                                \
  3397   product(intx, Tier0ProfilingStartPercentage, 200,                         \
  3398           "Start profiling in interpreter if the counters exceed tier 3"    \
  3399           "thresholds by the specified percentage")                         \
  3401   product(intx, TieredRateUpdateMinTime, 1,                                 \
  3402           "Minimum rate sampling interval (in milliseconds)")               \
  3404   product(intx, TieredRateUpdateMaxTime, 25,                                \
  3405           "Maximum rate sampling interval (in milliseconds)")               \
  3407   product_pd(bool, TieredCompilation,                                       \
  3408           "Enable tiered compilation")                                      \
  3410   product(bool, PrintTieredEvents, false,                                   \
  3411           "Print tiered events notifications")                              \
  3413   product_pd(intx, OnStackReplacePercentage,                                \
  3414           "NON_TIERED number of method invocations/branches (expressed as %"\
  3415           "of CompileThreshold) before (re-)compiling OSR code")            \
  3417   product(intx, InterpreterProfilePercentage, 33,                           \
  3418           "NON_TIERED number of method invocations/branches (expressed as %"\
  3419           "of CompileThreshold) before profiling in the interpreter")       \
  3421   develop(intx, MaxRecompilationSearchLength,    10,                        \
  3422           "max. # frames to inspect searching for recompilee")              \
  3424   develop(intx, MaxInterpretedSearchLength,     3,                          \
  3425           "max. # interp. frames to skip when searching for recompilee")    \
  3427   develop(intx, DesiredMethodLimit,  8000,                                  \
  3428           "desired max. method size (in bytecodes) after inlining")         \
  3430   develop(intx, HugeMethodLimit,  8000,                                     \
  3431           "don't compile methods larger than this if "                      \
  3432           "+DontCompileHugeMethods")                                        \
  3434   /* New JDK 1.4 reflection implementation */                               \
  3436   develop(bool, UseNewReflection, true,                                     \
  3437           "Temporary flag for transition to reflection based on dynamic "   \
  3438           "bytecode generation in 1.4; can no longer be turned off in 1.4 " \
  3439           "JDK, and is unneeded in 1.3 JDK, but marks most places VM "      \
  3440           "changes were needed")                                            \
  3442   develop(bool, VerifyReflectionBytecodes, false,                           \
  3443           "Force verification of 1.4 reflection bytecodes. Does not work "  \
  3444           "in situations like that described in 4486457 or for "            \
  3445           "constructors generated for serialization, so can not be enabled "\
  3446           "in product.")                                                    \
  3448   product(bool, ReflectionWrapResolutionErrors, true,                       \
  3449           "Temporary flag for transition to AbstractMethodError wrapped "   \
  3450           "in InvocationTargetException. See 6531596")                      \
  3453   develop(intx, FastSuperclassLimit, 8,                                     \
  3454           "Depth of hardwired instanceof accelerator array")                \
  3456   /* Properties for Java libraries  */                                      \
  3458   product(uintx, MaxDirectMemorySize, 0,                                    \
  3459           "Maximum total size of NIO direct-buffer allocations")            \
  3461   /* temporary developer defined flags  */                                  \
  3463   diagnostic(bool, UseNewCode, false,                                       \
  3464           "Testing Only: Use the new version while testing")                \
  3466   diagnostic(bool, UseNewCode2, false,                                      \
  3467           "Testing Only: Use the new version while testing")                \
  3469   diagnostic(bool, UseNewCode3, false,                                      \
  3470           "Testing Only: Use the new version while testing")                \
  3472   /* flags for performance data collection */                               \
  3474   product(bool, UsePerfData, falseInEmbedded,                               \
  3475           "Flag to disable jvmstat instrumentation for performance testing" \
  3476           "and problem isolation purposes.")                                \
  3478   product(bool, PerfDataSaveToFile, false,                                  \
  3479           "Save PerfData memory to hsperfdata_<pid> file on exit")          \
  3481   product(ccstr, PerfDataSaveFile, NULL,                                    \
  3482           "Save PerfData memory to the specified absolute pathname,"        \
  3483            "%p in the file name if present will be replaced by pid")        \
  3485   product(intx, PerfDataSamplingInterval, 50 /*ms*/,                        \
  3486           "Data sampling interval in milliseconds")                         \
  3488   develop(bool, PerfTraceDataCreation, false,                               \
  3489           "Trace creation of Performance Data Entries")                     \
  3491   develop(bool, PerfTraceMemOps, false,                                     \
  3492           "Trace PerfMemory create/attach/detach calls")                    \
  3494   product(bool, PerfDisableSharedMem, false,                                \
  3495           "Store performance data in standard memory")                      \
  3497   product(intx, PerfDataMemorySize, 32*K,                                   \
  3498           "Size of performance data memory region. Will be rounded "        \
  3499           "up to a multiple of the native os page size.")                   \
  3501   product(intx, PerfMaxStringConstLength, 1024,                             \
  3502           "Maximum PerfStringConstant string length before truncation")     \
  3504   product(bool, PerfAllowAtExitRegistration, false,                         \
  3505           "Allow registration of atexit() methods")                         \
  3507   product(bool, PerfBypassFileSystemCheck, false,                           \
  3508           "Bypass Win32 file system criteria checks (Windows Only)")        \
  3510   product(intx, UnguardOnExecutionViolation, 0,                             \
  3511           "Unguard page and retry on no-execute fault (Win32 only)"         \
  3512           "0=off, 1=conservative, 2=aggressive")                            \
  3514   /* Serviceability Support */                                              \
  3516   product(bool, ManagementServer, false,                                    \
  3517           "Create JMX Management Server")                                   \
  3519   product(bool, DisableAttachMechanism, false,                              \
  3520          "Disable mechanism that allows tools to attach to this VM")        \
  3522   product(bool, StartAttachListener, false,                                 \
  3523           "Always start Attach Listener at VM startup")                     \
  3525   manageable(bool, PrintConcurrentLocks, false,                             \
  3526           "Print java.util.concurrent locks in thread dump")                \
  3528   product(bool, TransmitErrorReport, false,                                 \
  3529           "Enable error report transmission on erroneous termination")      \
  3531   product(ccstr, ErrorReportServer, NULL,                                   \
  3532           "Override built-in error report server address")                  \
  3534   /* Shared spaces */                                                       \
  3536   product(bool, UseSharedSpaces, true,                                      \
  3537           "Use shared spaces in the permanent generation")                  \
  3539   product(bool, RequireSharedSpaces, false,                                 \
  3540           "Require shared spaces in the permanent generation")              \
  3542   product(bool, DumpSharedSpaces, false,                                    \
  3543            "Special mode: JVM reads a class list, loads classes, builds "   \
  3544             "shared spaces, and dumps the shared spaces to a file to be "   \
  3545             "used in future JVM runs.")                                     \
  3547   product(bool, PrintSharedSpaces, false,                                   \
  3548           "Print usage of shared spaces")                                   \
  3550   product(uintx, SharedReadWriteSize,  NOT_LP64(12*M) LP64_ONLY(16*M),      \
  3551           "Size of read-write space in permanent generation (in bytes)")    \
  3553   product(uintx, SharedReadOnlySize,  NOT_LP64(12*M) LP64_ONLY(16*M),       \
  3554           "Size of read-only space in permanent generation (in bytes)")     \
  3556   product(uintx, SharedMiscDataSize,    NOT_LP64(2*M) LP64_ONLY(4*M),       \
  3557           "Size of the shared data area adjacent to the heap (in bytes)")   \
  3559   product(uintx, SharedMiscCodeSize,    120*K,                              \
  3560           "Size of the shared code area adjacent to the heap (in bytes)")   \
  3562   product(uintx, SharedDummyBlockSize, 0,                                   \
  3563           "Size of dummy block used to shift heap addresses (in bytes)")    \
  3565   diagnostic(bool, EnableInvokeDynamic, true,                               \
  3566           "support JSR 292 (method handles, invokedynamic, "                \
  3567           "anonymous classes")                                              \
  3569   diagnostic(bool, PrintMethodHandleStubs, false,                           \
  3570           "Print generated stub code for method handles")                   \
  3572   develop(bool, TraceMethodHandles, false,                                  \
  3573           "trace internal method handle operations")                        \
  3575   diagnostic(bool, VerifyMethodHandles, trueInDebug,                        \
  3576           "perform extra checks when constructing method handles")          \
  3578   diagnostic(bool, ShowHiddenFrames, false,                                 \
  3579           "show method handle implementation frames (usually hidden)")      \
  3581   experimental(bool, TrustFinalNonStaticFields, false,                      \
  3582           "trust final non-static declarations for constant folding")       \
  3584   develop(bool, TraceInvokeDynamic, false,                                  \
  3585           "trace internal invoke dynamic operations")                       \
  3587   diagnostic(bool, PauseAtStartup,      false,                              \
  3588           "Causes the VM to pause at startup time and wait for the pause "  \
  3589           "file to be removed (default: ./vm.paused.<pid>)")                \
  3591   diagnostic(ccstr, PauseAtStartupFile, NULL,                               \
  3592           "The file to create and for whose removal to await when pausing " \
  3593           "at startup. (default: ./vm.paused.<pid>)")                       \
  3595   diagnostic(bool, PauseAtExit, false,                                      \
  3596           "Pause and wait for keypress on exit if a debugger is attached")  \
  3598   product(bool, ExtendedDTraceProbes,    false,                             \
  3599           "Enable performance-impacting dtrace probes")                     \
  3601   product(bool, DTraceMethodProbes, false,                                  \
  3602           "Enable dtrace probes for method-entry and method-exit")          \
  3604   product(bool, DTraceAllocProbes, false,                                   \
  3605           "Enable dtrace probes for object allocation")                     \
  3607   product(bool, DTraceMonitorProbes, false,                                 \
  3608           "Enable dtrace probes for monitor events")                        \
  3610   product(bool, RelaxAccessControlCheck, false,                             \
  3611           "Relax the access control checks in the verifier")                \
  3613   diagnostic(bool, PrintDTraceDOF, false,                                   \
  3614              "Print the DTrace DOF passed to the system for JSDT probes")   \
  3616   product(uintx, StringTableSize, 1009,                                     \
  3617           "Number of buckets in the interned String table")                 \
  3619   develop(bool, TraceDefaultMethods, false,                                 \
  3620           "Trace the default method processing steps")                      \
  3622   develop(bool, ParseAllGenericSignatures, false,                           \
  3623           "Parse all generic signatures while classloading")                \
  3625   develop(bool, VerifyGenericSignatures, false,                             \
  3626           "Abort VM on erroneous or inconsistent generic signatures")       \
  3628   product(bool, UseVMInterruptibleIO, false,                                \
  3629           "(Unstable, Solaris-specific) Thread interrupt before or with "   \
  3630           "EINTR for I/O operations results in OS_INTRPT. The default value"\
  3631           " of this flag is true for JDK 6 and earlier")                    \
  3633   diagnostic(bool, WhiteBoxAPI, false,                                      \
  3634           "Enable internal testing APIs")                                   \
  3636   product(bool, PrintGCCause, true,                                         \
  3637           "Include GC cause in GC logging")
  3639 /*
  3640  *  Macros for factoring of globals
  3641  */
  3643 // Interface macros
  3644 #define DECLARE_PRODUCT_FLAG(type, name, value, doc)    extern "C" type name;
  3645 #define DECLARE_PD_PRODUCT_FLAG(type, name, doc)        extern "C" type name;
  3646 #define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name;
  3647 #define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
  3648 #define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
  3649 #define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
  3650 #ifdef PRODUCT
  3651 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc)  const type name = value;
  3652 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc)      const type name = pd_##name;
  3653 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)
  3654 #else
  3655 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc)  extern "C" type name;
  3656 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc)      extern "C" type name;
  3657 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)  extern "C" type name;
  3658 #endif
  3659 // Special LP64 flags, product only needed for now.
  3660 #ifdef _LP64
  3661 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
  3662 #else
  3663 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) const type name = value;
  3664 #endif // _LP64
  3666 // Implementation macros
  3667 #define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc)   type name = value;
  3668 #define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc)       type name = pd_##name;
  3669 #define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value;
  3670 #define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
  3671 #define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
  3672 #define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
  3673 #ifdef PRODUCT
  3674 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */
  3675 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)     /* flag name is constant */
  3676 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
  3677 #else
  3678 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
  3679 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)     type name = pd_##name;
  3680 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value;
  3681 #endif
  3682 #ifdef _LP64
  3683 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc)   type name = value;
  3684 #else
  3685 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */
  3686 #endif // _LP64
  3688 RUNTIME_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG, DECLARE_LP64_PRODUCT_FLAG)
  3690 RUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG)
  3692 ARCH_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG)
  3694 // Extensions
  3696 #include "runtime/globals_ext.hpp"
  3698 #endif // SHARE_VM_RUNTIME_GLOBALS_HPP

mercurial