comparison src/share/vm/runtime/globals.hpp @ 12355:cefad50507d8

Merge with hs25-b53
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 11 Oct 2013 10:38:03 +0200
parents 58fc8e2b7b6d 1c3486050433
children 359f7e70ae7f
comparison
equal deleted inserted replaced
12058:ccb4f2af2319 12355:cefad50507d8
206 206
207 // string type aliases used only in this file 207 // string type aliases used only in this file
208 typedef const char* ccstr; 208 typedef const char* ccstr;
209 typedef const char* ccstrlist; // represents string arguments which accumulate 209 typedef const char* ccstrlist; // represents string arguments which accumulate
210 210
211 enum FlagValueOrigin {
212 DEFAULT = 0,
213 COMMAND_LINE = 1,
214 ENVIRON_VAR = 2,
215 CONFIG_FILE = 3,
216 MANAGEMENT = 4,
217 ERGONOMIC = 5,
218 ATTACH_ON_DEMAND = 6,
219 INTERNAL = 99
220 };
221
222 struct Flag { 211 struct Flag {
223 const char *type; 212 enum Flags {
224 const char *name; 213 // value origin
225 void* addr; 214 DEFAULT = 0,
226 215 COMMAND_LINE = 1,
227 NOT_PRODUCT(const char *doc;) 216 ENVIRON_VAR = 2,
228 217 CONFIG_FILE = 3,
229 const char *kind; 218 MANAGEMENT = 4,
230 FlagValueOrigin origin; 219 ERGONOMIC = 5,
220 ATTACH_ON_DEMAND = 6,
221 INTERNAL = 7,
222
223 LAST_VALUE_ORIGIN = INTERNAL,
224 VALUE_ORIGIN_BITS = 4,
225 VALUE_ORIGIN_MASK = right_n_bits(VALUE_ORIGIN_BITS),
226
227 // flag kind
228 KIND_PRODUCT = 1 << 4,
229 KIND_MANAGEABLE = 1 << 5,
230 KIND_DIAGNOSTIC = 1 << 6,
231 KIND_EXPERIMENTAL = 1 << 7,
232 KIND_NOT_PRODUCT = 1 << 8,
233 KIND_DEVELOP = 1 << 9,
234 KIND_PLATFORM_DEPENDENT = 1 << 10,
235 KIND_READ_WRITE = 1 << 11,
236 KIND_C1 = 1 << 12,
237 KIND_C2 = 1 << 13,
238 KIND_ARCH = 1 << 14,
239 KIND_SHARK = 1 << 15,
240 KIND_LP64_PRODUCT = 1 << 16,
241 KIND_COMMERCIAL = 1 << 17,
242 KIND_GRAAL = 1 << 18,
243
244 KIND_MASK = ~VALUE_ORIGIN_MASK
245 };
246
247 const char* _type;
248 const char* _name;
249 void* _addr;
250 NOT_PRODUCT(const char* _doc;)
251 Flags _flags;
231 252
232 // points to all Flags static array 253 // points to all Flags static array
233 static Flag *flags; 254 static Flag* flags;
234 255
235 // number of flags 256 // number of flags
236 static size_t numFlags; 257 static size_t numFlags;
237 258
238 static Flag* find_flag(const char* name, size_t length, bool allow_locked = false); 259 static Flag* find_flag(const char* name, size_t length, bool allow_locked = false);
239 static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false); 260 static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false);
240 261
241 bool is_bool() const { return strcmp(type, "bool") == 0; } 262 void check_writable();
242 bool get_bool() const { return *((bool*) addr); } 263
243 void set_bool(bool value) { *((bool*) addr) = value; } 264 bool is_bool() const;
244 265 bool get_bool() const;
245 bool is_intx() const { return strcmp(type, "intx") == 0; } 266 void set_bool(bool value);
246 intx get_intx() const { return *((intx*) addr); } 267
247 void set_intx(intx value) { *((intx*) addr) = value; } 268 bool is_intx() const;
248 269 intx get_intx() const;
249 bool is_uintx() const { return strcmp(type, "uintx") == 0; } 270 void set_intx(intx value);
250 uintx get_uintx() const { return *((uintx*) addr); } 271
251 void set_uintx(uintx value) { *((uintx*) addr) = value; } 272 bool is_uintx() const;
252 273 uintx get_uintx() const;
253 bool is_uint64_t() const { return strcmp(type, "uint64_t") == 0; } 274 void set_uintx(uintx value);
254 uint64_t get_uint64_t() const { return *((uint64_t*) addr); } 275
255 void set_uint64_t(uint64_t value) { *((uint64_t*) addr) = value; } 276 bool is_uint64_t() const;
256 277 uint64_t get_uint64_t() const;
257 bool is_double() const { return strcmp(type, "double") == 0; } 278 void set_uint64_t(uint64_t value);
258 double get_double() const { return *((double*) addr); } 279
259 void set_double(double value) { *((double*) addr) = value; } 280 bool is_double() const;
260 281 double get_double() const;
261 bool is_ccstr() const { return strcmp(type, "ccstr") == 0 || strcmp(type, "ccstrlist") == 0; } 282 void set_double(double value);
262 bool ccstr_accumulates() const { return strcmp(type, "ccstrlist") == 0; } 283
263 ccstr get_ccstr() const { return *((ccstr*) addr); } 284 bool is_ccstr() const;
264 void set_ccstr(ccstr value) { *((ccstr*) addr) = value; } 285 bool ccstr_accumulates() const;
286 ccstr get_ccstr() const;
287 void set_ccstr(ccstr value);
288
289 Flags get_origin();
290 void set_origin(Flags origin);
291
292 bool is_default();
293 bool is_ergonomic();
294 bool is_command_line();
295
296 bool is_product() const;
297 bool is_manageable() const;
298 bool is_diagnostic() const;
299 bool is_experimental() const;
300 bool is_notproduct() const;
301 bool is_develop() const;
302 bool is_read_write() const;
303 bool is_commercial() const;
304
305 bool is_constant_in_binary() const;
265 306
266 bool is_unlocker() const; 307 bool is_unlocker() const;
267 bool is_unlocked() const; 308 bool is_unlocked() const;
268 bool is_writeable() const; 309 bool is_writeable() const;
269 bool is_external() const; 310 bool is_external() const;
275 316
276 void get_locked_message(char*, int) const; 317 void get_locked_message(char*, int) const;
277 void get_locked_message_ext(char*, int) const; 318 void get_locked_message_ext(char*, int) const;
278 319
279 void print_on(outputStream* st, bool withComments = false ); 320 void print_on(outputStream* st, bool withComments = false );
321 void print_kind(outputStream* st);
280 void print_as_flag(outputStream* st); 322 void print_as_flag(outputStream* st);
281 }; 323 };
282 324
283 // debug flags control various aspects of the VM and are global accessible 325 // debug flags control various aspects of the VM and are global accessible
284 326
322 364
323 class CommandLineFlags { 365 class CommandLineFlags {
324 public: 366 public:
325 static bool boolAt(char* name, size_t len, bool* value); 367 static bool boolAt(char* name, size_t len, bool* value);
326 static bool boolAt(char* name, bool* value) { return boolAt(name, strlen(name), value); } 368 static bool boolAt(char* name, bool* value) { return boolAt(name, strlen(name), value); }
327 static bool boolAtPut(char* name, size_t len, bool* value, FlagValueOrigin origin); 369 static bool boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin);
328 static bool boolAtPut(char* name, bool* value, FlagValueOrigin origin) { return boolAtPut(name, strlen(name), value, origin); } 370 static bool boolAtPut(char* name, bool* value, Flag::Flags origin) { return boolAtPut(name, strlen(name), value, origin); }
329 371
330 static bool intxAt(char* name, size_t len, intx* value); 372 static bool intxAt(char* name, size_t len, intx* value);
331 static bool intxAt(char* name, intx* value) { return intxAt(name, strlen(name), value); } 373 static bool intxAt(char* name, intx* value) { return intxAt(name, strlen(name), value); }
332 static bool intxAtPut(char* name, size_t len, intx* value, FlagValueOrigin origin); 374 static bool intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin);
333 static bool intxAtPut(char* name, intx* value, FlagValueOrigin origin) { return intxAtPut(name, strlen(name), value, origin); } 375 static bool intxAtPut(char* name, intx* value, Flag::Flags origin) { return intxAtPut(name, strlen(name), value, origin); }
334 376
335 static bool uintxAt(char* name, size_t len, uintx* value); 377 static bool uintxAt(char* name, size_t len, uintx* value);
336 static bool uintxAt(char* name, uintx* value) { return uintxAt(name, strlen(name), value); } 378 static bool uintxAt(char* name, uintx* value) { return uintxAt(name, strlen(name), value); }
337 static bool uintxAtPut(char* name, size_t len, uintx* value, FlagValueOrigin origin); 379 static bool uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin);
338 static bool uintxAtPut(char* name, uintx* value, FlagValueOrigin origin) { return uintxAtPut(name, strlen(name), value, origin); } 380 static bool uintxAtPut(char* name, uintx* value, Flag::Flags origin) { return uintxAtPut(name, strlen(name), value, origin); }
339 381
340 static bool uint64_tAt(char* name, size_t len, uint64_t* value); 382 static bool uint64_tAt(char* name, size_t len, uint64_t* value);
341 static bool uint64_tAt(char* name, uint64_t* value) { return uint64_tAt(name, strlen(name), value); } 383 static bool uint64_tAt(char* name, uint64_t* value) { return uint64_tAt(name, strlen(name), value); }
342 static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, FlagValueOrigin origin); 384 static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin);
343 static bool uint64_tAtPut(char* name, uint64_t* value, FlagValueOrigin origin) { return uint64_tAtPut(name, strlen(name), value, origin); } 385 static bool uint64_tAtPut(char* name, uint64_t* value, Flag::Flags origin) { return uint64_tAtPut(name, strlen(name), value, origin); }
344 386
345 static bool doubleAt(char* name, size_t len, double* value); 387 static bool doubleAt(char* name, size_t len, double* value);
346 static bool doubleAt(char* name, double* value) { return doubleAt(name, strlen(name), value); } 388 static bool doubleAt(char* name, double* value) { return doubleAt(name, strlen(name), value); }
347 static bool doubleAtPut(char* name, size_t len, double* value, FlagValueOrigin origin); 389 static bool doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin);
348 static bool doubleAtPut(char* name, double* value, FlagValueOrigin origin) { return doubleAtPut(name, strlen(name), value, origin); } 390 static bool doubleAtPut(char* name, double* value, Flag::Flags origin) { return doubleAtPut(name, strlen(name), value, origin); }
349 391
350 static bool ccstrAt(char* name, size_t len, ccstr* value); 392 static bool ccstrAt(char* name, size_t len, ccstr* value);
351 static bool ccstrAt(char* name, ccstr* value) { return ccstrAt(name, strlen(name), value); } 393 static bool ccstrAt(char* name, ccstr* value) { return ccstrAt(name, strlen(name), value); }
352 static bool ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin); 394 static bool ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin);
353 static bool ccstrAtPut(char* name, ccstr* value, FlagValueOrigin origin) { return ccstrAtPut(name, strlen(name), value, origin); } 395 static bool ccstrAtPut(char* name, ccstr* value, Flag::Flags origin) { return ccstrAtPut(name, strlen(name), value, origin); }
354 396
355 // Returns false if name is not a command line flag. 397 // Returns false if name is not a command line flag.
356 static bool wasSetOnCmdline(const char* name, bool* value); 398 static bool wasSetOnCmdline(const char* name, bool* value);
357 static void printSetFlags(outputStream* out); 399 static void printSetFlags(outputStream* out);
358 400
455 \ 497 \
456 lp64_product(bool, UseCompressedOops, false, \ 498 lp64_product(bool, UseCompressedOops, false, \
457 "Use 32-bit object references in 64-bit VM " \ 499 "Use 32-bit object references in 64-bit VM " \
458 "lp64_product means flag is always constant in 32 bit VM") \ 500 "lp64_product means flag is always constant in 32 bit VM") \
459 \ 501 \
460 lp64_product(bool, UseCompressedKlassPointers, false, \ 502 lp64_product(bool, UseCompressedClassPointers, false, \
461 "Use 32-bit klass pointers in 64-bit VM " \ 503 "Use 32-bit class pointers in 64-bit VM " \
462 "lp64_product means flag is always constant in 32 bit VM") \ 504 "lp64_product means flag is always constant in 32 bit VM") \
463 \ 505 \
464 notproduct(bool, CheckCompressedOops, true, \ 506 notproduct(bool, CheckCompressedOops, true, \
465 "generate checks in encoding/decoding code in debug VM") \ 507 "generate checks in encoding/decoding code in debug VM") \
466 \ 508 \
664 "use intrinsics for java.util.zip.CRC32") \ 706 "use intrinsics for java.util.zip.CRC32") \
665 \ 707 \
666 develop(bool, TraceCallFixup, false, \ 708 develop(bool, TraceCallFixup, false, \
667 "traces all call fixups") \ 709 "traces all call fixups") \
668 \ 710 \
669 product(bool, DeoptimizeALot, false, \ 711 develop(bool, DeoptimizeALot, false, \
670 "deoptimize at every exit from the runtime system") \ 712 "deoptimize at every exit from the runtime system") \
671 \ 713 \
672 notproduct(ccstrlist, DeoptimizeOnlyAt, "", \ 714 notproduct(ccstrlist, DeoptimizeOnlyAt, "", \
673 "a comma separated list of bcis to deoptimize at") \ 715 "a comma separated list of bcis to deoptimize at") \
674 \ 716 \
892 "Automatically shutdown native memory tracking under stress " \ 934 "Automatically shutdown native memory tracking under stress " \
893 "situation. When set to false, native memory tracking tries to " \ 935 "situation. When set to false, native memory tracking tries to " \
894 "stay alive at the expense of JVM performance") \ 936 "stay alive at the expense of JVM performance") \
895 \ 937 \
896 diagnostic(bool, LogCompilation, false, \ 938 diagnostic(bool, LogCompilation, false, \
897 "Log compilation activity in detail to hotspot.log or LogFile") \ 939 "Log compilation activity in detail to LogFile") \
898 \ 940 \
899 product(bool, PrintCompilation, false, \ 941 product(bool, PrintCompilation, false, \
900 "Print compilations") \ 942 "Print compilations") \
901 \ 943 \
902 diagnostic(bool, TraceNMethodInstalls, false, \ 944 diagnostic(bool, TraceNMethodInstalls, false, \
925 diagnostic(bool, PrintAssembly, false, \ 967 diagnostic(bool, PrintAssembly, false, \
926 "Print assembly code (using external disassembler.so)") \ 968 "Print assembly code (using external disassembler.so)") \
927 \ 969 \
928 diagnostic(ccstr, PrintAssemblyOptions, NULL, \ 970 diagnostic(ccstr, PrintAssemblyOptions, NULL, \
929 "Options string passed to disassembler.so") \ 971 "Options string passed to disassembler.so") \
930 \
931 product(bool, PrintNMethodStatistics, false, \
932 "Print a summary statistic for the generated nmethods") \
933 \ 972 \
934 diagnostic(bool, PrintNMethods, false, \ 973 diagnostic(bool, PrintNMethods, false, \
935 "Print assembly code for nmethods when generated") \ 974 "Print assembly code for nmethods when generated") \
936 \ 975 \
937 diagnostic(bool, PrintNativeNMethods, false, \ 976 diagnostic(bool, PrintNativeNMethods, false, \
1254 "Trace bytecode execution") \ 1293 "Trace bytecode execution") \
1255 \ 1294 \
1256 develop(bool, TraceClassInitialization, false, \ 1295 develop(bool, TraceClassInitialization, false, \
1257 "Trace class initialization") \ 1296 "Trace class initialization") \
1258 \ 1297 \
1259 product(bool, TraceExceptions, false, \ 1298 develop(bool, TraceExceptions, false, \
1260 "Trace exceptions") \ 1299 "Trace exceptions") \
1261 \ 1300 \
1262 develop(bool, TraceICs, false, \ 1301 develop(bool, TraceICs, false, \
1263 "Trace inline cache changes") \ 1302 "Trace inline cache changes") \
1264 \ 1303 \
1948 "Trace virtual space metadata allocations") \ 1987 "Trace virtual space metadata allocations") \
1949 \ 1988 \
1950 notproduct(bool, ExecuteInternalVMTests, false, \ 1989 notproduct(bool, ExecuteInternalVMTests, false, \
1951 "Enable execution of internal VM tests.") \ 1990 "Enable execution of internal VM tests.") \
1952 \ 1991 \
1992 notproduct(bool, VerboseInternalVMTests, false, \
1993 "Turn on logging for internal VM tests.") \
1994 \
1953 product_pd(bool, UseTLAB, "Use thread-local object allocation") \ 1995 product_pd(bool, UseTLAB, "Use thread-local object allocation") \
1954 \ 1996 \
1955 product_pd(bool, ResizeTLAB, \ 1997 product_pd(bool, ResizeTLAB, \
1956 "Dynamically resize tlab size for threads") \ 1998 "Dynamically resize tlab size for threads") \
1957 \ 1999 \
2510 \ 2552 \
2511 notproduct(bool, PrintFlagsWithComments, false, \ 2553 notproduct(bool, PrintFlagsWithComments, false, \
2512 "Print all VM flags with default values and descriptions and exit")\ 2554 "Print all VM flags with default values and descriptions and exit")\
2513 \ 2555 \
2514 diagnostic(bool, SerializeVMOutput, true, \ 2556 diagnostic(bool, SerializeVMOutput, true, \
2515 "Use a mutex to serialize output to tty and hotspot.log") \ 2557 "Use a mutex to serialize output to tty and LogFile") \
2516 \ 2558 \
2517 diagnostic(bool, DisplayVMOutput, true, \ 2559 diagnostic(bool, DisplayVMOutput, true, \
2518 "Display all VM output on the tty, independently of LogVMOutput") \ 2560 "Display all VM output on the tty, independently of LogVMOutput") \
2519 \ 2561 \
2520 diagnostic(bool, LogVMOutput, trueInDebug, \ 2562 diagnostic(bool, LogVMOutput, false, \
2521 "Save VM output to hotspot.log, or to LogFile") \ 2563 "Save VM output to LogFile") \
2522 \ 2564 \
2523 diagnostic(ccstr, LogFile, NULL, \ 2565 diagnostic(ccstr, LogFile, NULL, \
2524 "If LogVMOutput is on, save VM output to this file [hotspot.log]") \ 2566 "If LogVMOutput or LogCompilation is on, save VM output to " \
2567 "this file [default: ./hotspot_pid%p.log] (%p replaced with pid)") \
2525 \ 2568 \
2526 product(ccstr, ErrorFile, NULL, \ 2569 product(ccstr, ErrorFile, NULL, \
2527 "If an error occurs, save the error data to this file " \ 2570 "If an error occurs, save the error data to this file " \
2528 "[default: ./hs_err_pid%p.log] (%p replaced with pid)") \ 2571 "[default: ./hs_err_pid%p.log] (%p replaced with pid)") \
2529 \ 2572 \
2536 product(bool, UseHeavyMonitors, false, \ 2579 product(bool, UseHeavyMonitors, false, \
2537 "use heavyweight instead of lightweight Java monitors") \ 2580 "use heavyweight instead of lightweight Java monitors") \
2538 \ 2581 \
2539 product(bool, PrintStringTableStatistics, false, \ 2582 product(bool, PrintStringTableStatistics, false, \
2540 "print statistics about the StringTable and SymbolTable") \ 2583 "print statistics about the StringTable and SymbolTable") \
2584 \
2585 diagnostic(bool, VerifyStringTableAtExit, false, \
2586 "verify StringTable contents at exit") \
2541 \ 2587 \
2542 notproduct(bool, PrintSymbolTableSizeHistogram, false, \ 2588 notproduct(bool, PrintSymbolTableSizeHistogram, false, \
2543 "print histogram of the symbol table") \ 2589 "print histogram of the symbol table") \
2544 \ 2590 \
2545 notproduct(bool, ExitVMOnVerifyError, false, \ 2591 notproduct(bool, ExitVMOnVerifyError, false, \
2841 "Number of invocations of sweeper to cover all nmethods") \ 2887 "Number of invocations of sweeper to cover all nmethods") \
2842 \ 2888 \
2843 product(intx, NmethodSweepCheckInterval, 5, \ 2889 product(intx, NmethodSweepCheckInterval, 5, \
2844 "Compilers wake up every n seconds to possibly sweep nmethods") \ 2890 "Compilers wake up every n seconds to possibly sweep nmethods") \
2845 \ 2891 \
2892 product(intx, NmethodSweepActivity, 10, \
2893 "Removes cold nmethods from code cache if > 0. Higher values " \
2894 "result in more aggressive sweeping") \
2895 \
2846 notproduct(bool, LogSweeper, false, \ 2896 notproduct(bool, LogSweeper, false, \
2847 "Keep a ring buffer of sweeper activity") \ 2897 "Keep a ring buffer of sweeper activity") \
2848 \ 2898 \
2849 notproduct(intx, SweeperLogEntries, 1024, \ 2899 notproduct(intx, SweeperLogEntries, 1024, \
2850 "Number of records in the ring buffer of sweeper activity") \ 2900 "Number of records in the ring buffer of sweeper activity") \
3057 "Initial size of Metaspaces (in bytes)") \ 3107 "Initial size of Metaspaces (in bytes)") \
3058 \ 3108 \
3059 product(uintx, MaxMetaspaceSize, max_uintx, \ 3109 product(uintx, MaxMetaspaceSize, max_uintx, \
3060 "Maximum size of Metaspaces (in bytes)") \ 3110 "Maximum size of Metaspaces (in bytes)") \
3061 \ 3111 \
3062 product(uintx, ClassMetaspaceSize, 1*G, \ 3112 product(uintx, CompressedClassSpaceSize, 1*G, \
3063 "Maximum size of InstanceKlass area in Metaspace used for " \ 3113 "Maximum size of class area in Metaspace when compressed " \
3064 "UseCompressedKlassPointers") \ 3114 "class pointers are used") \
3065 \ 3115 \
3066 product(uintx, MinHeapFreeRatio, 40, \ 3116 product(uintx, MinHeapFreeRatio, 40, \
3067 "Min percentage of heap free after GC to avoid expansion") \ 3117 "Min percentage of heap free after GC to avoid expansion") \
3068 \ 3118 \
3069 product(uintx, MaxHeapFreeRatio, 70, \ 3119 product(uintx, MaxHeapFreeRatio, 70, \
3214 notproduct(bool, ExitOnFullCodeCache, false, \ 3264 notproduct(bool, ExitOnFullCodeCache, false, \
3215 "Exit the VM if we fill the code cache.") \ 3265 "Exit the VM if we fill the code cache.") \
3216 \ 3266 \
3217 product(bool, UseCodeCacheFlushing, true, \ 3267 product(bool, UseCodeCacheFlushing, true, \
3218 "Attempt to clean the code cache before shutting off compiler") \ 3268 "Attempt to clean the code cache before shutting off compiler") \
3219 \
3220 product(intx, MinCodeCacheFlushingInterval, 30, \
3221 "Min number of seconds between code cache cleaning sessions") \
3222 \
3223 product(uintx, CodeCacheFlushingMinimumFreeSpace, 1500*K, \
3224 "When less than X space left, start code cache cleaning") \
3225 \
3226 product(uintx, CodeCacheFlushingFraction, 2, \
3227 "Fraction of the code cache that is flushed when full") \
3228 \ 3269 \
3229 /* interpreter debugging */ \ 3270 /* interpreter debugging */ \
3230 develop(intx, BinarySwitchThreshold, 5, \ 3271 develop(intx, BinarySwitchThreshold, 5, \
3231 "Minimal number of lookupswitch entries for rewriting to binary " \ 3272 "Minimal number of lookupswitch entries for rewriting to binary " \
3232 "switch") \ 3273 "switch") \
3365 \ 3406 \
3366 experimental(bool, UseCriticalCMSThreadPriority, false, \ 3407 experimental(bool, UseCriticalCMSThreadPriority, false, \
3367 "ConcurrentMarkSweep thread runs at critical scheduling priority")\ 3408 "ConcurrentMarkSweep thread runs at critical scheduling priority")\
3368 \ 3409 \
3369 /* compiler debugging */ \ 3410 /* compiler debugging */ \
3370 develop(intx, CompileTheWorldStartAt, 1, \ 3411 notproduct(intx, CompileTheWorldStartAt, 1, \
3371 "First class to consider when using +CompileTheWorld") \ 3412 "First class to consider when using +CompileTheWorld") \
3372 \ 3413 \
3373 develop(intx, CompileTheWorldStopAt, max_jint, \ 3414 notproduct(intx, CompileTheWorldStopAt, max_jint, \
3374 "Last class to consider when using +CompileTheWorld") \ 3415 "Last class to consider when using +CompileTheWorld") \
3375 \ 3416 \
3376 develop(intx, NewCodeParameter, 0, \ 3417 develop(intx, NewCodeParameter, 0, \
3377 "Testing Only: Create a dedicated integer parameter before " \ 3418 "Testing Only: Create a dedicated integer parameter before " \
3378 "putback") \ 3419 "putback") \
3532 \ 3573 \
3533 product(bool, ReflectionWrapResolutionErrors, true, \ 3574 product(bool, ReflectionWrapResolutionErrors, true, \
3534 "Temporary flag for transition to AbstractMethodError wrapped " \ 3575 "Temporary flag for transition to AbstractMethodError wrapped " \
3535 "in InvocationTargetException. See 6531596") \ 3576 "in InvocationTargetException. See 6531596") \
3536 \ 3577 \
3578 develop(bool, VerifyLambdaBytecodes, false, \
3579 "Force verification of jdk 8 lambda metafactory bytecodes.") \
3537 \ 3580 \
3538 develop(intx, FastSuperclassLimit, 8, \ 3581 develop(intx, FastSuperclassLimit, 8, \
3539 "Depth of hardwired instanceof accelerator array") \ 3582 "Depth of hardwired instanceof accelerator array") \
3540 \ 3583 \
3541 /* Properties for Java libraries */ \ 3584 /* Properties for Java libraries */ \
3665 "show method handle implementation frames (usually hidden)") \ 3708 "show method handle implementation frames (usually hidden)") \
3666 \ 3709 \
3667 experimental(bool, TrustFinalNonStaticFields, false, \ 3710 experimental(bool, TrustFinalNonStaticFields, false, \
3668 "trust final non-static declarations for constant folding") \ 3711 "trust final non-static declarations for constant folding") \
3669 \ 3712 \
3713 experimental(bool, FoldStableValues, false, \
3714 "Private flag to control optimizations for stable variables") \
3715 \
3670 develop(bool, TraceInvokeDynamic, false, \ 3716 develop(bool, TraceInvokeDynamic, false, \
3671 "trace internal invoke dynamic operations") \ 3717 "trace internal invoke dynamic operations") \
3672 \ 3718 \
3673 diagnostic(bool, PauseAtStartup, false, \ 3719 diagnostic(bool, PauseAtStartup, false, \
3674 "Causes the VM to pause at startup time and wait for the pause " \ 3720 "Causes the VM to pause at startup time and wait for the pause " \
3703 "Number of buckets in the interned String table") \ 3749 "Number of buckets in the interned String table") \
3704 \ 3750 \
3705 develop(bool, TraceDefaultMethods, false, \ 3751 develop(bool, TraceDefaultMethods, false, \
3706 "Trace the default method processing steps") \ 3752 "Trace the default method processing steps") \
3707 \ 3753 \
3708 develop(bool, ParseAllGenericSignatures, false, \
3709 "Parse all generic signatures while classloading") \
3710 \
3711 develop(bool, VerifyGenericSignatures, false, \ 3754 develop(bool, VerifyGenericSignatures, false, \
3712 "Abort VM on erroneous or inconsistent generic signatures") \ 3755 "Abort VM on erroneous or inconsistent generic signatures") \
3713 \
3714 product(bool, ParseGenericDefaults, false, \
3715 "Parse generic signatures for default method handling") \
3716 \ 3756 \
3717 product(bool, UseVMInterruptibleIO, false, \ 3757 product(bool, UseVMInterruptibleIO, false, \
3718 "(Unstable, Solaris-specific) Thread interrupt before or with " \ 3758 "(Unstable, Solaris-specific) Thread interrupt before or with " \
3719 "EINTR for I/O operations results in OS_INTRPT. The default value"\ 3759 "EINTR for I/O operations results in OS_INTRPT. The default value"\
3720 " of this flag is true for JDK 6 and earlier") \ 3760 " of this flag is true for JDK 6 and earlier") \
3751 /* 3791 /*
3752 * Macros for factoring of globals 3792 * Macros for factoring of globals
3753 */ 3793 */
3754 3794
3755 // Interface macros 3795 // Interface macros
3756 #define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3796 #define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
3757 #define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name; 3797 #define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name;
3758 #define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name; 3798 #define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name;
3759 #define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name; 3799 #define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
3760 #define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name; 3800 #define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
3761 #define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name; 3801 #define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
3762 #ifdef PRODUCT 3802 #ifdef PRODUCT
3763 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value; 3803 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type CONST_##name; const type name = value;
3764 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name; 3804 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type CONST_##name; const type name = pd_##name;
3765 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) 3805 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type CONST_##name;
3766 #else 3806 #else
3767 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name; 3807 #define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
3768 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name; 3808 #define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
3769 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3809 #define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name;
3770 #endif 3810 #endif
3771 // Special LP64 flags, product only needed for now. 3811 // Special LP64 flags, product only needed for now.
3772 #ifdef _LP64 3812 #ifdef _LP64
3773 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3813 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
3774 #else 3814 #else
3775 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) const type name = value; 3815 #define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) const type name = value;
3776 #endif // _LP64 3816 #endif // _LP64
3777 3817
3778 // Implementation macros 3818 // Implementation macros
3779 #define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value; 3819 #define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value;
3780 #define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name; 3820 #define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name;
3781 #define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value; 3821 #define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value;
3782 #define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value; 3822 #define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
3783 #define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value; 3823 #define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
3784 #define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value; 3824 #define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
3785 #ifdef PRODUCT 3825 #ifdef PRODUCT
3786 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */ 3826 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type CONST_##name = value;
3787 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) /* flag name is constant */ 3827 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type CONST_##name = pd_##name;
3788 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) 3828 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type CONST_##name = value;
3789 #else 3829 #else
3790 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value; 3830 #define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
3791 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name; 3831 #define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
3792 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value; 3832 #define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value;
3793 #endif 3833 #endif
3794 #ifdef _LP64 3834 #ifdef _LP64
3795 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value; 3835 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value;
3796 #else 3836 #else
3797 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */ 3837 #define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */
3798 #endif // _LP64 3838 #endif // _LP64
3799 3839
3800 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) 3840 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)