Mercurial > hg > graal-jvmci-8
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) |