comparison src/share/vm/runtime/globals.hpp @ 350:d28aa69f0959

6618726: Introduce -XX:+UnlockExperimentalVMOptions flag Summary: experimental() flags will protect features of an experimental nature that are not supported in the regular product build. Made UseG1GC an experimental flag. Reviewed-by: jmasa, kamg, coleenp
author ysr
date Mon, 30 Jun 2008 17:04:59 -0700
parents 69fefd031e6c
children fab5f738c515
comparison
equal deleted inserted replaced
349:73278b62f36c 350:d28aa69f0959
253 // are available in the product version of the VM. Under instruction 253 // are available in the product version of the VM. Under instruction
254 // from support engineers, VM customers can turn them on to collect 254 // from support engineers, VM customers can turn them on to collect
255 // diagnostic information about VM problems. To use a VM diagnostic 255 // diagnostic information about VM problems. To use a VM diagnostic
256 // option, you must first specify +UnlockDiagnosticVMOptions. 256 // option, you must first specify +UnlockDiagnosticVMOptions.
257 // (This master switch also affects the behavior of -Xprintflags.) 257 // (This master switch also affects the behavior of -Xprintflags.)
258 258 //
259 // experimental flags are in support of features that are not
260 // part of the officially supported product, but are available
261 // for experimenting with. They could, for example, be performance
262 // features that may not have undergone full or rigorous QA, but which may
263 // help performance in some cases and released for experimentation
264 // by the community of users and developers. This flag also allows one to
265 // be able to build a fully supported product that nonetheless also
266 // ships with some unsupported, lightly tested, experimental features.
267 // Like the UnlockDiagnosticVMOptions flag above, there is a corresponding
268 // UnlockExperimentalVMOptions flag, which allows the control and
269 // modification of the experimental flags.
270 //
259 // manageable flags are writeable external product flags. 271 // manageable flags are writeable external product flags.
260 // They are dynamically writeable through the JDK management interface 272 // They are dynamically writeable through the JDK management interface
261 // (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole. 273 // (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole.
262 // These flags are external exported interface (see CCC). The list of 274 // These flags are external exported interface (see CCC). The list of
263 // manageable flags can be queried programmatically through the management 275 // manageable flags can be queried programmatically through the management
283 // and not reuse state related to the flag state at any given time. 295 // and not reuse state related to the flag state at any given time.
284 // 296 //
285 // Note that when there is a need to support develop flags to be writeable, 297 // Note that when there is a need to support develop flags to be writeable,
286 // it can be done in the same way as product_rw. 298 // it can be done in the same way as product_rw.
287 299
288 #define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, notproduct, manageable, product_rw, lp64_product) \ 300 #define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \
289 \ 301 \
290 lp64_product(bool, UseCompressedOops, false, \ 302 lp64_product(bool, UseCompressedOops, false, \
291 "Use 32-bit object references in 64-bit VM. " \ 303 "Use 32-bit object references in 64-bit VM. " \
292 "lp64_product means flag is always constant in 32 bit VM") \ 304 "lp64_product means flag is always constant in 32 bit VM") \
293 \ 305 \
302 \ 314 \
303 product(bool, PrintCommandLineFlags, false, \ 315 product(bool, PrintCommandLineFlags, false, \
304 "Prints flags that appeared on the command line") \ 316 "Prints flags that appeared on the command line") \
305 \ 317 \
306 diagnostic(bool, UnlockDiagnosticVMOptions, trueInDebug, \ 318 diagnostic(bool, UnlockDiagnosticVMOptions, trueInDebug, \
307 "Enable processing of flags relating to field diagnostics") \ 319 "Enable normal processing of flags relating to field diagnostics")\
320 \
321 experimental(bool, UnlockExperimentalVMOptions, false, \
322 "Enable normal processing of flags relating to experimental features")\
308 \ 323 \
309 product(bool, JavaMonitorsInStackTrace, true, \ 324 product(bool, JavaMonitorsInStackTrace, true, \
310 "Print info. about Java monitor locks when the stacks are dumped")\ 325 "Print info. about Java monitor locks when the stacks are dumped")\
311 \ 326 \
312 product_pd(bool, UseLargePages, \ 327 product_pd(bool, UseLargePages, \
1112 /* gc */ \ 1127 /* gc */ \
1113 \ 1128 \
1114 product(bool, UseSerialGC, false, \ 1129 product(bool, UseSerialGC, false, \
1115 "Use the serial garbage collector") \ 1130 "Use the serial garbage collector") \
1116 \ 1131 \
1117 product(bool, UseG1GC, false, \ 1132 experimental(bool, UseG1GC, false, \
1118 "Use the Garbage-First garbage collector") \ 1133 "Use the Garbage-First garbage collector") \
1119 \ 1134 \
1120 product(bool, UseParallelGC, false, \ 1135 product(bool, UseParallelGC, false, \
1121 "Use the Parallel Scavenge garbage collector") \ 1136 "Use the Parallel Scavenge garbage collector") \
1122 \ 1137 \
3239 3254
3240 // Interface macros 3255 // Interface macros
3241 #define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3256 #define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
3242 #define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name; 3257 #define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name;
3243 #define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name; 3258 #define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name;
3259 #define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
3244 #define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name; 3260 #define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
3245 #define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name; 3261 #define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
3246 #ifdef PRODUCT 3262 #ifdef PRODUCT
3247 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value; 3263 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value;
3248 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name; 3264 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name;
3261 3277
3262 // Implementation macros 3278 // Implementation macros
3263 #define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value; 3279 #define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value;
3264 #define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name; 3280 #define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name;
3265 #define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value; 3281 #define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value;
3282 #define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
3266 #define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value; 3283 #define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
3267 #define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value; 3284 #define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
3268 #ifdef PRODUCT 3285 #ifdef PRODUCT
3269 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */ 3286 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */
3270 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) /* flag name is constant */ 3287 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) /* flag name is constant */
3278 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value; 3295 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value;
3279 #else 3296 #else
3280 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */ 3297 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */
3281 #endif // _LP64 3298 #endif // _LP64
3282 3299
3283 RUNTIME_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG, DECLARE_LP64_PRODUCT_FLAG) 3300 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)
3284 3301
3285 RUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG) 3302 RUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG)