globals.hpp revision 8247:4864e4370e54
11558Srgrimes/* 21558Srgrimes * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. 31558Srgrimes * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 41558Srgrimes * 51558Srgrimes * This code is free software; you can redistribute it and/or modify it 61558Srgrimes * under the terms of the GNU General Public License version 2 only, as 71558Srgrimes * published by the Free Software Foundation. 81558Srgrimes * 91558Srgrimes * This code is distributed in the hope that it will be useful, but WITHOUT 101558Srgrimes * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 111558Srgrimes * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 121558Srgrimes * version 2 for more details (a copy is included in the LICENSE file that 131558Srgrimes * accompanied this code). 141558Srgrimes * 151558Srgrimes * You should have received a copy of the GNU General Public License version 161558Srgrimes * 2 along with this work; if not, write to the Free Software Foundation, 171558Srgrimes * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 181558Srgrimes * 191558Srgrimes * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 201558Srgrimes * or visit www.oracle.com if you need additional information or have any 211558Srgrimes * questions. 221558Srgrimes * 231558Srgrimes */ 241558Srgrimes 251558Srgrimes#ifndef SHARE_VM_RUNTIME_GLOBALS_HPP 261558Srgrimes#define SHARE_VM_RUNTIME_GLOBALS_HPP 271558Srgrimes 281558Srgrimes#include "utilities/debug.hpp" 291558Srgrimes 301558Srgrimes// use this for flags that are true per default in the tiered build 311558Srgrimes// but false in non-tiered builds, and vice versa 321558Srgrimes#ifdef TIERED 331558Srgrimes#define trueInTiered true 3437663Scharnier#define falseInTiered false 351558Srgrimes#else 361558Srgrimes#define trueInTiered false 372999Swollman#define falseInTiered true 381558Srgrimes#endif 39105267Scharnier 401558Srgrimes#ifdef TARGET_ARCH_x86 4137663Scharnier# include "globals_x86.hpp" 42105267Scharnier#endif 4337663Scharnier#ifdef TARGET_ARCH_sparc 441558Srgrimes# include "globals_sparc.hpp" 45105267Scharnier#endif 46105267Scharnier#ifdef TARGET_ARCH_zero 47105267Scharnier# include "globals_zero.hpp" 481558Srgrimes#endif 49192934Srmacklem#ifdef TARGET_ARCH_arm 50192934Srmacklem# include "globals_arm.hpp" 51192934Srmacklem#endif 521558Srgrimes#ifdef TARGET_ARCH_ppc 531558Srgrimes# include "globals_ppc.hpp" 54192934Srmacklem#endif 551558Srgrimes#ifdef TARGET_ARCH_aarch64 561558Srgrimes# include "globals_aarch64.hpp" 571558Srgrimes#endif 58109363Smbr#ifdef TARGET_OS_FAMILY_linux 591558Srgrimes# include "globals_linux.hpp" 6074462Salfred#endif 6174462Salfred#ifdef TARGET_OS_FAMILY_solaris 629336Sdfr# include "globals_solaris.hpp" 63192934Srmacklem#endif 6483653Speter#ifdef TARGET_OS_FAMILY_windows 651558Srgrimes# include "globals_windows.hpp" 66192934Srmacklem#endif 67192934Srmacklem#ifdef TARGET_OS_FAMILY_aix 681558Srgrimes# include "globals_aix.hpp" 691558Srgrimes#endif 701558Srgrimes#ifdef TARGET_OS_FAMILY_bsd 7137663Scharnier# include "globals_bsd.hpp" 721558Srgrimes#endif 731558Srgrimes#ifdef TARGET_OS_ARCH_linux_x86 74149433Spjd# include "globals_linux_x86.hpp" 75103949Smike#endif 761558Srgrimes#ifdef TARGET_OS_ARCH_linux_sparc 771558Srgrimes# include "globals_linux_sparc.hpp" 781558Srgrimes#endif 791558Srgrimes#ifdef TARGET_OS_ARCH_linux_zero 801558Srgrimes# include "globals_linux_zero.hpp" 811558Srgrimes#endif 821558Srgrimes#ifdef TARGET_OS_ARCH_solaris_x86 831558Srgrimes# include "globals_solaris_x86.hpp" 84158857Srodrigc#endif 851558Srgrimes#ifdef TARGET_OS_ARCH_solaris_sparc 861558Srgrimes# include "globals_solaris_sparc.hpp" 871558Srgrimes#endif 881558Srgrimes#ifdef TARGET_OS_ARCH_windows_x86 891558Srgrimes# include "globals_windows_x86.hpp" 901558Srgrimes#endif 911558Srgrimes#ifdef TARGET_OS_ARCH_linux_arm 921558Srgrimes# include "globals_linux_arm.hpp" 931558Srgrimes#endif 941558Srgrimes#ifdef TARGET_OS_ARCH_linux_ppc 95194880Sdfr# include "globals_linux_ppc.hpp" 96194880Sdfr#endif 971558Srgrimes#ifdef TARGET_OS_ARCH_linux_aarch64 981558Srgrimes# include "globals_linux_aarch64.hpp" 991558Srgrimes#endif 1001558Srgrimes#ifdef TARGET_OS_ARCH_aix_ppc 1011558Srgrimes# include "globals_aix_ppc.hpp" 1021558Srgrimes#endif 1031558Srgrimes#ifdef TARGET_OS_ARCH_bsd_x86 1041558Srgrimes# include "globals_bsd_x86.hpp" 1051558Srgrimes#endif 1061558Srgrimes#ifdef TARGET_OS_ARCH_bsd_zero 1071558Srgrimes# include "globals_bsd_zero.hpp" 1089336Sdfr#endif 1091558Srgrimes#ifdef COMPILER1 1101558Srgrimes#ifdef TARGET_ARCH_x86 1111558Srgrimes# include "c1_globals_x86.hpp" 1121558Srgrimes#endif 1131558Srgrimes#ifdef TARGET_ARCH_sparc 1141558Srgrimes# include "c1_globals_sparc.hpp" 1151558Srgrimes#endif 1161558Srgrimes#ifdef TARGET_ARCH_arm 11727447Sdfr# include "c1_globals_arm.hpp" 118184588Sdfr#endif 119184588Sdfr#ifdef TARGET_ARCH_aarch64 1201558Srgrimes# include "c1_globals_aarch64.hpp" 1211558Srgrimes#endif 1221558Srgrimes#ifdef TARGET_OS_FAMILY_linux 1231558Srgrimes# include "c1_globals_linux.hpp" 1241558Srgrimes#endif 12574462Salfred#ifdef TARGET_OS_FAMILY_solaris 12675801Siedowse# include "c1_globals_solaris.hpp" 12742144Sdfr#endif 1281558Srgrimes#ifdef TARGET_OS_FAMILY_windows 1291558Srgrimes# include "c1_globals_windows.hpp" 1301558Srgrimes#endif 13174462Salfred#ifdef TARGET_OS_FAMILY_aix 1321558Srgrimes# include "c1_globals_aix.hpp" 1331558Srgrimes#endif 1341558Srgrimes#ifdef TARGET_OS_FAMILY_bsd 1351558Srgrimes# include "c1_globals_bsd.hpp" 1361558Srgrimes#endif 1371558Srgrimes#ifdef TARGET_ARCH_ppc 1381558Srgrimes# include "c1_globals_ppc.hpp" 1391558Srgrimes#endif 1401558Srgrimes#endif 1411558Srgrimes#ifdef COMPILER2 1421558Srgrimes#ifdef TARGET_ARCH_x86 1431558Srgrimes# include "c2_globals_x86.hpp" 14475641Siedowse#endif 1457401Swpaul#ifdef TARGET_ARCH_sparc 1461558Srgrimes# include "c2_globals_sparc.hpp" 1471558Srgrimes#endif 1489336Sdfr#ifdef TARGET_ARCH_arm 1491558Srgrimes# include "c2_globals_arm.hpp" 1501558Srgrimes#endif 1511558Srgrimes#ifdef TARGET_ARCH_ppc 1521558Srgrimes# include "c2_globals_ppc.hpp" 1539336Sdfr#endif 1549336Sdfr#ifdef TARGET_ARCH_aarch64 1559336Sdfr# include "c2_globals_aarch64.hpp" 1569336Sdfr#endif 157184588Sdfr#ifdef TARGET_OS_FAMILY_linux 158184588Sdfr# include "c2_globals_linux.hpp" 1599336Sdfr#endif 1609336Sdfr#ifdef TARGET_OS_FAMILY_solaris 1611558Srgrimes# include "c2_globals_solaris.hpp" 16292882Simp#endif 16392882Simp#ifdef TARGET_OS_FAMILY_windows 16492882Simp# include "c2_globals_windows.hpp" 16592882Simp#endif 16692882Simp#ifdef TARGET_OS_FAMILY_aix 16792882Simp# include "c2_globals_aix.hpp" 16875801Siedowse#endif 16992882Simp#ifdef TARGET_OS_FAMILY_bsd 170172827Smatteo# include "c2_globals_bsd.hpp" 17175635Siedowse#endif 17292882Simp#endif 17392882Simp#ifdef SHARK 17492882Simp#ifdef TARGET_ARCH_zero 17592882Simp# include "shark_globals_zero.hpp" 17692882Simp#endif 17792882Simp#endif 17892882Simp 17992882Simp#if !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK) 18092882Simpdefine_pd_global(bool, BackgroundCompilation, false); 18192882Simpdefine_pd_global(bool, UseTLAB, false); 18292882Simpdefine_pd_global(bool, CICompileOSR, false); 18392882Simpdefine_pd_global(bool, UseTypeProfile, false); 18492882Simpdefine_pd_global(bool, UseOnStackReplacement, false); 18592882Simpdefine_pd_global(bool, InlineIntrinsics, false); 18692882Simpdefine_pd_global(bool, PreferInterpreterNativeStubs, true); 18792882Simpdefine_pd_global(bool, ProfileInterpreter, false); 18892882Simpdefine_pd_global(bool, ProfileTraps, false); 18992882Simpdefine_pd_global(bool, TieredCompilation, false); 19092882Simp 19192882Simpdefine_pd_global(intx, CompileThreshold, 0); 19292882Simp 19375754Siedowsedefine_pd_global(intx, OnStackReplacePercentage, 0); 19475801Siedowsedefine_pd_global(bool, ResizeTLAB, false); 19592882Simpdefine_pd_global(intx, FreqInlineSize, 0); 19692882Simpdefine_pd_global(size_t, NewSizeThreadIncrease, 4*K); 19792882Simpdefine_pd_global(intx, InlineClassNatives, true); 19892882Simpdefine_pd_global(intx, InlineUnsafeOps, true); 199216587Scharnierdefine_pd_global(intx, InitialCodeCacheSize, 160*K); 200100117Salfreddefine_pd_global(intx, ReservedCodeCacheSize, 32*M); 20175801Siedowsedefine_pd_global(intx, NonProfiledCodeHeapSize, 0); 20275801Siedowsedefine_pd_global(intx, ProfiledCodeHeapSize, 0); 20375801Siedowsedefine_pd_global(intx, NonNMethodCodeHeapSize, 32*M); 20492882Simp 20592882Simpdefine_pd_global(intx, CodeCacheExpansionSize, 32*K); 20692882Simpdefine_pd_global(intx, CodeCacheMinBlockLength, 1); 20792882Simpdefine_pd_global(intx, CodeCacheMinimumUseSpace, 200*K); 208100117Salfreddefine_pd_global(size_t, MetaspaceSize, ScaleForWordSize(4*M)); 209216587Scharnierdefine_pd_global(bool, NeverActAsServerClassMachine, true); 21092882Simpdefine_pd_global(uint64_t,MaxRAM, 1ULL*G); 21192882Simp#define CI_COMPILER_COUNT 0 21292882Simp#else 2131558Srgrimes 2141558Srgrimes#ifdef COMPILER2 2151558Srgrimes#define CI_COMPILER_COUNT 2 2161558Srgrimes#else 217166440Spjd#define CI_COMPILER_COUNT 1 218166440Spjd#endif // COMPILER2 219172827Smatteo 22072650Sgreen#endif // no compilers 22191354Sdd 22272650Sgreen// string type aliases used only in this file 2231558Srgrimestypedef const char* ccstr; 22472650Sgreentypedef const char* ccstrlist; // represents string arguments which accumulate 22572650Sgreen 2261558Srgrimesstruct Flag { 22725087Sdfr enum Flags { 2289336Sdfr // value origin 229172827Smatteo DEFAULT = 0, 2309336Sdfr COMMAND_LINE = 1, 231121767Speter ENVIRON_VAR = 2, 23275754Siedowse CONFIG_FILE = 3, 233172827Smatteo MANAGEMENT = 4, 23474462Salfred ERGONOMIC = 5, 235172827Smatteo ATTACH_ON_DEMAND = 6, 236172827Smatteo INTERNAL = 7, 2371558Srgrimes 23874462Salfred LAST_VALUE_ORIGIN = INTERNAL, 23974462Salfred VALUE_ORIGIN_BITS = 4, 240192934Srmacklem VALUE_ORIGIN_MASK = right_n_bits(VALUE_ORIGIN_BITS), 241192934Srmacklem 242192934Srmacklem // flag kind 243192934Srmacklem KIND_PRODUCT = 1 << 4, 244192934Srmacklem KIND_MANAGEABLE = 1 << 5, 245149433Spjd KIND_DIAGNOSTIC = 1 << 6, 24675801Siedowse KIND_EXPERIMENTAL = 1 << 7, 2471558Srgrimes KIND_NOT_PRODUCT = 1 << 8, 2481558Srgrimes KIND_DEVELOP = 1 << 9, 24983653Speter KIND_PLATFORM_DEPENDENT = 1 << 10, 2501558Srgrimes KIND_READ_WRITE = 1 << 11, 2511558Srgrimes KIND_C1 = 1 << 12, 2521558Srgrimes KIND_C2 = 1 << 13, 25375801Siedowse KIND_ARCH = 1 << 14, 254100336Sjoerg KIND_SHARK = 1 << 15, 25574462Salfred KIND_LP64_PRODUCT = 1 << 16, 256184588Sdfr KIND_COMMERCIAL = 1 << 17, 2571558Srgrimes 2581558Srgrimes KIND_MASK = ~VALUE_ORIGIN_MASK 2591558Srgrimes }; 26092882Simp 2611558Srgrimes const char* _type; 2621558Srgrimes const char* _name; 2631558Srgrimes void* _addr; 2641558Srgrimes NOT_PRODUCT(const char* _doc;) 2651558Srgrimes Flags _flags; 2661558Srgrimes 2671558Srgrimes // points to all Flags static array 2681558Srgrimes static Flag* flags; 2691558Srgrimes 2701558Srgrimes // number of flags 2711558Srgrimes static size_t numFlags; 2721558Srgrimes 2731558Srgrimes static Flag* find_flag(const char* name, size_t length, bool allow_locked = false, bool return_flag = false); 274216587Scharnier static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false); 2751558Srgrimes 27675754Siedowse void check_writable(); 277172827Smatteo 278172827Smatteo bool is_bool() const; 279172827Smatteo bool get_bool() const; 280149433Spjd void set_bool(bool value); 281172827Smatteo 282172827Smatteo bool is_intx() const; 283109363Smbr intx get_intx() const; 2841558Srgrimes void set_intx(intx value); 28574462Salfred 286150214Spjd bool is_uintx() const; 287149433Spjd uintx get_uintx() const; 288149433Spjd void set_uintx(uintx value); 289149433Spjd 290149433Spjd bool is_uint64_t() const; 291149433Spjd uint64_t get_uint64_t() const; 29274462Salfred void set_uint64_t(uint64_t value); 29374462Salfred 29474462Salfred bool is_size_t() const; 29574462Salfred size_t get_size_t() const; 29674462Salfred void set_size_t(size_t value); 29774462Salfred 2982999Swollman bool is_double() const; 299192993Srmacklem double get_double() const; 3001558Srgrimes void set_double(double value); 30125087Sdfr 30225087Sdfr bool is_ccstr() const; 30325087Sdfr bool ccstr_accumulates() const; 304192993Srmacklem ccstr get_ccstr() const; 305192934Srmacklem void set_ccstr(ccstr value); 306192934Srmacklem 3079336Sdfr Flags get_origin(); 3089336Sdfr void set_origin(Flags origin); 3099336Sdfr 3109336Sdfr bool is_default(); 3119336Sdfr bool is_ergonomic(); 3129336Sdfr bool is_command_line(); 3138688Sphk 3148688Sphk bool is_product() const; 3158688Sphk bool is_manageable() const; 31631656Sguido bool is_diagnostic() const; 317121767Speter bool is_experimental() const; 31831656Sguido bool is_notproduct() const; 319126572Sbms bool is_develop() const; 320126572Sbms bool is_read_write() const; 321126572Sbms bool is_commercial() const; 322126572Sbms 323126572Sbms bool is_constant_in_binary() const; 324126572Sbms 325172827Smatteo bool is_unlocker() const; 326126572Sbms bool is_unlocked() const; 327172827Smatteo bool is_writeable() const; 328172827Smatteo bool is_external() const; 329172827Smatteo 330172827Smatteo bool is_unlocker_ext() const; 331172827Smatteo bool is_unlocked_ext() const; 332172827Smatteo bool is_writeable_ext() const; 333172827Smatteo bool is_external_ext() const; 334172827Smatteo 335172827Smatteo void unlock_diagnostic(); 336172827Smatteo 337172827Smatteo void get_locked_message(char*, int) const; 338172827Smatteo void get_locked_message_ext(char*, int) const; 339172827Smatteo 340172827Smatteo void print_on(outputStream* st, bool withComments = false ); 341172827Smatteo void print_kind(outputStream* st); 342172827Smatteo void print_as_flag(outputStream* st); 343172827Smatteo}; 344172827Smatteo 345172827Smatteo// debug flags control various aspects of the VM and are global accessible 346172827Smatteo 347172827Smatteo// use FlagSetting to temporarily change some debug flag 3481558Srgrimes// e.g. FlagSetting fs(DebugThisAndThat, true); 34937663Scharnier// restored to previous value upon leaving scope 3501558Srgrimesclass FlagSetting { 351192934Srmacklem bool val; 352192934Srmacklem bool* flag; 353192993Srmacklem public: 354192934Srmacklem FlagSetting(bool& fl, bool newValue) { flag = &fl; val = fl; fl = newValue; } 355192934Srmacklem ~FlagSetting() { *flag = val; } 356192934Srmacklem}; 357192934Srmacklem 358192934Srmacklem 359192934Srmacklemclass CounterSetting { 360192934Srmacklem intx* counter; 361192934Srmacklem public: 362192934Srmacklem CounterSetting(intx* cnt) { counter = cnt; (*counter)++; } 363192934Srmacklem ~CounterSetting() { (*counter)--; } 364192934Srmacklem}; 365192934Srmacklem 366192934Srmacklem 367192934Srmacklemclass UIntFlagSetting { 368192934Srmacklem uintx val; 369192934Srmacklem uintx* flag; 370192934Srmacklem public: 3711558Srgrimes UIntFlagSetting(uintx& fl, uintx newValue) { flag = &fl; val = fl; fl = newValue; } 3721558Srgrimes ~UIntFlagSetting() { *flag = val; } 3731558Srgrimes}; 3741558Srgrimes 3751558Srgrimesclass DoubleFlagSetting { 376166440Spjd double val; 377166440Spjd double* flag; 378166440Spjd public: 379166440Spjd DoubleFlagSetting(double& fl, double newValue) { flag = &fl; val = fl; fl = newValue; } 3801558Srgrimes ~DoubleFlagSetting() { *flag = val; } 3811558Srgrimes}; 38237663Scharnier 3831558Srgrimesclass SizeTFlagSetting { 3841558Srgrimes size_t val; 38537663Scharnier size_t* flag; 3861558Srgrimes public: 3871558Srgrimes SizeTFlagSetting(size_t& fl, size_t newValue) { flag = &fl; val = fl; fl = newValue; } 38837663Scharnier ~SizeTFlagSetting() { *flag = val; } 3891558Srgrimes}; 3901558Srgrimes 3911558Srgrimes 3921558Srgrimesclass CommandLineFlags { 3931558Srgrimes public: 39475754Siedowse static bool boolAt(const char* name, size_t len, bool* value, bool allow_locked = false, bool return_flag = false); 39574462Salfred static bool boolAt(const char* name, bool* value, bool allow_locked = false, bool return_flag = false) { return boolAt(name, strlen(name), value, allow_locked, return_flag); } 396164394Srodrigc static bool boolAtPut(const char* name, size_t len, bool* value, Flag::Flags origin); 397149433Spjd static bool boolAtPut(const char* name, bool* value, Flag::Flags origin) { return boolAtPut(name, strlen(name), value, origin); } 398149433Spjd 399149433Spjd static bool intxAt(const char* name, size_t len, intx* value, bool allow_locked = false, bool return_flag = false); 400194880Sdfr static bool intxAt(const char* name, intx* value, bool allow_locked = false, bool return_flag = false) { return intxAt(name, strlen(name), value, allow_locked, return_flag); } 401194880Sdfr static bool intxAtPut(const char* name, size_t len, intx* value, Flag::Flags origin); 402109363Smbr static bool intxAtPut(const char* name, intx* value, Flag::Flags origin) { return intxAtPut(name, strlen(name), value, origin); } 403109363Smbr 40424759Sguido static bool uintxAt(const char* name, size_t len, uintx* value, bool allow_locked = false, bool return_flag = false); 40583687Speter static bool uintxAt(const char* name, uintx* value, bool allow_locked = false, bool return_flag = false) { return uintxAt(name, strlen(name), value, allow_locked, return_flag); } 40683687Speter static bool uintxAtPut(const char* name, size_t len, uintx* value, Flag::Flags origin); 40783687Speter static bool uintxAtPut(const char* name, uintx* value, Flag::Flags origin) { return uintxAtPut(name, strlen(name), value, origin); } 40824759Sguido 40924759Sguido static bool size_tAt(const char* name, size_t len, size_t* value, bool allow_locked = false, bool return_flag = false); 41024759Sguido static bool size_tAt(const char* name, size_t* value, bool allow_locked = false, bool return_flag = false) { return size_tAt(name, strlen(name), value, allow_locked, return_flag); } 41124330Sguido static bool size_tAtPut(const char* name, size_t len, size_t* value, Flag::Flags origin); 412126572Sbms static bool size_tAtPut(const char* name, size_t* value, Flag::Flags origin) { return size_tAtPut(name, strlen(name), value, origin); } 413172827Smatteo 414172827Smatteo static bool uint64_tAt(const char* name, size_t len, uint64_t* value, bool allow_locked = false, bool return_flag = false); 415172827Smatteo static bool uint64_tAt(const char* name, uint64_t* value, bool allow_locked = false, bool return_flag = false) { return uint64_tAt(name, strlen(name), value, allow_locked, return_flag); } 416172827Smatteo static bool uint64_tAtPut(const char* name, size_t len, uint64_t* value, Flag::Flags origin); 417172827Smatteo static bool uint64_tAtPut(const char* name, uint64_t* value, Flag::Flags origin) { return uint64_tAtPut(name, strlen(name), value, origin); } 418172827Smatteo 419172827Smatteo static bool doubleAt(const char* name, size_t len, double* value, bool allow_locked = false, bool return_flag = false); 420172827Smatteo static bool doubleAt(const char* name, double* value, bool allow_locked = false, bool return_flag = false) { return doubleAt(name, strlen(name), value, allow_locked, return_flag); } 421172827Smatteo static bool doubleAtPut(const char* name, size_t len, double* value, Flag::Flags origin); 422172827Smatteo static bool doubleAtPut(const char* name, double* value, Flag::Flags origin) { return doubleAtPut(name, strlen(name), value, origin); } 423172827Smatteo 424172827Smatteo static bool ccstrAt(const char* name, size_t len, ccstr* value, bool allow_locked = false, bool return_flag = false); 425172827Smatteo static bool ccstrAt(const char* name, ccstr* value, bool allow_locked = false, bool return_flag = false) { return ccstrAt(name, strlen(name), value, allow_locked, return_flag); } 426172827Smatteo // Contract: Flag will make private copy of the incoming value. 427172827Smatteo // Outgoing value is always malloc-ed, and caller MUST call free. 428172827Smatteo static bool ccstrAtPut(const char* name, size_t len, ccstr* value, Flag::Flags origin); 429172827Smatteo static bool ccstrAtPut(const char* name, ccstr* value, Flag::Flags origin) { return ccstrAtPut(name, strlen(name), value, origin); } 430172827Smatteo 431172827Smatteo // Returns false if name is not a command line flag. 432172827Smatteo static bool wasSetOnCmdline(const char* name, bool* value); 433172827Smatteo static void printSetFlags(outputStream* out); 434172827Smatteo 435172827Smatteo static void printFlags(outputStream* out, bool withComments); 436172827Smatteo 437172827Smatteo static void verify() PRODUCT_RETURN; 438172827Smatteo}; 439172827Smatteo 440172827Smatteo// use this for flags that are true by default in the debug version but 441172827Smatteo// false in the optimized version, and vice versa 442172827Smatteo#ifdef ASSERT 443172827Smatteo#define trueInDebug true 444172827Smatteo#define falseInDebug false 445172827Smatteo#else 446172827Smatteo#define trueInDebug false 447172827Smatteo#define falseInDebug true 448126572Sbms#endif 449172827Smatteo 45074462Salfred// use this for flags that are true per default in the product build 451172827Smatteo// but false in development builds, and vice versa 45274462Salfred#ifdef PRODUCT 45374462Salfred#define trueInProduct true 454172827Smatteo#define falseInProduct false 455172827Smatteo#else 456172827Smatteo#define trueInProduct false 457172827Smatteo#define falseInProduct true 458172827Smatteo#endif 459172827Smatteo 460172827Smatteo#ifdef JAVASE_EMBEDDED 461172827Smatteo#define falseInEmbedded false 462172827Smatteo#else 46374462Salfred#define falseInEmbedded true 464172827Smatteo#endif 46574462Salfred 46674462Salfred// develop flags are settable / visible only during development and are constant in the PRODUCT version 46774462Salfred// product flags are always settable / visible 4681558Srgrimes// notproduct flags are settable / visible only during development and are not declared in the PRODUCT version 4691558Srgrimes 47075754Siedowse// A flag must be declared with one of the following types: 47175754Siedowse// bool, intx, uintx, size_t, ccstr, double, or uint64_t. 47275754Siedowse// The type "ccstr" is an alias for "const char*" and is used 47375754Siedowse// only in this file, because the macrology requires single-token type names. 47475754Siedowse 47575754Siedowse// Note: Diagnostic options not meant for VM tuning or for product modes. 47675754Siedowse// They are to be used for VM quality assurance or field diagnosis 47775754Siedowse// of VM bugs. They are hidden so that users will not be encouraged to 47875754Siedowse// try them as if they were VM ordinary execution options. However, they 47975754Siedowse// are available in the product version of the VM. Under instruction 48075754Siedowse// from support engineers, VM customers can turn them on to collect 48175754Siedowse// diagnostic information about VM problems. To use a VM diagnostic 48275754Siedowse// option, you must first specify +UnlockDiagnosticVMOptions. 48375754Siedowse// (This master switch also affects the behavior of -Xprintflags.) 48475754Siedowse// 48575754Siedowse// experimental flags are in support of features that are not 48675754Siedowse// part of the officially supported product, but are available 48775754Siedowse// for experimenting with. They could, for example, be performance 48875754Siedowse// features that may not have undergone full or rigorous QA, but which may 48975754Siedowse// help performance in some cases and released for experimentation 490172827Smatteo// by the community of users and developers. This flag also allows one to 491172827Smatteo// be able to build a fully supported product that nonetheless also 492172827Smatteo// ships with some unsupported, lightly tested, experimental features. 493172827Smatteo// Like the UnlockDiagnosticVMOptions flag above, there is a corresponding 494172827Smatteo// UnlockExperimentalVMOptions flag, which allows the control and 495172827Smatteo// modification of the experimental flags. 496172827Smatteo// 497172827Smatteo// Nota bene: neither diagnostic nor experimental options should be used casually, 498172827Smatteo// and they are not supported on production loads, except under explicit 499172827Smatteo// direction from support engineers. 500172827Smatteo// 501172827Smatteo// manageable flags are writeable external product flags. 502172827Smatteo// They are dynamically writeable through the JDK management interface 503172827Smatteo// (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole. 504172827Smatteo// These flags are external exported interface (see CCC). The list of 505172827Smatteo// manageable flags can be queried programmatically through the management 506172827Smatteo// interface. 507172827Smatteo// 508172827Smatteo// A flag can be made as "manageable" only if 509172827Smatteo// - the flag is defined in a CCC as an external exported interface. 510172827Smatteo// - the VM implementation supports dynamic setting of the flag. 511172827Smatteo// This implies that the VM must *always* query the flag variable 512172827Smatteo// and not reuse state related to the flag state at any given time. 513172827Smatteo// - you want the flag to be queried programmatically by the customers. 514172827Smatteo// 515172827Smatteo// product_rw flags are writeable internal product flags. 516172827Smatteo// They are like "manageable" flags but for internal/private use. 517172827Smatteo// The list of product_rw flags are internal/private flags which 518172827Smatteo// may be changed/removed in a future release. It can be set 519172827Smatteo// through the management interface to get/set value 520172827Smatteo// when the name of flag is supplied. 521172827Smatteo// 522172827Smatteo// A flag can be made as "product_rw" only if 523172827Smatteo// - the VM implementation supports dynamic setting of the flag. 524172827Smatteo// This implies that the VM must *always* query the flag variable 525172827Smatteo// and not reuse state related to the flag state at any given time. 526172827Smatteo// 527172827Smatteo// Note that when there is a need to support develop flags to be writeable, 528172827Smatteo// it can be done in the same way as product_rw. 529172827Smatteo 530172827Smatteo#define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \ 531172827Smatteo \ 532172827Smatteo lp64_product(bool, UseCompressedOops, false, \ 533172827Smatteo "Use 32-bit object references in 64-bit VM. " \ 534172827Smatteo "lp64_product means flag is always constant in 32 bit VM") \ 535172827Smatteo \ 536172827Smatteo lp64_product(bool, UseCompressedClassPointers, false, \ 537172827Smatteo "Use 32-bit class pointers in 64-bit VM. " \ 538172827Smatteo "lp64_product means flag is always constant in 32 bit VM") \ 539172827Smatteo \ 540172827Smatteo notproduct(bool, CheckCompressedOops, true, \ 541172827Smatteo "Generate checks in encoding/decoding code in debug VM") \ 542172827Smatteo \ 543172827Smatteo product_pd(size_t, HeapBaseMinAddress, \ 544172827Smatteo "OS specific low limit for heap base address") \ 545172827Smatteo \ 546172827Smatteo product(uintx, HeapSearchSteps, 3 PPC64_ONLY(+17), \ 547172827Smatteo "Heap allocation steps through preferred address regions to find" \ 548172827Smatteo " where it can allocate the heap. Number of steps to take per " \ 549172827Smatteo "region.") \ 550172827Smatteo \ 551172827Smatteo diagnostic(bool, PrintCompressedOopsMode, false, \ 552172827Smatteo "Print compressed oops base address and encoding mode") \ 553172827Smatteo \ 554172827Smatteo lp64_product(intx, ObjectAlignmentInBytes, 8, \ 555172827Smatteo "Default object alignment in bytes, 8 is minimum") \ 556172827Smatteo \ 557172827Smatteo product(bool, AssumeMP, false, \ 558172827Smatteo "Instruct the VM to assume multiple processors are available") \ 559172827Smatteo \ 560172827Smatteo /* UseMembar is theoretically a temp flag used for memory barrier \ 561172827Smatteo * removal testing. It was supposed to be removed before FCS but has \ 562172827Smatteo * been re-added (see 6401008) */ \ 563172827Smatteo product_pd(bool, UseMembar, \ 564172827Smatteo "(Unstable) Issues membars on thread state transitions") \ 565172827Smatteo \ 566172827Smatteo develop(bool, CleanChunkPoolAsync, falseInEmbedded, \ 567172827Smatteo "Clean the chunk pool asynchronously") \ 568172827Smatteo \ 569172827Smatteo experimental(bool, AlwaysSafeConstructors, false, \ 570172827Smatteo "Force safe construction, as if all fields are final.") \ 571172827Smatteo \ 572172827Smatteo /* Temporary: See 6948537 */ \ 573172827Smatteo experimental(bool, UseMemSetInBOT, true, \ 574172827Smatteo "(Unstable) uses memset in BOT updates in GC code") \ 575172827Smatteo \ 576172827Smatteo diagnostic(bool, UnlockDiagnosticVMOptions, trueInDebug, \ 577172827Smatteo "Enable normal processing of flags relating to field diagnostics")\ 578172827Smatteo \ 579172827Smatteo experimental(bool, UnlockExperimentalVMOptions, false, \ 580172827Smatteo "Enable normal processing of flags relating to experimental " \ 581172827Smatteo "features") \ 582172827Smatteo \ 583172827Smatteo product(bool, JavaMonitorsInStackTrace, true, \ 584172827Smatteo "Print information about Java monitor locks when the stacks are" \ 585172827Smatteo "dumped") \ 586172827Smatteo \ 587172827Smatteo product_pd(bool, UseLargePages, \ 588172827Smatteo "Use large page memory") \ 589172827Smatteo \ 590172827Smatteo product_pd(bool, UseLargePagesIndividualAllocation, \ 591172827Smatteo "Allocate large pages individually for better affinity") \ 592172827Smatteo \ 593172827Smatteo develop(bool, LargePagesIndividualAllocationInjectError, false, \ 594172827Smatteo "Fail large pages individual allocation") \ 595172827Smatteo \ 596172827Smatteo product(bool, UseLargePagesInMetaspace, false, \ 597172827Smatteo "Use large page memory in metaspace. " \ 598172827Smatteo "Only used if UseLargePages is enabled.") \ 599172827Smatteo \ 600172827Smatteo develop(bool, TracePageSizes, false, \ 601172827Smatteo "Trace page size selection and usage") \ 602172827Smatteo \ 603172827Smatteo product(bool, UseNUMA, false, \ 604172827Smatteo "Use NUMA if available") \ 605172827Smatteo \ 606172827Smatteo product(bool, UseNUMAInterleaving, false, \ 607172827Smatteo "Interleave memory across NUMA nodes if available") \ 608172827Smatteo \ 609172827Smatteo product(size_t, NUMAInterleaveGranularity, 2*M, \ 610172827Smatteo "Granularity to use for NUMA interleaving on Windows OS") \ 611172827Smatteo \ 612172827Smatteo product(bool, ForceNUMA, false, \ 613172827Smatteo "Force NUMA optimizations on single-node/UMA systems") \ 614172827Smatteo \ 615172827Smatteo product(uintx, NUMAChunkResizeWeight, 20, \ 616172827Smatteo "Percentage (0-100) used to weight the current sample when " \ 617172827Smatteo "computing exponentially decaying average for " \ 618172827Smatteo "AdaptiveNUMAChunkSizing") \ 619172827Smatteo \ 620172827Smatteo product(size_t, NUMASpaceResizeRate, 1*G, \ 621172827Smatteo "Do not reallocate more than this amount per collection") \ 622172827Smatteo \ 623172827Smatteo product(bool, UseAdaptiveNUMAChunkSizing, true, \ 624172827Smatteo "Enable adaptive chunk sizing for NUMA") \ 625172827Smatteo \ 626172827Smatteo product(bool, NUMAStats, false, \ 627173056Ssimon "Print NUMA stats in detailed heap information") \ 628172827Smatteo \ 629172827Smatteo product(uintx, NUMAPageScanRate, 256, \ 630172827Smatteo "Maximum number of pages to include in the page scan procedure") \ 631172827Smatteo \ 632172827Smatteo product_pd(bool, NeedsDeoptSuspend, \ 633172827Smatteo "True for register window machines (sparc/ia64)") \ 634172827Smatteo \ 635172827Smatteo product(intx, UseSSE, 99, \ 636172827Smatteo "Highest supported SSE instructions set on x86/x64") \ 637172827Smatteo \ 638172827Smatteo product(bool, UseAES, false, \ 639172827Smatteo "Control whether AES instructions can be used on x86/x64") \ 640172827Smatteo \ 641172827Smatteo product(bool, UseSHA, false, \ 642172827Smatteo "Control whether SHA instructions can be used on SPARC") \ 643172827Smatteo \ 644172827Smatteo product(size_t, LargePageSizeInBytes, 0, \ 645172827Smatteo "Large page size (0 to let VM choose the page size)") \ 646172827Smatteo \ 647172827Smatteo product(size_t, LargePageHeapSizeThreshold, 128*M, \ 648172827Smatteo "Use large pages if maximum heap is at least this big") \ 649172827Smatteo \ 650172827Smatteo product(bool, ForceTimeHighResolution, false, \ 651172827Smatteo "Using high time resolution (for Win32 only)") \ 652172827Smatteo \ 653172827Smatteo develop(bool, TraceItables, false, \ 654172827Smatteo "Trace initialization and use of itables") \ 655172827Smatteo \ 656172827Smatteo develop(bool, TracePcPatching, false, \ 657172827Smatteo "Trace usage of frame::patch_pc") \ 658172827Smatteo \ 659172827Smatteo develop(bool, TraceJumps, false, \ 660172827Smatteo "Trace assembly jumps in thread ring buffer") \ 661172827Smatteo \ 662172827Smatteo develop(bool, TraceRelocator, false, \ 663172827Smatteo "Trace the bytecode relocator") \ 664172827Smatteo \ 665172827Smatteo develop(bool, TraceLongCompiles, false, \ 666172827Smatteo "Print out every time compilation is longer than " \ 667172827Smatteo "a given threshold") \ 668172827Smatteo \ 669172827Smatteo develop(bool, SafepointALot, false, \ 670172827Smatteo "Generate a lot of safepoints. This works with " \ 671172827Smatteo "GuaranteedSafepointInterval") \ 672172827Smatteo \ 673172827Smatteo product_pd(bool, BackgroundCompilation, \ 674172827Smatteo "A thread requesting compilation is not blocked during " \ 675194880Sdfr "compilation") \ 676172827Smatteo \ 677172827Smatteo product(bool, PrintVMQWaitTime, false, \ 678194880Sdfr "Print out the waiting time in VM operation queue") \ 679172827Smatteo \ 680172827Smatteo develop(bool, NoYieldsInMicrolock, false, \ 681194880Sdfr "Disable yields in microlock") \ 682172827Smatteo \ 683172827Smatteo develop(bool, TraceOopMapGeneration, false, \ 684194880Sdfr "Show OopMapGeneration") \ 685172827Smatteo \ 686172827Smatteo product(bool, MethodFlushing, true, \ 687172827Smatteo "Reclamation of zombie and not-entrant methods") \ 688172827Smatteo \ 689172827Smatteo develop(bool, VerifyStack, false, \ 690172827Smatteo "Verify stack of each thread when it is entering a runtime call") \ 691172827Smatteo \ 692172827Smatteo diagnostic(bool, ForceUnreachable, false, \ 693172827Smatteo "Make all non code cache addresses to be unreachable by " \ 694172827Smatteo "forcing use of 64bit literal fixups") \ 695172827Smatteo \ 696172827Smatteo notproduct(bool, StressDerivedPointers, false, \ 697172827Smatteo "Force scavenge when a derived pointer is detected on stack " \ 698172827Smatteo "after rtm call") \ 699172827Smatteo \ 700172827Smatteo develop(bool, TraceDerivedPointers, false, \ 701172827Smatteo "Trace traversal of derived pointers on stack") \ 702172827Smatteo \ 703172827Smatteo notproduct(bool, TraceCodeBlobStacks, false, \ 704172827Smatteo "Trace stack-walk of codeblobs") \ 705172827Smatteo \ 706172827Smatteo product(bool, PrintJNIResolving, false, \ 707172827Smatteo "Used to implement -v:jni") \ 708172827Smatteo \ 709172827Smatteo notproduct(bool, PrintRewrites, false, \ 710172827Smatteo "Print methods that are being rewritten") \ 711172827Smatteo \ 712172827Smatteo product(bool, UseInlineCaches, true, \ 713172827Smatteo "Use Inline Caches for virtual calls ") \ 714172827Smatteo \ 715172827Smatteo develop(bool, InlineArrayCopy, true, \ 716172827Smatteo "Inline arraycopy native that is known to be part of " \ 717172827Smatteo "base library DLL") \ 718172827Smatteo \ 719172827Smatteo develop(bool, InlineObjectHash, true, \ 720172827Smatteo "Inline Object::hashCode() native that is known to be part " \ 721172827Smatteo "of base library DLL") \ 722194880Sdfr \ 723194880Sdfr develop(bool, InlineNatives, true, \ 724172827Smatteo "Inline natives that are known to be part of base library DLL") \ 725172827Smatteo \ 726172827Smatteo develop(bool, InlineMathNatives, true, \ 727172827Smatteo "Inline SinD, CosD, etc.") \ 728172827Smatteo \ 7291558Srgrimes develop(bool, InlineClassNatives, true, \ 7301558Srgrimes "Inline Class.isInstance, etc") \ 73137663Scharnier \ 732216587Scharnier develop(bool, InlineThreadNatives, true, \ 73337663Scharnier "Inline Thread.currentThread, etc") \ 73437663Scharnier \ 735192993Srmacklem develop(bool, InlineUnsafeOps, true, \ 736172827Smatteo "Inline memory ops (native methods) from sun.misc.Unsafe") \ 73737663Scharnier \ 73837663Scharnier product(bool, CriticalJNINatives, true, \ 73937663Scharnier "Check for critical JNI entry points") \ 7401558Srgrimes \ 7411558Srgrimes notproduct(bool, StressCriticalJNINatives, false, \ 7421558Srgrimes "Exercise register saving code in critical natives") \ 7431558Srgrimes \ 744216587Scharnier product(bool, UseSSE42Intrinsics, false, \ 7451558Srgrimes "SSE4.2 versions of intrinsics") \ 7461558Srgrimes \ 7471558Srgrimes product(bool, UseAESIntrinsics, false, \ 7489336Sdfr "Use intrinsics for AES versions of crypto") \ 7491558Srgrimes \ 7501558Srgrimes product(bool, UseSHA1Intrinsics, false, \ 75174462Salfred "Use intrinsics for SHA-1 crypto hash function") \ 75274462Salfred \ 75374462Salfred product(bool, UseSHA256Intrinsics, false, \ 7549336Sdfr "Use intrinsics for SHA-224 and SHA-256 crypto hash functions") \ 755194880Sdfr \ 75628911Sguido product(bool, UseSHA512Intrinsics, false, \ 7579336Sdfr "Use intrinsics for SHA-384 and SHA-512 crypto hash functions") \ 7581558Srgrimes \ 7599336Sdfr product(bool, UseCRC32Intrinsics, false, \ 7609336Sdfr "use intrinsics for java.util.zip.CRC32") \ 76174462Salfred \ 76274462Salfred develop(bool, TraceCallFixup, false, \ 76374462Salfred "Trace all call fixups") \ 76475635Siedowse \ 76574462Salfred develop(bool, DeoptimizeALot, false, \ 76674462Salfred "Deoptimize at every exit from the runtime system") \ 76775635Siedowse \ 76874462Salfred notproduct(ccstrlist, DeoptimizeOnlyAt, "", \ 76974462Salfred "A comma separated list of bcis to deoptimize at") \ 77074462Salfred \ 77174462Salfred product(bool, DeoptimizeRandom, false, \ 77274462Salfred "Deoptimize random frames on random exit from the runtime system")\ 77374462Salfred \ 77474462Salfred notproduct(bool, ZombieALot, false, \ 77574462Salfred "Create zombies (non-entrant) at exit from the runtime system") \ 77674462Salfred \ 7771558Srgrimes product(bool, UnlinkSymbolsALot, false, \ 7781558Srgrimes "Unlink unreferenced symbols from the symbol table at safepoints")\ 779121556Speter \ 78037663Scharnier notproduct(bool, WalkStackALot, false, \ 7811558Srgrimes "Trace stack (no print) at every exit from the runtime system") \ 782194880Sdfr \ 7839336Sdfr product(bool, Debugging, false, \ 78431656Sguido "Set when executing debug methods in debug.cpp " \ 78531656Sguido "(to prevent triggering assertions)") \ 78674462Salfred \ 7871558Srgrimes notproduct(bool, StrictSafepointChecks, trueInDebug, \ 7881558Srgrimes "Enable strict checks that safepoints cannot happen for threads " \ 7891558Srgrimes "that use No_Safepoint_Verifier") \ 790121556Speter \ 79131656Sguido notproduct(bool, VerifyLastFrame, false, \ 79274462Salfred "Verify oops on last frame on entry to VM") \ 7931558Srgrimes \ 7941558Srgrimes develop(bool, TraceHandleAllocation, false, \ 7951558Srgrimes "Print out warnings when suspiciously many handles are allocated")\ 7961558Srgrimes \ 7971558Srgrimes product(bool, FailOverToOldVerifier, true, \ 7981558Srgrimes "Fail over to old verifier when split verifier fails") \ 7999336Sdfr \ 8009336Sdfr develop(bool, ShowSafepointMsgs, false, \ 8011558Srgrimes "Show message about safepoint synchronization") \ 80251968Salfred \ 8031558Srgrimes product(bool, SafepointTimeout, false, \ 8049336Sdfr "Time out and warn or fail after SafepointTimeoutDelay " \ 80574462Salfred "milliseconds if failed to reach safepoint") \ 8061558Srgrimes \ 8071558Srgrimes develop(bool, DieOnSafepointTimeout, false, \ 80831656Sguido "Die upon failure to reach safepoint (see SafepointTimeout)") \ 80937663Scharnier \ 81074462Salfred /* 50 retries * (5 * current_retry_count) millis = ~6.375 seconds */ \ 8111558Srgrimes /* typically, at most a few retries are needed */ \ 81237663Scharnier product(intx, SuspendRetryCount, 50, \ 81328911Sguido "Maximum retry count for an external suspend request") \ 8141558Srgrimes \ 8151558Srgrimes product(intx, SuspendRetryDelay, 5, \ 8161558Srgrimes "Milliseconds to delay per retry (* current_retry_count)") \ 8179336Sdfr \ 8181558Srgrimes product(bool, AssertOnSuspendWaitFailure, false, \ 8199336Sdfr "Assert/Guarantee on external suspend wait failure") \ 8209336Sdfr \ 8211558Srgrimes product(bool, TraceSuspendWaitFailures, false, \ 82274462Salfred "Trace external suspend wait failures") \ 82374462Salfred \ 82474462Salfred product(bool, MaxFDLimit, true, \ 82528911Sguido "Bump the number of file descriptors to maximum in Solaris") \ 826121556Speter \ 82728911Sguido diagnostic(bool, LogEvents, true, \ 82837663Scharnier "Enable the various ring buffer event logs") \ 82928911Sguido \ 83028911Sguido diagnostic(uintx, LogEventsBufferEntries, 10, \ 83128911Sguido "Number of ring buffer event logs") \ 8329336Sdfr \ 8339336Sdfr product(bool, BytecodeVerificationRemote, true, \ 8349336Sdfr "Enable the Java bytecode verifier for remote classes") \ 8359336Sdfr \ 8369336Sdfr product(bool, BytecodeVerificationLocal, false, \ 8371558Srgrimes "Enable the Java bytecode verifier for local classes") \ 83823681Speter \ 8399336Sdfr develop(bool, ForceFloatExceptions, trueInDebug, \ 8401558Srgrimes "Force exceptions on FP stack under/overflow") \ 84137663Scharnier \ 842121556Speter develop(bool, VerifyStackAtCalls, false, \ 8431558Srgrimes "Verify that the stack pointer is unchanged after calls") \ 84437663Scharnier \ 8459336Sdfr develop(bool, TraceJavaAssertions, false, \ 8461558Srgrimes "Trace java language assertions") \ 8471558Srgrimes \ 848184588Sdfr notproduct(bool, CheckAssertionStatusDirectives, false, \ 849184588Sdfr "Temporary - see javaClasses.cpp") \ 850121556Speter \ 851121556Speter notproduct(bool, PrintMallocFree, false, \ 85237663Scharnier "Trace calls to C heap malloc/free allocation") \ 85374462Salfred \ 85474462Salfred product(bool, PrintOopAddress, false, \ 8551558Srgrimes "Always print the location of the oop") \ 85674462Salfred \ 8571558Srgrimes notproduct(bool, VerifyCodeCache, false, \ 85837663Scharnier "Verify code cache on memory allocation/deallocation") \ 859121767Speter \ 86031656Sguido develop(bool, ZapDeadCompiledLocals, false, \ 86131656Sguido "Zap dead locals in compiler frames") \ 86274462Salfred \ 86331656Sguido notproduct(bool, ZapDeadLocalsOld, false, \ 8641558Srgrimes "Zap dead locals (old version, zaps all frames when " \ 86531656Sguido "entering the VM") \ 86631656Sguido \ 86774462Salfred notproduct(bool, CheckOopishValues, false, \ 86831656Sguido "Warn if value contains oop (requires ZapDeadLocals)") \ 86928911Sguido \ 870121556Speter develop(bool, UseMallocOnly, false, \ 871121556Speter "Use only malloc/free for allocation (no resource area/arena)") \ 87237663Scharnier \ 8739336Sdfr develop(bool, PrintMalloc, false, \ 8741558Srgrimes "Print all malloc/free calls") \ 875194880Sdfr \ 876121556Speter develop(bool, PrintMallocStatistics, false, \ 87737663Scharnier "Print malloc/free statistics") \ 878121767Speter \ 87931656Sguido develop(bool, ZapResourceArea, trueInDebug, \ 88031656Sguido "Zap freed resource/arena space with 0xABABABAB") \ 88174462Salfred \ 8821558Srgrimes notproduct(bool, ZapVMHandleArea, trueInDebug, \ 883194880Sdfr "Zap freed VM handle space with 0xBCBCBCBC") \ 8849336Sdfr \ 88531656Sguido develop(bool, ZapJNIHandleArea, trueInDebug, \ 88631656Sguido "Zap freed JNI handle space with 0xFEFEFEFE") \ 88774462Salfred \ 8881558Srgrimes notproduct(bool, ZapStackSegments, trueInDebug, \ 8891558Srgrimes "Zap allocated/freed stack segments with 0xFADFADED") \ 8901558Srgrimes \ 891121556Speter develop(bool, ZapUnusedHeapArea, trueInDebug, \ 89231656Sguido "Zap unused heap space with 0xBAADBABE") \ 89374462Salfred \ 8941558Srgrimes develop(bool, TraceZapUnusedHeapArea, false, \ 8951558Srgrimes "Trace zapping of unused heap space") \ 8961558Srgrimes \ 89751968Salfred develop(bool, CheckZapUnusedHeapArea, false, \ 89851968Salfred "Check zapping of unused heap space") \ 89951968Salfred \ 90074462Salfred develop(bool, ZapFillerObjects, trueInDebug, \ 90151968Salfred "Zap filler objects with 0xDEAFBABE") \ 902121556Speter \ 90337663Scharnier develop(bool, PrintVMMessages, true, \ 90474462Salfred "Print VM messages on console") \ 90575635Siedowse \ 90675635Siedowse product(bool, PrintGCApplicationConcurrentTime, false, \ 907121767Speter "Print the time the application has been running") \ 90831656Sguido \ 90931656Sguido product(bool, PrintGCApplicationStoppedTime, false, \ 91074462Salfred "Print the time the application has been stopped") \ 9111558Srgrimes \ 912194880Sdfr diagnostic(bool, VerboseVerification, false, \ 9139336Sdfr "Display detailed verification details") \ 91431656Sguido \ 91531656Sguido notproduct(uintx, ErrorHandlerTest, 0, \ 91674462Salfred "If > 0, provokes an error after VM initialization; the value " \ 9171558Srgrimes "determines which error to provoke. See test_error_handler() " \ 9181558Srgrimes "in debug.cpp.") \ 9191558Srgrimes \ 920121556Speter notproduct(uintx, TestCrashInErrorHandler, 0, \ 92137663Scharnier "If > 0, provokes an error inside VM error handler (a secondary " \ 92274462Salfred "crash). see test_error_handler() in debug.cpp.") \ 92375635Siedowse \ 92475635Siedowse notproduct(bool, TestSafeFetchInErrorHandler, false, \ 925121767Speter "If true, tests SafeFetch inside error handler.") \ 92631656Sguido \ 92731656Sguido develop(bool, Verbose, false, \ 92874462Salfred "Print additional debugging information from other modes") \ 9291558Srgrimes \ 930194880Sdfr develop(bool, PrintMiscellaneous, false, \ 931121556Speter "Print uncategorized debugging information (requires +Verbose)") \ 932121556Speter \ 933121556Speter develop(bool, WizardMode, false, \ 934100117Salfred "Print much more debugging information") \ 935121767Speter \ 93631656Sguido product(bool, ShowMessageBoxOnError, false, \ 93731656Sguido "Keep process alive on VM fatal error") \ 93874462Salfred \ 9391558Srgrimes product(bool, CreateMinidumpOnCrash, false, \ 9401558Srgrimes "Create minidump on VM fatal error") \ 9411558Srgrimes \ 9421558Srgrimes product_pd(bool, UseOSErrorReporting, \ 9431558Srgrimes "Let VM fatal error propagate to the OS (ie. WER on Windows)") \ 9441558Srgrimes \ 9451558Srgrimes product(bool, SuppressFatalErrorMessage, false, \ 9461558Srgrimes "Report NO fatal error message (avoid deadlock)") \ 9471558Srgrimes \ 9481558Srgrimes product(ccstrlist, OnError, "", \ 9491558Srgrimes "Run user-defined commands on fatal error; see VMError.cpp " \ 950216587Scharnier "for examples") \ 9511558Srgrimes \ 952194880Sdfr product(ccstrlist, OnOutOfMemoryError, "", \ 9531558Srgrimes "Run user-defined commands on first java.lang.OutOfMemoryError") \ 9541558Srgrimes \ 9551558Srgrimes manageable(bool, HeapDumpBeforeFullGC, false, \ 9569336Sdfr "Dump heap to file before any major stop-the-world GC") \ 9571558Srgrimes \ 9581558Srgrimes manageable(bool, HeapDumpAfterFullGC, false, \ 959216587Scharnier "Dump heap to file after any major stop-the-world GC") \ 9601558Srgrimes \ 96192806Sobrien manageable(bool, HeapDumpOnOutOfMemoryError, false, \ 9629336Sdfr "Dump heap to file when java.lang.OutOfMemoryError is thrown") \ 963184588Sdfr \ 9641558Srgrimes manageable(ccstr, HeapDumpPath, NULL, \ 9651558Srgrimes "When HeapDumpOnOutOfMemoryError is on, the path (filename or " \ 9661558Srgrimes "directory) of the dump file (defaults to java_pid<pid>.hprof " \ 9679336Sdfr "in the working directory)") \ 9689336Sdfr \ 9699336Sdfr develop(size_t, SegmentedHeapDumpThreshold, 2*G, \ 9709336Sdfr "Generate a segmented heap dump (JAVA PROFILE 1.0.2 format) " \ 9719336Sdfr "when the heap usage is larger than this") \ 9729336Sdfr \ 9739336Sdfr develop(size_t, HeapDumpSegmentSize, 1*G, \ 9749336Sdfr "Approximate segment size when generating a segmented heap dump") \ 9759336Sdfr \ 976184588Sdfr develop(bool, BreakAtWarning, false, \ 977184588Sdfr "Execute breakpoint upon encountering VM warning") \ 978184588Sdfr \ 979184588Sdfr develop(bool, TraceVMOperation, false, \ 980184588Sdfr "Trace VM operations") \ 981184588Sdfr \ 982184588Sdfr develop(bool, UseFakeTimers, false, \ 983184588Sdfr "Tell whether the VM should use system time or a fake timer") \ 984184588Sdfr \ 985184588Sdfr product(ccstr, NativeMemoryTracking, "off", \ 986184588Sdfr "Native memory tracking options") \ 987184588Sdfr \ 988184588Sdfr diagnostic(bool, PrintNMTStatistics, false, \ 989184588Sdfr "Print native memory tracking summary data if it is on") \ 9909336Sdfr \ 9919336Sdfr diagnostic(bool, LogCompilation, false, \ 9921558Srgrimes "Log compilation activity in detail to LogFile") \ 9931558Srgrimes \ 9941558Srgrimes product(bool, PrintCompilation, false, \ 995216587Scharnier "Print compilations") \ 9961558Srgrimes \ 9971558Srgrimes diagnostic(bool, TraceNMethodInstalls, false, \ 9981558Srgrimes "Trace nmethod installation") \ 9991558Srgrimes \ 10001558Srgrimes diagnostic(intx, ScavengeRootsInCode, 2, \ 10011558Srgrimes "0: do not allow scavengable oops in the code cache; " \ 10021558Srgrimes "1: allow scavenging from the code cache; " \ 10031558Srgrimes "2: emit as many constants as the compiler can see") \ 10041558Srgrimes \ 10051558Srgrimes product(bool, AlwaysRestoreFPU, false, \ 10061558Srgrimes "Restore the FPU control word after every JNI call (expensive)") \ 1007194880Sdfr \ 10081558Srgrimes diagnostic(bool, PrintCompilation2, false, \ 10091558Srgrimes "Print additional statistics per compilation") \ 1010194880Sdfr \ 10111558Srgrimes diagnostic(bool, PrintAdapterHandlers, false, \ 10121558Srgrimes "Print code generated for i2c/c2i adapters") \ 10131558Srgrimes \ 10141558Srgrimes diagnostic(bool, VerifyAdapterCalls, trueInDebug, \ 10151558Srgrimes "Verify that i2c/c2i adapters are called properly") \ 10161558Srgrimes \ 10171558Srgrimes develop(bool, VerifyAdapterSharing, false, \ 10181558Srgrimes "Verify that the code for shared adapters is the equivalent") \ 10191558Srgrimes \ 10201558Srgrimes diagnostic(bool, PrintAssembly, false, \ 10211558Srgrimes "Print assembly code (using external disassembler.so)") \ 10221558Srgrimes \ 1023216587Scharnier diagnostic(ccstr, PrintAssemblyOptions, NULL, \ 10241558Srgrimes "Print options string passed to disassembler.so") \ 10251558Srgrimes \ 10261558Srgrimes diagnostic(bool, PrintNMethods, false, \ 10279336Sdfr "Print assembly code for nmethods when generated") \ 10289336Sdfr \ 10291558Srgrimes diagnostic(bool, PrintNativeNMethods, false, \ 10309336Sdfr "Print assembly code for native nmethods when generated") \ 10319336Sdfr \ 10329336Sdfr develop(bool, PrintDebugInfo, false, \ 10331558Srgrimes "Print debug information for all nmethods when generated") \ 10341558Srgrimes \ 10351558Srgrimes develop(bool, PrintRelocations, false, \ 1036100117Salfred "Print relocation information for all nmethods when generated") \ 1037100117Salfred \ 10381558Srgrimes develop(bool, PrintDependencies, false, \ 10391558Srgrimes "Print dependency information for all nmethods when generated") \ 10401558Srgrimes \ 1041100117Salfred develop(bool, PrintExceptionHandlers, false, \ 10421558Srgrimes "Print exception handler tables for all nmethods when generated") \ 10431558Srgrimes \ 10441558Srgrimes develop(bool, StressCompiledExceptionHandlers, false, \ 10459336Sdfr "Exercise compiled exception handlers") \ 10461558Srgrimes \ 10471558Srgrimes develop(bool, InterceptOSException, false, \ 10481558Srgrimes "Start debugger when an implicit OS (e.g. NULL) " \ 10491558Srgrimes "exception happens") \ 10509336Sdfr \ 10511558Srgrimes product(bool, PrintCodeCache, false, \ 10521558Srgrimes "Print the code cache memory usage when exiting") \ 10531558Srgrimes \ 10541558Srgrimes develop(bool, PrintCodeCache2, false, \ 10551558Srgrimes "Print detailed usage information on the code cache when exiting")\ 10561558Srgrimes \ 10571558Srgrimes product(bool, PrintCodeCacheOnCompilation, false, \ 10581558Srgrimes "Print the code cache memory usage each time a method is " \ 1059216587Scharnier "compiled") \ 1060216587Scharnier \ 10611558Srgrimes diagnostic(bool, PrintStubCode, false, \ 10621558Srgrimes "Print generated stub code") \ 10631558Srgrimes \ 10641558Srgrimes product(bool, StackTraceInThrowable, true, \ 10651558Srgrimes "Collect backtrace in throwable when exception happens") \ 10661558Srgrimes \ 10671558Srgrimes product(bool, OmitStackTraceInFastThrow, true, \ 10681558Srgrimes "Omit backtraces for some 'hot' exceptions in optimized code") \ 10691558Srgrimes \ 1070100117Salfred product(bool, ProfilerPrintByteCodeStatistics, false, \ 10711558Srgrimes "Print bytecode statistics when dumping profiler output") \ 10721558Srgrimes \ 10731558Srgrimes product(bool, ProfilerRecordPC, false, \ 10741558Srgrimes "Collect ticks for each 16 byte interval of compiled code") \ 1075194880Sdfr \ 10761558Srgrimes product(bool, ProfileVM, false, \ 10771558Srgrimes "Profile ticks that fall within VM (either in the VM Thread " \ 10781558Srgrimes "or VM code called through stubs)") \ 10791558Srgrimes \ 10801558Srgrimes product(bool, ProfileIntervals, false, \ 1081100117Salfred "Print profiles for each interval (see ProfileIntervalsTicks)") \ 1082100117Salfred \ 1083100117Salfred notproduct(bool, ProfilerCheckIntervals, false, \ 1084100117Salfred "Collect and print information on spacing of profiler ticks") \ 1085194880Sdfr \ 1086100117Salfred product(bool, PrintWarnings, true, \ 1087100117Salfred "Print JVM warnings to output stream") \ 10881558Srgrimes \ 10891558Srgrimes notproduct(uintx, WarnOnStalledSpinLock, 0, \ 10901558Srgrimes "Print warnings for stalled SpinLocks") \ 10911558Srgrimes \ 10921558Srgrimes product(bool, RegisterFinalizersAtInit, true, \ 10931558Srgrimes "Register finalizable objects at end of Object.<init> or " \ 10941558Srgrimes "after allocation") \ 109574462Salfred \ 10968871Srgrimes develop(bool, RegisterReferences, true, \ 1097194880Sdfr "Tell whether the VM should register soft/weak/final/phantom " \ 10981558Srgrimes "references") \ 10991558Srgrimes \ 11001558Srgrimes develop(bool, IgnoreRewrites, false, \ 11011558Srgrimes "Suppress rewrites of bytecodes in the oopmap generator. " \ 11021558Srgrimes "This is unsafe!") \ 11038871Srgrimes \ 1104194880Sdfr develop(bool, PrintCodeCacheExtension, false, \ 11051558Srgrimes "Print extension of code cache") \ 11061558Srgrimes \ 11071558Srgrimes develop(bool, UsePrivilegedStack, true, \ 11081558Srgrimes "Enable the security JVM functions") \ 11091558Srgrimes \ 11101558Srgrimes develop(bool, ProtectionDomainVerification, true, \ 11111558Srgrimes "Verify protection domain before resolution in system dictionary")\ 11121558Srgrimes \ 11131558Srgrimes product(bool, ClassUnloading, true, \ 11141558Srgrimes "Do unloading of classes") \ 11151558Srgrimes \ 1116100117Salfred product(bool, ClassUnloadingWithConcurrentMark, true, \ 11171558Srgrimes "Do unloading of classes with a concurrent marking cycle") \ 11181558Srgrimes \ 11191558Srgrimes develop(bool, DisableStartThread, false, \ 11201558Srgrimes "Disable starting of additional Java threads " \ 11211558Srgrimes "(for debugging only)") \ 1122100117Salfred \ 1123216587Scharnier develop(bool, MemProfiling, false, \ 1124100117Salfred "Write memory usage profiling to log file") \ 1125100117Salfred \ 1126100117Salfred notproduct(bool, PrintSystemDictionaryAtExit, false, \ 1127100117Salfred "Print the system dictionary at exit") \ 1128100117Salfred \ 1129100117Salfred experimental(intx, PredictedLoadedClassCount, 0, \ 1130216587Scharnier "Experimental: Tune loaded class cache starting size") \ 1131100117Salfred \ 1132100117Salfred diagnostic(bool, UnsyncloadClass, false, \ 1133100117Salfred "Unstable: VM calls loadClass unsynchronized. Custom " \ 1134100117Salfred "class loader must call VM synchronized for findClass " \ 1135100117Salfred "and defineClass.") \ 113696622Siedowse \ 113796622Siedowse product(bool, AlwaysLockClassLoader, false, \ 11381558Srgrimes "Require the VM to acquire the class loader lock before calling " \ 11391558Srgrimes "loadClass() even for class loaders registering " \ 11401558Srgrimes "as parallel capable") \ 1141166440Spjd \ 11421558Srgrimes product(bool, AllowParallelDefineClass, false, \ 1143166440Spjd "Allow parallel defineClass requests for class loaders " \ 1144216587Scharnier "registering as parallel capable") \ 11451558Srgrimes \ 11461558Srgrimes product(bool, MustCallLoadClassInternal, false, \ 11471558Srgrimes "Call loadClassInternal() rather than loadClass()") \ 11481558Srgrimes \ 11491558Srgrimes product_pd(bool, DontYieldALot, \ 1150166440Spjd "Throw away obvious excess yield calls") \ 115172650Sgreen \ 11521558Srgrimes product_pd(bool, ConvertSleepToYield, \ 1153166440Spjd "Convert sleep(0) to thread yield " \ 11541558Srgrimes "(may be off for Solaris to improve GUI)") \ 1155192934Srmacklem \ 11561558Srgrimes product(bool, ConvertYieldToSleep, false, \ 11571558Srgrimes "Convert yield to a sleep of MinSleepInterval to simulate Win32 " \ 11581558Srgrimes "behavior") \ 115937663Scharnier \ 11601558Srgrimes product(bool, UseBoundThreads, true, \ 11611558Srgrimes "Bind user level threads to kernel threads (for Solaris only)") \ 11621558Srgrimes \ 11631558Srgrimes develop(bool, UseDetachedThreads, true, \ 11641558Srgrimes "Use detached threads that are recycled upon termination " \ 11651558Srgrimes "(for Solaris only)") \ 11661558Srgrimes \ 11671558Srgrimes product(bool, UseLWPSynchronization, true, \ 11681558Srgrimes "Use LWP-based instead of libthread-based synchronization " \ 11691558Srgrimes "(SPARC only)") \ 11701558Srgrimes \ 11711558Srgrimes experimental(ccstr, SyncKnobs, NULL, \ 11721558Srgrimes "(Unstable) Various monitor synchronization tunables") \ 11731558Srgrimes \ 1174192934Srmacklem experimental(intx, EmitSync, 0, \ 11751558Srgrimes "(Unsafe, Unstable) " \ 11761558Srgrimes "Control emission of inline sync fast-path code") \ 1177192934Srmacklem \ 1178192934Srmacklem product(intx, MonitorBound, 0, "Bound Monitor population") \ 1179192934Srmacklem \ 1180192934Srmacklem product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \ 1181192934Srmacklem \ 1182192934Srmacklem experimental(intx, SyncFlags, 0, "(Unsafe, Unstable) " \ 1183192934Srmacklem "Experimental Sync flags") \ 1184192934Srmacklem \ 1185192934Srmacklem experimental(intx, SyncVerbose, 0, "(Unstable)") \ 1186192934Srmacklem \ 1187192934Srmacklem experimental(intx, ClearFPUAtPark, 0, "(Unsafe, Unstable)") \ 1188192934Srmacklem \ 1189192934Srmacklem experimental(intx, hashCode, 5, \ 1190192934Srmacklem "(Unstable) select hashCode generation algorithm") \ 1191192934Srmacklem \ 1192192934Srmacklem experimental(intx, WorkAroundNPTLTimedWaitHang, 1, \ 1193192934Srmacklem "(Unstable, Linux-specific) " \ 11941558Srgrimes "avoid NPTL-FUTEX hang pthread_cond_timedwait") \ 11951558Srgrimes \ 11961558Srgrimes product(bool, FilterSpuriousWakeups, true, \ 11971558Srgrimes "When true prevents OS-level spurious, or premature, wakeups " \ 11981558Srgrimes "from Object.wait (Ignored for Windows)") \ 1199194880Sdfr \ 12001558Srgrimes experimental(intx, NativeMonitorTimeout, -1, "(Unstable)") \ 12011558Srgrimes \ 12021558Srgrimes experimental(intx, NativeMonitorFlags, 0, "(Unstable)") \ 12031558Srgrimes \ 12041558Srgrimes experimental(intx, NativeMonitorSpinLimit, 20, "(Unstable)") \ 12051558Srgrimes \ 12061558Srgrimes develop(bool, UsePthreads, false, \ 12071558Srgrimes "Use pthread-based instead of libthread-based synchronization " \ 12081558Srgrimes "(SPARC only)") \ 120937663Scharnier \ 12101558Srgrimes product(bool, ReduceSignalUsage, false, \ 12111558Srgrimes "Reduce the use of OS signals in Java and/or the VM") \ 12121558Srgrimes \ 12131558Srgrimes develop_pd(bool, ShareVtableStubs, \ 12141558Srgrimes "Share vtable stubs (smaller code but worse branch prediction") \ 12151558Srgrimes \ 12161558Srgrimes develop(bool, LoadLineNumberTables, true, \ 12171558Srgrimes "Tell whether the class file parser loads line number tables") \ 12181558Srgrimes \ 1219192934Srmacklem develop(bool, LoadLocalVariableTables, true, \ 1220192934Srmacklem "Tell whether the class file parser loads local variable tables") \ 1221192934Srmacklem \ 1222192934Srmacklem develop(bool, LoadLocalVariableTypeTables, true, \ 1223192934Srmacklem "Tell whether the class file parser loads local variable type" \ 1224192934Srmacklem "tables") \ 1225192934Srmacklem \ 12261558Srgrimes product(bool, AllowUserSignalHandlers, false, \ 12271558Srgrimes "Do not complain if the application installs signal handlers " \ 12281558Srgrimes "(Solaris & Linux only)") \ 122937663Scharnier \ 12301558Srgrimes product(bool, UseSignalChaining, true, \ 12311558Srgrimes "Use signal-chaining to invoke signal handlers installed " \ 12321558Srgrimes "by the application (Solaris & Linux only)") \ 1233192934Srmacklem \ 1234192934Srmacklem product(bool, UseAltSigs, false, \ 1235192934Srmacklem "Use alternate signals instead of SIGUSR1 & SIGUSR2 for VM " \ 12361558Srgrimes "internal signals (Solaris only)") \ 12371558Srgrimes \ 12381558Srgrimes product(bool, AllowJNIEnvProxy, false, \ 1239192934Srmacklem "Allow JNIEnv proxies for jdbx") \ 1240192934Srmacklem \ 1241192934Srmacklem product(bool, JNIDetachReleasesMonitors, true, \ 1242192934Srmacklem "JNI DetachCurrentThread releases monitors owned by thread") \ 1243192934Srmacklem \ 1244192934Srmacklem product(bool, RestoreMXCSROnJNICalls, false, \ 1245192934Srmacklem "Restore MXCSR when returning from JNI calls") \ 1246192934Srmacklem \ 1247192934Srmacklem product(bool, CheckJNICalls, false, \ 1248192934Srmacklem "Verify all arguments to JNI calls") \ 1249192934Srmacklem \ 1250192934Srmacklem product(bool, CheckEndorsedAndExtDirs, false, \ 1251192934Srmacklem "Verify the endorsed and extension directories are not used") \ 1252192934Srmacklem \ 12531558Srgrimes product(bool, UseFastJNIAccessors, true, \ 1254192934Srmacklem "Use optimized versions of Get<Primitive>Field") \ 1255192934Srmacklem \ 1256192934Srmacklem product(intx, MaxJNILocalCapacity, 65536, \ 1257192934Srmacklem "Maximum allowable local JNI handle capacity to " \ 1258192934Srmacklem "EnsureLocalCapacity() and PushLocalFrame(), " \ 1259192934Srmacklem "where <= 0 is unlimited, default: 65536") \ 1260192934Srmacklem \ 1261192934Srmacklem product(bool, EagerXrunInit, false, \ 1262192934Srmacklem "Eagerly initialize -Xrun libraries; allows startup profiling, " \ 1263192934Srmacklem "but not all -Xrun libraries may support the state of the VM " \ 1264192934Srmacklem "at this time") \ 1265192934Srmacklem \ 1266192934Srmacklem product(bool, PreserveAllAnnotations, false, \ 1267192934Srmacklem "Preserve RuntimeInvisibleAnnotations as well " \ 1268192934Srmacklem "as RuntimeVisibleAnnotations") \ 1269192934Srmacklem \ 1270192934Srmacklem develop(uintx, PreallocatedOutOfMemoryErrorCount, 4, \ 1271192934Srmacklem "Number of OutOfMemoryErrors preallocated with backtrace") \ 1272192934Srmacklem \ 1273192934Srmacklem product(bool, LazyBootClassLoader, true, \ 1274192934Srmacklem "Enable/disable lazy opening of boot class path entries") \ 1275192934Srmacklem \ 1276192934Srmacklem product(bool, UseXMMForArrayCopy, false, \ 1277192934Srmacklem "Use SSE2 MOVQ instruction for Arraycopy") \ 1278192934Srmacklem \ 1279192934Srmacklem product(intx, FieldsAllocationStyle, 1, \ 1280192934Srmacklem "0 - type based with oops first, 1 - with oops last, " \ 1281192934Srmacklem "2 - oops in super and sub classes are together") \ 1282192934Srmacklem \ 1283192934Srmacklem product(bool, CompactFields, true, \ 1284192934Srmacklem "Allocate nonstatic fields in gaps between previous fields") \ 1285192934Srmacklem \ 1286192934Srmacklem notproduct(bool, PrintFieldLayout, false, \ 1287192934Srmacklem "Print field layout for each class") \ 1288192934Srmacklem \ 12891558Srgrimes product(intx, ContendedPaddingWidth, 128, \ 1290192934Srmacklem "How many bytes to pad the fields/classes marked @Contended with")\ 12911558Srgrimes \ 1292192934Srmacklem product(bool, EnableContended, true, \ 1293192934Srmacklem "Enable @Contended annotation support") \ 12941558Srgrimes \ 12951558Srgrimes product(bool, RestrictContended, true, \ 12961558Srgrimes "Restrict @Contended to trusted classes") \ 12971558Srgrimes \ 12981558Srgrimes product(bool, UseBiasedLocking, true, \ 12991558Srgrimes "Enable biased locking in JVM") \ 13001558Srgrimes \ 13011558Srgrimes product(intx, BiasedLockingStartupDelay, 4000, \ 13021558Srgrimes "Number of milliseconds to wait before enabling biased locking") \ 13031558Srgrimes \ 13041558Srgrimes diagnostic(bool, PrintBiasedLockingStatistics, false, \ 13051558Srgrimes "Print statistics of biased locking in JVM") \ 13061558Srgrimes \ 13071558Srgrimes product(intx, BiasedLockingBulkRebiasThreshold, 20, \ 13081558Srgrimes "Threshold of number of revocations per type to try to " \ 13091558Srgrimes "rebias all objects in the heap of that type") \ 13101558Srgrimes \ 13111558Srgrimes product(intx, BiasedLockingBulkRevokeThreshold, 40, \ 13121558Srgrimes "Threshold of number of revocations per type to permanently " \ 13131558Srgrimes "revoke biases of all objects in the heap of that type") \ 13141558Srgrimes \ 13151558Srgrimes product(intx, BiasedLockingDecayTime, 25000, \ 13161558Srgrimes "Decay time (in milliseconds) to re-enable bulk rebiasing of a " \ 13171558Srgrimes "type after previous bulk rebias") \ 13181558Srgrimes \ 13191558Srgrimes /* tracing */ \ 132037003Sjoerg \ 132137663Scharnier notproduct(bool, TraceRuntimeCalls, false, \ 132237663Scharnier "Trace run-time calls") \ 132337004Sjoerg \ 132437003Sjoerg develop(bool, TraceJNICalls, false, \ 132537663Scharnier "Trace JNI calls") \ 132637663Scharnier \ 132729317Sjlemon develop(bool, StressRewriter, false, \ 13281558Srgrimes "Stress linktime bytecode rewriting") \ 13297401Swpaul \ 133037663Scharnier notproduct(bool, TraceJVMCalls, false, \ 133129317Sjlemon "Trace JVM calls") \ 13321558Srgrimes \ 13331558Srgrimes product(ccstr, TraceJVMTI, NULL, \ 13341558Srgrimes "Trace flags for JVMTI functions and events") \ 13351558Srgrimes \ 13361558Srgrimes /* This option can change an EMCP method into an obsolete method. */ \ 13371558Srgrimes /* This can affect tests that except specific methods to be EMCP. */ \ 13381558Srgrimes /* This option should be used with caution. */ \ 13391558Srgrimes product(bool, StressLdcRewrite, false, \ 13401558Srgrimes "Force ldc -> ldc_w rewrite during RedefineClasses") \ 13411558Srgrimes \ 13421558Srgrimes product(intx, TraceRedefineClasses, 0, \ 13431558Srgrimes "Trace level for JVMTI RedefineClasses") \ 13441558Srgrimes \ 13451558Srgrimes /* change to false by default sometime after Mustang */ \ 13461558Srgrimes product(bool, VerifyMergedCPBytecodes, true, \ 134775641Siedowse "Verify bytecodes after RedefineClasses constant pool merging") \ 13481558Srgrimes \ 134937663Scharnier develop(bool, TraceJNIHandleAllocation, false, \ 13501558Srgrimes "Trace allocation/deallocation of JNI handle blocks") \ 13511558Srgrimes \ 13521558Srgrimes develop(bool, TraceBytecodes, false, \ 13531558Srgrimes "Trace bytecode execution") \ 13541558Srgrimes \ 13551558Srgrimes develop(bool, TraceClassInitialization, false, \ 135675801Siedowse "Trace class initialization") \ 13571558Srgrimes \ 13581558Srgrimes product(bool, TraceExceptions, false, \ 135929317Sjlemon "Trace exceptions") \ 136074462Salfred \ 136174462Salfred develop(bool, TraceICs, false, \ 136229317Sjlemon "Trace inline cache changes") \ 136329317Sjlemon \ 136429317Sjlemon notproduct(bool, TraceInvocationCounterOverflow, false, \ 136529317Sjlemon "Trace method invocation counter overflow") \ 136674462Salfred \ 136729317Sjlemon develop(bool, TraceInlineCacheClearing, false, \ 136829317Sjlemon "Trace clearing of inline caches in nmethods") \ 136929317Sjlemon \ 137029317Sjlemon develop(bool, TraceDependencies, false, \ 137129317Sjlemon "Trace dependencies") \ 13721558Srgrimes \ 13731558Srgrimes develop(bool, VerifyDependencies, trueInDebug, \ 1374192934Srmacklem "Exercise and verify the compilation dependency mechanism") \ 1375192934Srmacklem \ 1376192934Srmacklem develop(bool, TraceNewOopMapGeneration, false, \ 1377192934Srmacklem "Trace OopMapGeneration") \ 1378192934Srmacklem \ 1379192934Srmacklem develop(bool, TraceNewOopMapGenerationDetailed, false, \ 13801558Srgrimes "Trace OopMapGeneration: print detailed cell states") \ 13811558Srgrimes \ 13821558Srgrimes develop(bool, TimeOopMap, false, \ 13831558Srgrimes "Time calls to GenerateOopMap::compute_map() in sum") \ 13841558Srgrimes \ 13851558Srgrimes develop(bool, TimeOopMap2, false, \ 13861558Srgrimes "Time calls to GenerateOopMap::compute_map() individually") \ 138775635Siedowse \ 138875635Siedowse develop(bool, TraceMonitorMismatch, false, \ 138975635Siedowse "Trace monitor matching failures during OopMapGeneration") \ 139075635Siedowse \ 139175635Siedowse develop(bool, TraceOopMapRewrites, false, \ 13921558Srgrimes "Trace rewriting of method oops during oop map generation") \ 13931558Srgrimes \ 13941558Srgrimes develop(bool, TraceSafepoint, false, \ 1395192934Srmacklem "Trace safepoint operations") \ 1396192934Srmacklem \ 1397194773Srmacklem develop(bool, TraceICBuffer, false, \ 1398194773Srmacklem "Trace usage of IC buffer") \ 1399194773Srmacklem \ 1400194773Srmacklem develop(bool, TraceCompiledIC, false, \ 1401194773Srmacklem "Trace changes of compiled IC") \ 1402194773Srmacklem \ 1403194773Srmacklem notproduct(bool, TraceZapDeadLocals, false, \ 1404194773Srmacklem "Trace zapping dead locals") \ 1405194773Srmacklem \ 1406194773Srmacklem develop(bool, TraceStartupTime, false, \ 1407194773Srmacklem "Trace setup time") \ 1408194773Srmacklem \ 1409192934Srmacklem develop(bool, TraceProtectionDomainVerification, false, \ 1410194773Srmacklem "Trace protection domain verification") \ 1411192934Srmacklem \ 1412192934Srmacklem develop(bool, TraceClearedExceptions, false, \ 14131558Srgrimes "Print when an exception is forcibly cleared") \ 14141558Srgrimes \ 14151558Srgrimes product(bool, TraceClassResolution, false, \ 14169336Sdfr "Trace all constant pool resolutions (for debugging)") \ 14171558Srgrimes \ 14181558Srgrimes product(bool, TraceBiasedLocking, false, \ 14191558Srgrimes "Trace biased locking in JVM") \ 14201558Srgrimes \ 14219336Sdfr product(bool, TraceMonitorInflation, false, \ 14221558Srgrimes "Trace monitor inflation in JVM") \ 14231558Srgrimes \ 14241558Srgrimes /* gc */ \ 14251558Srgrimes \ 14261558Srgrimes product(bool, UseSerialGC, false, \ 14271558Srgrimes "Use the Serial garbage collector") \ 14281558Srgrimes \ 14291558Srgrimes product(bool, UseG1GC, false, \ 14301558Srgrimes "Use the Garbage-First garbage collector") \ 14311558Srgrimes \ 14321558Srgrimes product(bool, UseParallelGC, false, \ 14331558Srgrimes "Use the Parallel Scavenge garbage collector") \ 14341558Srgrimes \ 14351558Srgrimes product(bool, UseParallelOldGC, false, \ 14361558Srgrimes "Use the Parallel Old garbage collector") \ 14371558Srgrimes \ 14381558Srgrimes product(uintx, HeapMaximumCompactionInterval, 20, \ 14391558Srgrimes "How often should we maximally compact the heap (not allowing " \ 14401558Srgrimes "any dead space)") \ 14411558Srgrimes \ 1442192934Srmacklem product(uintx, HeapFirstMaximumCompactionCount, 3, \ 14431558Srgrimes "The collection count for the first maximum compaction") \ 14441558Srgrimes \ 14451558Srgrimes product(bool, UseMaximumCompactionOnSystemGC, true, \ 14461558Srgrimes "Use maximum compaction in the Parallel Old garbage collector " \ 14471558Srgrimes "for a system GC") \ 14481558Srgrimes \ 14491558Srgrimes product(uintx, ParallelOldDeadWoodLimiterMean, 50, \ 14501558Srgrimes "The mean used by the parallel compact dead wood " \ 1451166440Spjd "limiter (a number between 0-100)") \ 1452166440Spjd \ 1453166440Spjd product(uintx, ParallelOldDeadWoodLimiterStdDev, 80, \ 1454216587Scharnier "The standard deviation used by the parallel compact dead wood " \ 1455166440Spjd "limiter (a number between 0-100)") \ 1456166440Spjd \ 1457166440Spjd product(uintx, ParallelGCThreads, 0, \ 1458166440Spjd "Number of parallel threads parallel gc will use") \ 1459166440Spjd \ 1460166440Spjd product(bool, UseDynamicNumberOfGCThreads, false, \ 1461166440Spjd "Dynamically choose the number of parallel threads " \ 1462166440Spjd "parallel gc will use") \ 1463166440Spjd \ 1464166440Spjd diagnostic(bool, ForceDynamicNumberOfGCThreads, false, \ 1465166440Spjd "Force dynamic selection of the number of " \ 1466168684Spjd "parallel threads parallel gc will use to aid debugging") \ 1467192934Srmacklem \ 1468166440Spjd product(size_t, HeapSizePerGCThread, ScaleForWordSize(64*M), \ 1469192934Srmacklem "Size of heap (bytes) per GC thread used in calculating the " \ 1470166440Spjd "number of GC threads") \ 1471166440Spjd \ 1472166440Spjd product(bool, TraceDynamicGCThreads, false, \ 1473166440Spjd "Trace the dynamic GC thread usage") \ 1474166440Spjd \ 1475166440Spjd develop(bool, ParallelOldGCSplitALot, false, \ 1476166440Spjd "Provoke splitting (copying data from a young gen space to " \ 1477166440Spjd "multiple destination spaces)") \ 1478166440Spjd \ 1479166440Spjd develop(uintx, ParallelOldGCSplitInterval, 3, \ 1480166440Spjd "How often to provoke splitting a young gen space") \ 1481166440Spjd \ 1482166440Spjd product(uintx, ConcGCThreads, 0, \ 1483166440Spjd "Number of threads concurrent gc will use") \ 1484166440Spjd \ 1485166440Spjd product(size_t, YoungPLABSize, 4096, \ 1486166440Spjd "Size of young gen promotion LAB's (in HeapWords)") \ 1487166440Spjd \ 1488166440Spjd product(size_t, OldPLABSize, 1024, \ 1489166440Spjd "Size of old gen promotion LAB's (in HeapWords), or Number \ 1490166440Spjd of blocks to attempt to claim when refilling CMS LAB's") \ 1491166440Spjd \ 1492166440Spjd product(uintx, GCTaskTimeStampEntries, 200, \ 1493166440Spjd "Number of time stamp entries per gc worker thread") \ 1494166440Spjd \ 1495166440Spjd product(bool, AlwaysTenure, false, \ 1496166440Spjd "Always tenure objects in eden (ParallelGC only)") \ 1497166440Spjd \ 1498192934Srmacklem product(bool, NeverTenure, false, \ 1499192934Srmacklem "Never tenure objects in eden, may tenure on overflow " \ 1500192934Srmacklem "(ParallelGC only)") \ 1501192934Srmacklem \ 1502192934Srmacklem product(bool, ScavengeBeforeFullGC, true, \ 1503192934Srmacklem "Scavenge youngest generation before each full GC.") \ 1504192934Srmacklem \ 1505192934Srmacklem develop(bool, ScavengeWithObjectsInToSpace, false, \ 1506192934Srmacklem "Allow scavenges to occur when to-space contains objects") \ 1507192934Srmacklem \ 1508192934Srmacklem product(bool, UseConcMarkSweepGC, false, \ 1509192934Srmacklem "Use Concurrent Mark-Sweep GC in the old generation") \ 1510192934Srmacklem \ 1511192934Srmacklem product(bool, ExplicitGCInvokesConcurrent, false, \ 1512192934Srmacklem "A System.gc() request invokes a concurrent collection; " \ 1513166440Spjd "(effective only when using concurrent collectors)") \ 1514166440Spjd \ 1515166440Spjd product(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false, \ 1516166440Spjd "A System.gc() request invokes a concurrent collection and " \ 1517166440Spjd "also unloads classes during such a concurrent gc cycle " \ 1518166440Spjd "(effective only when UseConcMarkSweepGC)") \ 1519166440Spjd \ 1520166440Spjd product(bool, GCLockerInvokesConcurrent, false, \ 1521166440Spjd "The exit of a JNI critical section necessitating a scavenge, " \ 1522166440Spjd "also kicks off a background concurrent collection") \ 1523166440Spjd \ 1524166440Spjd product(uintx, GCLockerEdenExpansionPercent, 5, \ 1525166440Spjd "How much the GC can expand the eden by while the GC locker " \ 1526166440Spjd "is active (as a percentage)") \ 1527166440Spjd \ 1528166440Spjd diagnostic(uintx, GCLockerRetryAllocationCount, 2, \ 1529166440Spjd "Number of times to retry allocations when " \ 1530166440Spjd "blocked by the GC locker") \ 1531166440Spjd \ 1532166440Spjd develop(bool, UseCMSAdaptiveFreeLists, true, \ 1533166440Spjd "Use adaptive free lists in the CMS generation") \ 1534166440Spjd \ 1535166440Spjd develop(bool, UseAsyncConcMarkSweepGC, true, \ 1536166440Spjd "Use Asynchronous Concurrent Mark-Sweep GC in the old generation")\ 1537166440Spjd \ 1538166440Spjd product(bool, UseCMSBestFit, true, \ 1539166440Spjd "Use CMS best fit allocation strategy") \ 1540166440Spjd \ 1541166440Spjd product(bool, UseParNewGC, false, \ 1542166440Spjd "Use parallel threads in the new generation") \ 1543166440Spjd \ 1544166440Spjd product(bool, PrintTaskqueue, false, \ 1545166440Spjd "Print taskqueue statistics for parallel collectors") \ 1546166440Spjd \ 1547166440Spjd product(bool, PrintTerminationStats, false, \ 1548166440Spjd "Print termination statistics for parallel collectors") \ 1549166440Spjd \ 1550166440Spjd product(uintx, ParallelGCBufferWastePct, 10, \ 1551166440Spjd "Wasted fraction of parallel allocation buffer") \ 1552166440Spjd \ 1553166440Spjd product(uintx, TargetPLABWastePct, 10, \ 1554166440Spjd "Target wasted space in last buffer as percent of overall " \ 1555166440Spjd "allocation") \ 1556166440Spjd \ 1557166440Spjd product(uintx, PLABWeight, 75, \ 1558166440Spjd "Percentage (0-100) used to weight the current sample when " \ 1559166440Spjd "computing exponentially decaying average for ResizePLAB") \ 1560166440Spjd \ 1561166440Spjd product(bool, ResizePLAB, true, \ 1562166440Spjd "Dynamically resize (survivor space) promotion LAB's") \ 1563166440Spjd \ 1564166440Spjd product(bool, PrintPLAB, false, \ 1565166440Spjd "Print (survivor space) promotion LAB's sizing decisions") \ 1566166440Spjd \ 1567166440Spjd product(intx, ParGCArrayScanChunk, 50, \ 1568166440Spjd "Scan a subset of object array and push remainder, if array is " \ 1569166440Spjd "bigger than this") \ 1570166440Spjd \ 1571166440Spjd product(bool, ParGCUseLocalOverflow, false, \ 1572166440Spjd "Instead of a global overflow list, use local overflow stacks") \ 1573166440Spjd \ 1574166440Spjd product(bool, ParGCTrimOverflow, true, \ 1575166440Spjd "Eagerly trim the local overflow lists " \ 1576166440Spjd "(when ParGCUseLocalOverflow)") \ 1577168684Spjd \ 1578166440Spjd notproduct(bool, ParGCWorkQueueOverflowALot, false, \ 1579166440Spjd "Simulate work queue overflow in ParNew") \ 1580166440Spjd \ 1581166440Spjd notproduct(uintx, ParGCWorkQueueOverflowInterval, 1000, \ 1582168684Spjd "An `interval' counter that determines how frequently " \ 1583168684Spjd "we simulate overflow; a smaller number increases frequency") \ 1584166440Spjd \ 1585166440Spjd product(uintx, ParGCDesiredObjsFromOverflowList, 20, \ 1586166440Spjd "The desired number of objects to claim from the overflow list") \ 1587168684Spjd \ 1588166440Spjd diagnostic(uintx, ParGCStridesPerThread, 2, \ 1589168684Spjd "The number of strides per worker thread that we divide up the " \ 1590168684Spjd "card table scanning work into") \ 1591168684Spjd \ 1592168684Spjd diagnostic(intx, ParGCCardsPerStrideChunk, 256, \ 1593192934Srmacklem "The number of cards in each chunk of the parallel chunks used " \ 1594192934Srmacklem "during card table scanning") \ 1595192934Srmacklem \ 1596192934Srmacklem product(uintx, OldPLABWeight, 50, \ 1597192934Srmacklem "Percentage (0-100) used to weight the current sample when " \ 1598192934Srmacklem "computing exponentially decaying average for resizing " \ 1599166440Spjd "OldPLABSize") \ 1600166440Spjd \ 1601166440Spjd product(bool, ResizeOldPLAB, true, \ 16021558Srgrimes "Dynamically resize (old gen) promotion LAB's") \ 16031558Srgrimes \ 16041558Srgrimes product(bool, PrintOldPLAB, false, \ 1605216587Scharnier "Print (old gen) promotion LAB's sizing decisions") \ 16061558Srgrimes \ 16071558Srgrimes product(size_t, CMSOldPLABMin, 16, \ 16081558Srgrimes "Minimum size of CMS gen promotion LAB caches per worker " \ 16091558Srgrimes "per block size") \ 16101558Srgrimes \ 16111558Srgrimes product(size_t, CMSOldPLABMax, 1024, \ 161223681Speter "Maximum size of CMS gen promotion LAB caches per worker " \ 16131558Srgrimes "per block size") \ 16141558Srgrimes \ 16151558Srgrimes product(uintx, CMSOldPLABNumRefills, 4, \ 16161558Srgrimes "Nominal number of refills of CMS gen promotion LAB cache " \ 16171558Srgrimes "per worker per block size") \ 16181558Srgrimes \ 16191558Srgrimes product(bool, CMSOldPLABResizeQuicker, false, \ 1620216587Scharnier "React on-the-fly during a scavenge to a sudden " \ 16211558Srgrimes "change in block demand rate") \ 16221558Srgrimes \ 16231558Srgrimes product(uintx, CMSOldPLABToleranceFactor, 4, \ 16241558Srgrimes "The tolerance of the phase-change detector for on-the-fly " \ 16251558Srgrimes "PLAB resizing during a scavenge") \ 16261558Srgrimes \ 162723681Speter product(uintx, CMSOldPLABReactivityFactor, 2, \ 16281558Srgrimes "The gain in the feedback loop for on-the-fly PLAB resizing " \ 16291558Srgrimes "during a scavenge") \ 16301558Srgrimes \ 16311558Srgrimes product(bool, AlwaysPreTouch, false, \ 16321558Srgrimes "Force all freshly committed pages to be pre-touched") \ 16331558Srgrimes \ 16341558Srgrimes product_pd(size_t, CMSYoungGenPerWorker, \ 1635216587Scharnier "The maximum size of young gen chosen by default per GC worker " \ 16361558Srgrimes "thread available") \ 16371558Srgrimes \ 16381558Srgrimes product(uintx, CMSIncrementalSafetyFactor, 10, \ 1639100336Sjoerg "Percentage (0-100) used to add conservatism when computing the " \ 1640100336Sjoerg "duty cycle") \ 16411558Srgrimes \ 16421558Srgrimes product(uintx, CMSExpAvgFactor, 50, \ 16431558Srgrimes "Percentage (0-100) used to weight the current sample when " \ 16441558Srgrimes "computing exponential averages for CMS statistics") \ 16451558Srgrimes \ 16461558Srgrimes product(uintx, CMS_FLSWeight, 75, \ 16471558Srgrimes "Percentage (0-100) used to weight the current sample when " \ 16481558Srgrimes "computing exponentially decaying averages for CMS FLS " \ 16491558Srgrimes "statistics") \ 16501558Srgrimes \ 16511558Srgrimes product(uintx, CMS_FLSPadding, 1, \ 16521558Srgrimes "The multiple of deviation from mean to use for buffering " \ 16531558Srgrimes "against volatility in free list demand") \ 1654216587Scharnier \ 16551558Srgrimes product(uintx, FLSCoalescePolicy, 2, \ 16561558Srgrimes "CMS: aggressiveness level for coalescing, increasing " \ 16571558Srgrimes "from 0 to 4") \ 16581558Srgrimes \ 16591558Srgrimes product(bool, FLSAlwaysCoalesceLarge, false, \ 16601558Srgrimes "CMS: larger free blocks are always available for coalescing") \ 16611558Srgrimes \ 16621558Srgrimes product(double, FLSLargestBlockCoalesceProximity, 0.99, \ 16631558Srgrimes "CMS: the smaller the percentage the greater the coalescing " \ 16641558Srgrimes "force") \ 16651558Srgrimes \ 16661558Srgrimes product(double, CMSSmallCoalSurplusPercent, 1.05, \ 16671558Srgrimes "CMS: the factor by which to inflate estimated demand of small " \ 16681558Srgrimes "block sizes to prevent coalescing with an adjoining block") \ 16691558Srgrimes \ 16701558Srgrimes product(double, CMSLargeCoalSurplusPercent, 0.95, \ 16711558Srgrimes "CMS: the factor by which to inflate estimated demand of large " \ 1672216587Scharnier "block sizes to prevent coalescing with an adjoining block") \ 16731558Srgrimes \ 16741558Srgrimes product(double, CMSSmallSplitSurplusPercent, 1.10, \ 16751558Srgrimes "CMS: the factor by which to inflate estimated demand of small " \ 16761558Srgrimes "block sizes to prevent splitting to supply demand for smaller " \ 167737663Scharnier "blocks") \ 167837663Scharnier \ 16791558Srgrimes product(double, CMSLargeSplitSurplusPercent, 1.00, \ 16801558Srgrimes "CMS: the factor by which to inflate estimated demand of large " \ 16811558Srgrimes "block sizes to prevent splitting to supply demand for smaller " \ 16821558Srgrimes "blocks") \ 16831558Srgrimes \ 16841558Srgrimes product(bool, CMSExtrapolateSweep, false, \ 16851558Srgrimes "CMS: cushion for block demand during sweep") \ 16861558Srgrimes \ 16871558Srgrimes product(uintx, CMS_SweepWeight, 75, \ 16881558Srgrimes "Percentage (0-100) used to weight the current sample when " \ 16891558Srgrimes "computing exponentially decaying average for inter-sweep " \ 16901558Srgrimes "duration") \ 16911558Srgrimes \ 16921558Srgrimes product(uintx, CMS_SweepPadding, 1, \ 1693216587Scharnier "The multiple of deviation from mean to use for buffering " \ 1694216587Scharnier "against volatility in inter-sweep duration") \ 16951558Srgrimes \ 16961558Srgrimes product(uintx, CMS_SweepTimerThresholdMillis, 10, \ 16971558Srgrimes "Skip block flux-rate sampling for an epoch unless inter-sweep " \ 16981558Srgrimes "duration exceeds this threshold in milliseconds") \ 16999336Sdfr \ 17001558Srgrimes product(bool, CMSClassUnloadingEnabled, true, \ 17011558Srgrimes "Whether class unloading enabled when using CMS GC") \ 17021558Srgrimes \ 17031558Srgrimes product(uintx, CMSClassUnloadingMaxInterval, 0, \ 17049336Sdfr "When CMS class unloading is enabled, the maximum CMS cycle " \ 17051558Srgrimes "count for which classes may not be unloaded") \ 17069336Sdfr \ 17071558Srgrimes develop(intx, CMSDictionaryChoice, 0, \ 17081558Srgrimes "Use BinaryTreeDictionary as default in the CMS generation") \ 17091558Srgrimes \ 17101558Srgrimes product(uintx, CMSIndexedFreeListReplenish, 4, \ 17111558Srgrimes "Replenish an indexed free list with this number of chunks") \ 17121558Srgrimes \ 17131558Srgrimes product(bool, CMSReplenishIntermediate, true, \ 17141558Srgrimes "Replenish all intermediate free-list caches") \ 17151558Srgrimes \ 171637663Scharnier product(bool, CMSSplitIndexedFreeListBlocks, true, \ 17171558Srgrimes "When satisfying batched demand, split blocks from the " \ 17181558Srgrimes "IndexedFreeList whose size is a multiple of requested size") \ 17191558Srgrimes \ 17209336Sdfr product(bool, CMSLoopWarn, false, \ 17211558Srgrimes "Warn in case of excessive CMS looping") \ 17221558Srgrimes \ 17231558Srgrimes develop(bool, CMSOverflowEarlyRestoration, false, \ 17241558Srgrimes "Restore preserved marks early") \ 17251558Srgrimes \ 17261558Srgrimes product(size_t, MarkStackSize, NOT_LP64(32*K) LP64_ONLY(4*M), \ 17271558Srgrimes "Size of marking stack") \ 17281558Srgrimes \ 17291558Srgrimes product(size_t, MarkStackSizeMax, NOT_LP64(4*M) LP64_ONLY(512*M), \ 17301558Srgrimes "Maximum size of marking stack") \ 1731216587Scharnier \ 1732216587Scharnier notproduct(bool, CMSMarkStackOverflowALot, false, \ 17331558Srgrimes "Simulate frequent marking stack / work queue overflow") \ 17341558Srgrimes \ 17351558Srgrimes notproduct(uintx, CMSMarkStackOverflowInterval, 1000, \ 17361558Srgrimes "An \"interval\" counter that determines how frequently " \ 17371558Srgrimes "to simulate overflow; a smaller number increases frequency") \ 17381558Srgrimes \ 17391558Srgrimes product(uintx, CMSMaxAbortablePrecleanLoops, 0, \ 17401558Srgrimes "Maximum number of abortable preclean iterations, if > 0") \ 17411558Srgrimes \ 17429336Sdfr product(intx, CMSMaxAbortablePrecleanTime, 5000, \ 17431558Srgrimes "Maximum time in abortable preclean (in milliseconds)") \ 17441558Srgrimes \ 17459336Sdfr product(uintx, CMSAbortablePrecleanMinWorkPerIteration, 100, \ 17461558Srgrimes "Nominal minimum work per abortable preclean iteration") \ 17471558Srgrimes \ 17481558Srgrimes manageable(intx, CMSAbortablePrecleanWaitMillis, 100, \ 17491558Srgrimes "Time that we sleep between iterations when not given " \ 17501558Srgrimes "enough work per iteration") \ 17511558Srgrimes \ 17521558Srgrimes product(size_t, CMSRescanMultiple, 32, \ 17531558Srgrimes "Size (in cards) of CMS parallel rescan task") \ 17541558Srgrimes \ 17551558Srgrimes product(size_t, CMSConcMarkMultiple, 32, \ 17561558Srgrimes "Size (in cards) of CMS concurrent MT marking task") \ 17571558Srgrimes \ 17581558Srgrimes product(bool, CMSAbortSemantics, false, \ 17591558Srgrimes "Whether abort-on-overflow semantics is implemented") \ 17601558Srgrimes \ 17611558Srgrimes product(bool, CMSParallelInitialMarkEnabled, true, \ 17621558Srgrimes "Use the parallel initial mark.") \ 17631558Srgrimes \ 17641558Srgrimes product(bool, CMSParallelRemarkEnabled, true, \ 17651558Srgrimes "Whether parallel remark enabled (only if ParNewGC)") \ 17669336Sdfr \ 17671558Srgrimes product(bool, CMSParallelSurvivorRemarkEnabled, true, \ 17689336Sdfr "Whether parallel remark of survivor space " \ 17691558Srgrimes "enabled (effective only if CMSParallelRemarkEnabled)") \ 17701558Srgrimes \ 17711558Srgrimes product(bool, CMSPLABRecordAlways, true, \ 17721558Srgrimes "Always record survivor space PLAB boundaries (effective only " \ 17731558Srgrimes "if CMSParallelSurvivorRemarkEnabled)") \ 17741558Srgrimes \ 1775216587Scharnier product(bool, CMSEdenChunksRecordAlways, true, \ 17761558Srgrimes "Always record eden chunks used for the parallel initial mark " \ 17771558Srgrimes "or remark of eden") \ 17781558Srgrimes \ 17791558Srgrimes product(bool, CMSPrintEdenSurvivorChunks, false, \ 178074462Salfred "Print the eden and the survivor chunks used for the parallel " \ 17811558Srgrimes "initial mark or remark of the eden/survivor spaces") \ 178274462Salfred \ 17831558Srgrimes product(bool, CMSConcurrentMTEnabled, true, \ 178474462Salfred "Whether multi-threaded concurrent work enabled " \ 17851558Srgrimes "(effective only if ParNewGC)") \ 17861558Srgrimes \ 17871558Srgrimes product(bool, CMSPrecleaningEnabled, true, \ 17881558Srgrimes "Whether concurrent precleaning enabled") \ 17891558Srgrimes \ 17901558Srgrimes product(uintx, CMSPrecleanIter, 3, \ 17911558Srgrimes "Maximum number of precleaning iteration passes") \ 17921558Srgrimes \ 17931558Srgrimes product(uintx, CMSPrecleanNumerator, 2, \ 17941558Srgrimes "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence " \ 1795216587Scharnier "ratio") \ 1796216587Scharnier \ 17971558Srgrimes product(uintx, CMSPrecleanDenominator, 3, \ 17981558Srgrimes "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence " \ 17991558Srgrimes "ratio") \ 180074462Salfred \ 18011558Srgrimes product(bool, CMSPrecleanRefLists1, true, \ 18021558Srgrimes "Preclean ref lists during (initial) preclean phase") \ 18031558Srgrimes \ 18049336Sdfr product(bool, CMSPrecleanRefLists2, false, \ 18051558Srgrimes "Preclean ref lists during abortable preclean phase") \ 18061558Srgrimes \ 18071558Srgrimes product(bool, CMSPrecleanSurvivors1, false, \ 18081558Srgrimes "Preclean survivors during (initial) preclean phase") \ 18091558Srgrimes \ 181074462Salfred product(bool, CMSPrecleanSurvivors2, true, \ 181174462Salfred "Preclean survivors during abortable preclean phase") \ 181275801Siedowse \ 181374462Salfred product(uintx, CMSPrecleanThreshold, 1000, \ 181474462Salfred "Do not iterate again if number of dirty cards is less than this")\ 181574462Salfred \ 181674462Salfred product(bool, CMSCleanOnEnter, true, \ 18179336Sdfr "Clean-on-enter optimization for reducing number of dirty cards") \ 181875801Siedowse \ 18191558Srgrimes product(uintx, CMSRemarkVerifyVariant, 1, \ 182075801Siedowse "Choose variant (1,2) of verification following remark") \ 182175801Siedowse \ 182275801Siedowse product(size_t, CMSScheduleRemarkEdenSizeThreshold, 2*M, \ 182375801Siedowse "If Eden size is below this, do not try to schedule remark") \ 182474462Salfred \ 182574462Salfred product(uintx, CMSScheduleRemarkEdenPenetration, 50, \ 182674462Salfred "The Eden occupancy percentage (0-100) at which " \ 182775801Siedowse "to try and schedule remark pause") \ 182875801Siedowse \ 18291558Srgrimes product(uintx, CMSScheduleRemarkSamplingRatio, 5, \ 18301558Srgrimes "Start sampling eden top at least before young gen " \ 18311558Srgrimes "occupancy reaches 1/<ratio> of the size at which " \ 18321558Srgrimes "we plan to schedule remark") \ 18331558Srgrimes \ 18341558Srgrimes product(uintx, CMSSamplingGrain, 16*K, \ 18351558Srgrimes "The minimum distance between eden samples for CMS (see above)") \ 18361558Srgrimes \ 18371558Srgrimes product(bool, CMSScavengeBeforeRemark, false, \ 18381558Srgrimes "Attempt scavenge before the CMS remark step") \ 1839216587Scharnier \ 18401558Srgrimes develop(bool, CMSTraceSweeper, false, \ 18419336Sdfr "Trace some actions of the CMS sweeper") \ 18421558Srgrimes \ 18431558Srgrimes product(uintx, CMSWorkQueueDrainThreshold, 10, \ 18441558Srgrimes "Don't drain below this size per parallel worker/thief") \ 18451558Srgrimes \ 18469336Sdfr manageable(intx, CMSWaitDuration, 2000, \ 18471558Srgrimes "Time in milliseconds that CMS thread waits for young GC") \ 18481558Srgrimes \ 18491558Srgrimes develop(uintx, CMSCheckInterval, 1000, \ 18501558Srgrimes "Interval in milliseconds that CMS thread checks if it " \ 18511558Srgrimes "should start a collection cycle") \ 18521558Srgrimes \ 18531558Srgrimes product(bool, CMSYield, true, \ 18541558Srgrimes "Yield between steps of CMS") \ 18551558Srgrimes \ 18561558Srgrimes product(size_t, CMSBitMapYieldQuantum, 10*M, \ 18571558Srgrimes "Bitmap operations should process at most this many bits " \ 1858216587Scharnier "between yields") \ 18591558Srgrimes \ 18601558Srgrimes product(bool, CMSDumpAtPromotionFailure, false, \ 18611558Srgrimes "Dump useful information about the state of the CMS old " \ 18621558Srgrimes "generation upon a promotion failure") \ 18631558Srgrimes \ 18641558Srgrimes product(bool, CMSPrintChunksInDump, false, \ 18651558Srgrimes "In a dump enabled by CMSDumpAtPromotionFailure, include " \ 18661558Srgrimes "more detailed information about the free chunks") \ 18671558Srgrimes \ 18681558Srgrimes product(bool, CMSPrintObjectsInDump, false, \ 18691558Srgrimes "In a dump enabled by CMSDumpAtPromotionFailure, include " \ 1870184588Sdfr "more detailed information about the allocated objects") \ 1871184588Sdfr \ 1872184588Sdfr diagnostic(bool, FLSVerifyAllHeapReferences, false, \ 1873216587Scharnier "Verify that all references across the FLS boundary " \ 1874184588Sdfr "are to valid objects") \ 1875184588Sdfr \ 1876184588Sdfr diagnostic(bool, FLSVerifyLists, false, \ 1877184588Sdfr "Do lots of (expensive) FreeListSpace verification") \ 1878184588Sdfr \ 1879184588Sdfr diagnostic(bool, FLSVerifyIndexTable, false, \ 1880184588Sdfr "Do lots of (expensive) FLS index table verification") \ 1881184588Sdfr \ 1882184588Sdfr develop(bool, FLSVerifyDictionary, false, \ 1883184588Sdfr "Do lots of (expensive) FLS dictionary verification") \ 1884184588Sdfr \ 1885184588Sdfr develop(bool, VerifyBlockOffsetArray, false, \ 1886184588Sdfr "Do (expensive) block offset array verification") \ 1887184588Sdfr \ 1888184588Sdfr diagnostic(bool, BlockOffsetArrayUseUnallocatedBlock, false, \ 1889184588Sdfr "Maintain _unallocated_block in BlockOffsetArray " \ 1890184588Sdfr "(currently applicable only to CMS collector)") \ 1891184588Sdfr \ 1892184588Sdfr develop(bool, TraceCMSState, false, \ 1893184588Sdfr "Trace the state of the CMS collection") \ 1894184588Sdfr \ 1895184588Sdfr product(intx, RefDiscoveryPolicy, 0, \ 1896184588Sdfr "Select type of reference discovery policy: " \ 1897184588Sdfr "reference-based(0) or referent-based(1)") \ 1898184588Sdfr \ 1899184588Sdfr product(bool, ParallelRefProcEnabled, false, \ 1900184588Sdfr "Enable parallel reference processing whenever possible") \ 1901184588Sdfr \ 1902184588Sdfr product(bool, ParallelRefProcBalancingEnabled, true, \ 1903184588Sdfr "Enable balancing of reference processing queues") \ 1904184588Sdfr \ 1905184588Sdfr product(uintx, CMSTriggerRatio, 80, \ 1906184588Sdfr "Percentage of MinHeapFreeRatio in CMS generation that is " \ 1907184588Sdfr "allocated before a CMS collection cycle commences") \ 1908184588Sdfr \ 1909184588Sdfr product(uintx, CMSBootstrapOccupancy, 50, \ 1910184588Sdfr "Percentage CMS generation occupancy at which to " \ 1911184588Sdfr "initiate CMS collection for bootstrapping collection stats") \ 1912184588Sdfr \ 1913184588Sdfr product(intx, CMSInitiatingOccupancyFraction, -1, \ 1914184588Sdfr "Percentage CMS generation occupancy to start a CMS collection " \ 1915184588Sdfr "cycle. A negative value means that CMSTriggerRatio is used") \ 1916184588Sdfr \ 1917184588Sdfr product(uintx, InitiatingHeapOccupancyPercent, 45, \ 1918184588Sdfr "Percentage of the (entire) heap occupancy to start a " \ 19191558Srgrimes "concurrent GC cycle. It is used by GCs that trigger a " \ 19201558Srgrimes "concurrent GC cycle based on the occupancy of the entire heap, " \ 19211558Srgrimes "not just one of the generations (e.g., G1). A value of 0 " \ 19221558Srgrimes "denotes 'do constant GC cycles'.") \ 19231558Srgrimes \ 1924216587Scharnier manageable(intx, CMSTriggerInterval, -1, \ 1925216587Scharnier "Commence a CMS collection cycle (at least) every so many " \ 19261558Srgrimes "milliseconds (0 permanently, -1 disabled)") \ 19271558Srgrimes \ 19281558Srgrimes product(bool, UseCMSInitiatingOccupancyOnly, false, \ 19291558Srgrimes "Only use occupancy as a criterion for starting a CMS collection")\ 19301558Srgrimes \ 193151968Salfred product(uintx, CMSIsTooFullPercentage, 98, \ 19321558Srgrimes "An absolute ceiling above which CMS will always consider the " \ 19331558Srgrimes "unloading of classes when class unloading is enabled") \ 19341558Srgrimes \ 19351558Srgrimes develop(bool, CMSTestInFreeList, false, \ 19361558Srgrimes "Check if the coalesced range is already in the " \ 19371558Srgrimes "free lists as claimed") \ 19381558Srgrimes \ 19391558Srgrimes notproduct(bool, CMSVerifyReturnedBytes, false, \ 194037663Scharnier "Check that all the garbage collected was returned to the " \ 19411558Srgrimes "free lists") \ 194237663Scharnier \ 19431558Srgrimes notproduct(bool, ScavengeALot, false, \ 19441558Srgrimes "Force scavenge at every Nth exit from the runtime system " \ 194537663Scharnier "(N=ScavengeALotInterval)") \ 19461558Srgrimes \ 19471558Srgrimes develop(bool, FullGCALot, false, \ 19481558Srgrimes "Force full gc at every Nth exit from the runtime system " \ 19491558Srgrimes "(N=FullGCALotInterval)") \ 19501558Srgrimes \ 19511558Srgrimes notproduct(bool, GCALotAtAllSafepoints, false, \ 19521558Srgrimes "Enforce ScavengeALot/GCALot at all potential safepoints") \ 19531558Srgrimes \ 19541558Srgrimes product(bool, PrintPromotionFailure, false, \ 19551558Srgrimes "Print additional diagnostic information following " \ 19561558Srgrimes "promotion failure") \ 19571558Srgrimes \ 19581558Srgrimes notproduct(bool, PromotionFailureALot, false, \ 19591558Srgrimes "Use promotion failure handling on every youngest generation " \ 19601558Srgrimes "collection") \ 19611558Srgrimes \ 19621558Srgrimes develop(uintx, PromotionFailureALotCount, 1000, \ 19631558Srgrimes "Number of promotion failures occurring at PLAB " \ 19641558Srgrimes "refill attempts (ParNew) or promotion attempts " \ 19651558Srgrimes "(other young collectors)") \ 19661558Srgrimes \ 19671558Srgrimes develop(uintx, PromotionFailureALotInterval, 5, \ 19681558Srgrimes "Total collections between promotion failures a lot") \ 19691558Srgrimes \ 19701558Srgrimes experimental(uintx, WorkStealingSleepMillis, 1, \ 19711558Srgrimes "Sleep time when sleep is used for yields") \ 197275801Siedowse \ 19731558Srgrimes experimental(uintx, WorkStealingYieldsBeforeSleep, 5000, \ 197437663Scharnier "Number of yields before a sleep is done during work stealing") \ 19751558Srgrimes \ 19761558Srgrimes experimental(uintx, WorkStealingHardSpins, 4096, \ 19771558Srgrimes "Number of iterations in a spin loop between checks on " \ 19781558Srgrimes "time out of hard spin") \ 19791558Srgrimes \ 19801558Srgrimes experimental(uintx, WorkStealingSpinToYieldRatio, 10, \ 198174462Salfred "Ratio of hard spins to calls to yield") \ 198274462Salfred \ 198374462Salfred develop(uintx, ObjArrayMarkingStride, 512, \ 198474462Salfred "Number of object array elements to push onto the marking stack " \ 198574462Salfred "before pushing a continuation entry") \ 19861558Srgrimes \ 198737663Scharnier develop(bool, MetadataAllocationFailALot, false, \ 19881558Srgrimes "Fail metadata allocations at intervals controlled by " \ 19891558Srgrimes "MetadataAllocationFailALotInterval") \ 199037663Scharnier \ 19911558Srgrimes develop(uintx, MetadataAllocationFailALotInterval, 1000, \ 19921558Srgrimes "Metadata allocation failure a lot interval") \ 19931558Srgrimes \ 19941558Srgrimes develop(bool, TraceMetadataChunkAllocation, false, \ 19951558Srgrimes "Trace chunk metadata allocations") \ 19961558Srgrimes \ 19971558Srgrimes product(bool, TraceMetadataHumongousAllocation, false, \ 19981558Srgrimes "Trace humongous metadata allocations") \ 199927447Sdfr \ 200027447Sdfr develop(bool, TraceMetavirtualspaceAllocation, false, \ 200127447Sdfr "Trace virtual space metadata allocations") \ 200227447Sdfr \ 200327447Sdfr notproduct(bool, ExecuteInternalVMTests, false, \ 200427447Sdfr "Enable execution of internal VM tests") \ 200527447Sdfr \ 2006100336Sjoerg notproduct(bool, VerboseInternalVMTests, false, \ 2007100336Sjoerg "Turn on logging for internal VM tests.") \ 2008184588Sdfr \ 2009184588Sdfr product_pd(bool, UseTLAB, "Use thread-local object allocation") \ 2010184588Sdfr \ 2011184588Sdfr product_pd(bool, ResizeTLAB, \ 2012184588Sdfr "Dynamically resize TLAB size for threads") \ 20131558Srgrimes \ 201437663Scharnier product(bool, ZeroTLAB, false, \ 20151558Srgrimes "Zero out the newly created TLAB") \ 20161558Srgrimes \ 20171558Srgrimes product(bool, FastTLABRefill, true, \ 20181558Srgrimes "Use fast TLAB refill code") \ 20191558Srgrimes \ 20201558Srgrimes product(bool, PrintTLAB, false, \ 20211558Srgrimes "Print various TLAB related information") \ 20221558Srgrimes \ 20231558Srgrimes product(bool, TLABStats, true, \ 20241558Srgrimes "Provide more detailed and expensive TLAB statistics " \ 20251558Srgrimes "(with PrintTLAB)") \ 20261558Srgrimes \ 20271558Srgrimes product_pd(bool, NeverActAsServerClassMachine, \ 20281558Srgrimes "Never act like a server-class machine") \ 20291558Srgrimes \ 20301558Srgrimes product(bool, AlwaysActAsServerClassMachine, false, \ 20311558Srgrimes "Always act like a server-class machine") \ 20321558Srgrimes \ 20331558Srgrimes product_pd(uint64_t, MaxRAM, \ 20341558Srgrimes "Real memory size (in bytes) used to set maximum heap size") \ 20351558Srgrimes \ 20361558Srgrimes product(size_t, ErgoHeapSizeLimit, 0, \ 2037216587Scharnier "Maximum ergonomically set heap size (in bytes); zero means use " \ 20381558Srgrimes "MaxRAM / MaxRAMFraction") \ 20397401Swpaul \ 204075635Siedowse product(uintx, MaxRAMFraction, 4, \ 204174462Salfred "Maximum fraction (1/n) of real memory used for maximum heap " \ 204274462Salfred "size") \ 20431558Srgrimes \ 204474462Salfred product(uintx, DefaultMaxRAMFraction, 4, \ 204574462Salfred "Maximum fraction (1/n) of real memory used for maximum heap " \ 20461558Srgrimes "size; deprecated: to be renamed to MaxRAMFraction") \ 20471558Srgrimes \ 204874462Salfred product(uintx, MinRAMFraction, 2, \ 204974462Salfred "Minimum fraction (1/n) of real memory used for maximum heap " \ 205074462Salfred "size on systems with small physical memory size") \ 205174462Salfred \ 205274462Salfred product(uintx, InitialRAMFraction, 64, \ 205375635Siedowse "Fraction (1/n) of real memory used for initial heap size") \ 205474462Salfred \ 205574462Salfred develop(uintx, MaxVirtMemFraction, 2, \ 205674462Salfred "Maximum fraction (1/n) of virtual memory used for ergonomically "\ 205774462Salfred "determining maximum heap size") \ 205874462Salfred \ 205974462Salfred product(bool, UseAutoGCSelectPolicy, false, \ 2060146187Sume "Use automatic collection selection policy") \ 206174462Salfred \ 206274462Salfred product(uintx, AutoGCSelectPauseMillis, 5000, \ 206374462Salfred "Automatic GC selection pause threshold in milliseconds") \ 206475641Siedowse \ 206574462Salfred product(bool, UseAdaptiveSizePolicy, true, \ 206675635Siedowse "Use adaptive generation sizing policies") \ 206775635Siedowse \ 206875635Siedowse product(bool, UsePSAdaptiveSurvivorSizePolicy, true, \ 206975635Siedowse "Use adaptive survivor sizing policies") \ 207075635Siedowse \ 207175635Siedowse product(bool, UseAdaptiveGenerationSizePolicyAtMinorCollection, true, \ 207275635Siedowse "Use adaptive young-old sizing policies at minor collections") \ 207375635Siedowse \ 207475635Siedowse product(bool, UseAdaptiveGenerationSizePolicyAtMajorCollection, true, \ 207575635Siedowse "Use adaptive young-old sizing policies at major collections") \ 207675635Siedowse \ 207775801Siedowse product(bool, UseAdaptiveSizePolicyWithSystemGC, false, \ 207875635Siedowse "Include statistics from System.gc() for adaptive size policy") \ 207975635Siedowse \ 208075635Siedowse product(bool, UseAdaptiveGCBoundary, false, \ 208175635Siedowse "Allow young-old boundary to move") \ 208275635Siedowse \ 208375635Siedowse develop(bool, TraceAdaptiveGCBoundary, false, \ 208475635Siedowse "Trace young-old boundary moves") \ 208575635Siedowse \ 208675635Siedowse develop(intx, PSAdaptiveSizePolicyResizeVirtualSpaceAlot, -1, \ 208774462Salfred "Resize the virtual spaces of the young or old generations") \ 20881558Srgrimes \ 208975635Siedowse product(uintx, AdaptiveSizeThroughPutPolicy, 0, \ 20901558Srgrimes "Policy for changing generation size for throughput goals") \ 20911558Srgrimes \ 20921558Srgrimes develop(bool, PSAdjustTenuredGenForMinorPause, false, \ 20931558Srgrimes "Adjust tenured generation to achieve a minor pause goal") \ 20941558Srgrimes \ 20951558Srgrimes develop(bool, PSAdjustYoungGenForMajorPause, false, \ 20961558Srgrimes "Adjust young generation to achieve a major pause goal") \ 2097216587Scharnier \ 20981558Srgrimes product(uintx, AdaptiveSizePolicyInitializingSteps, 20, \ 20991558Srgrimes "Number of steps where heuristics is used before data is used") \ 21001558Srgrimes \ 21011558Srgrimes develop(uintx, AdaptiveSizePolicyReadyThreshold, 5, \ 21021558Srgrimes "Number of collections before the adaptive sizing is started") \ 21031558Srgrimes \ 21041558Srgrimes product(uintx, AdaptiveSizePolicyOutputInterval, 0, \ 21051558Srgrimes "Collection interval for printing information; zero means never") \ 210627447Sdfr \ 210727447Sdfr product(bool, UseAdaptiveSizePolicyFootprintGoal, true, \ 21081558Srgrimes "Use adaptive minimum footprint as a goal") \ 21091558Srgrimes \ 21101558Srgrimes product(uintx, AdaptiveSizePolicyWeight, 10, \ 21111558Srgrimes "Weight given to exponential resizing, between 0 and 100") \ 21121558Srgrimes \ 21131558Srgrimes product(uintx, AdaptiveTimeWeight, 25, \ 21141558Srgrimes "Weight given to time in adaptive policy, between 0 and 100") \ 21151558Srgrimes \ 2116216587Scharnier product(uintx, PausePadding, 1, \ 21171558Srgrimes "How much buffer to keep for pause time") \ 21181558Srgrimes \ 21191558Srgrimes product(uintx, PromotedPadding, 3, \ 21201558Srgrimes "How much buffer to keep for promotion failure") \ 21211558Srgrimes \ 21221558Srgrimes product(uintx, SurvivorPadding, 3, \ 21231558Srgrimes "How much buffer to keep for survivor overflow") \ 21241558Srgrimes \ 21251558Srgrimes product(uintx, ThresholdTolerance, 10, \ 21261558Srgrimes "Allowed collection cost difference between generations") \ 21271558Srgrimes \ 2128216587Scharnier product(uintx, AdaptiveSizePolicyCollectionCostMargin, 50, \ 21291558Srgrimes "If collection costs are within margin, reduce both by full " \ 21301558Srgrimes "delta") \ 21311558Srgrimes \ 21321558Srgrimes product(uintx, YoungGenerationSizeIncrement, 20, \ 21331558Srgrimes "Adaptive size percentage change in young generation") \ 21341558Srgrimes \ 21351558Srgrimes product(uintx, YoungGenerationSizeSupplement, 80, \ 21369336Sdfr "Supplement to YoungedGenerationSizeIncrement used at startup") \ 21371558Srgrimes \ 21381558Srgrimes product(uintx, YoungGenerationSizeSupplementDecay, 8, \ 21391558Srgrimes "Decay factor to YoungedGenerationSizeSupplement") \ 21401558Srgrimes \ 21411558Srgrimes product(uintx, TenuredGenerationSizeIncrement, 20, \ 21421558Srgrimes "Adaptive size percentage change in tenured generation") \ 21431558Srgrimes \ 2144216587Scharnier product(uintx, TenuredGenerationSizeSupplement, 80, \ 21451558Srgrimes "Supplement to TenuredGenerationSizeIncrement used at startup") \ 21461558Srgrimes \ 214737663Scharnier product(uintx, TenuredGenerationSizeSupplementDecay, 2, \ 21481558Srgrimes "Decay factor to TenuredGenerationSizeIncrement") \ 21491558Srgrimes \ 21501558Srgrimes product(uintx, MaxGCPauseMillis, max_uintx, \ 21511558Srgrimes "Adaptive size policy maximum GC pause time goal in millisecond, "\ 2152158857Srodrigc "or (G1 Only) the maximum GC time per MMU time slice") \ 21531558Srgrimes \ 21541558Srgrimes product(uintx, GCPauseIntervalMillis, 0, \ 21551558Srgrimes "Time slice for MMU specification") \ 2156158857Srodrigc \ 2157158857Srodrigc product(uintx, MaxGCMinorPauseMillis, max_uintx, \ 21581558Srgrimes "Adaptive size policy maximum GC minor pause time goal " \ 215975841Siedowse "in millisecond") \ 216074462Salfred \ 2161192934Srmacklem product(uintx, GCTimeRatio, 99, \ 2162158857Srodrigc "Adaptive size policy application time to GC time ratio") \ 2163158857Srodrigc \ 21641558Srgrimes product(uintx, AdaptiveSizeDecrementScaleFactor, 4, \ 2165158857Srodrigc "Adaptive size scale down factor for shrinking") \ 2166158857Srodrigc \ 2167184588Sdfr product(bool, UseAdaptiveSizeDecayMajorGCCost, true, \ 2168158857Srodrigc "Adaptive size decays the major cost for long major intervals") \ 2169192934Srmacklem \ 21701558Srgrimes product(uintx, AdaptiveSizeMajorGCDecayTimeScale, 10, \ 2171192934Srmacklem "Time scale over which major costs decay") \ 2172192934Srmacklem \ 2173192934Srmacklem product(uintx, MinSurvivorRatio, 3, \ 2174192934Srmacklem "Minimum ratio of young generation/survivor space size") \ 2175192934Srmacklem \ 2176158857Srodrigc product(uintx, InitialSurvivorRatio, 8, \ 2177158857Srodrigc "Initial ratio of young generation/survivor space size") \ 2178158857Srodrigc \ 2179158857Srodrigc product(size_t, BaseFootPrintEstimate, 256*M, \ 2180158857Srodrigc "Estimate of footprint other than Java Heap") \ 218175801Siedowse \ 2182192934Srmacklem product(bool, UseGCOverheadLimit, true, \ 2183158857Srodrigc "Use policy to limit of proportion of time spent in GC " \ 2184192934Srmacklem "before an OutOfMemory error is thrown") \ 2185192934Srmacklem \ 2186192934Srmacklem product(uintx, GCTimeLimit, 98, \ 218775641Siedowse "Limit of the proportion of time spent in GC before " \ 218874462Salfred "an OutOfMemoryError is thrown (used with GCHeapFreeLimit)") \ 218975641Siedowse \ 219075641Siedowse product(uintx, GCHeapFreeLimit, 2, \ 2191192934Srmacklem "Minimum percentage of free space after a full GC before an " \ 2192192934Srmacklem "OutOfMemoryError is thrown (used with GCTimeLimit)") \ 2193192934Srmacklem \ 2194192934Srmacklem develop(uintx, AdaptiveSizePolicyGCTimeLimitThreshold, 5, \ 2195192934Srmacklem "Number of consecutive collections before gc time limit fires") \ 2196192934Srmacklem \ 2197184588Sdfr product(bool, PrintAdaptiveSizePolicy, false, \ 21981558Srgrimes "Print information about AdaptiveSizePolicy") \ 2199158857Srodrigc \ 2200192934Srmacklem product(intx, PrefetchCopyIntervalInBytes, -1, \ 2201192934Srmacklem "How far ahead to prefetch destination area (<= 0 means off)") \ 2202192934Srmacklem \ 2203192934Srmacklem product(intx, PrefetchScanIntervalInBytes, -1, \ 2204192934Srmacklem "How far ahead to prefetch scan area (<= 0 means off)") \ 2205192934Srmacklem \ 2206192934Srmacklem product(intx, PrefetchFieldsAhead, -1, \ 2207192934Srmacklem "How many fields ahead to prefetch in oop scan (<= 0 means off)") \ 2208192934Srmacklem \ 2209158857Srodrigc diagnostic(bool, VerifySilently, false, \ 22101558Srgrimes "Do not print the verification progress") \ 22111558Srgrimes \ 22121558Srgrimes diagnostic(bool, VerifyDuringStartup, false, \ 221375641Siedowse "Verify memory system before executing any Java code " \ 221474462Salfred "during VM initialization") \ 2215192934Srmacklem \ 2216192934Srmacklem diagnostic(bool, VerifyBeforeExit, trueInDebug, \ 2217192934Srmacklem "Verify system before exiting") \ 22181558Srgrimes \ 22191558Srgrimes diagnostic(bool, VerifyBeforeGC, false, \ 222075801Siedowse "Verify memory system before GC") \ 222174462Salfred \ 222274462Salfred diagnostic(bool, VerifyAfterGC, false, \ 2223192934Srmacklem "Verify memory system after GC") \ 222475801Siedowse \ 2225192934Srmacklem diagnostic(bool, VerifyDuringGC, false, \ 2226158857Srodrigc "Verify memory system during GC (between phases)") \ 2227192934Srmacklem \ 222875801Siedowse diagnostic(bool, GCParallelVerificationEnabled, true, \ 2229192934Srmacklem "Enable parallel memory system verification") \ 22301558Srgrimes \ 223175641Siedowse diagnostic(bool, DeferInitialCardMark, false, \ 2232192934Srmacklem "When +ReduceInitialCardMarks, explicitly defer any that " \ 2233192934Srmacklem "may arise from new_pre_store_barrier") \ 2234192934Srmacklem \ 2235192934Srmacklem diagnostic(bool, VerifyRememberedSets, false, \ 223675641Siedowse "Verify GC remembered sets") \ 22377401Swpaul \ 2238158857Srodrigc diagnostic(bool, VerifyObjectStartArray, true, \ 2239158857Srodrigc "Verify GC object start array if verify before/after") \ 22407401Swpaul \ 22411558Srgrimes product(bool, DisableExplicitGC, false, \ 224237663Scharnier "Ignore calls to System.gc()") \ 22431558Srgrimes \ 22441558Srgrimes notproduct(bool, CheckMemoryInitialization, false, \ 2245158857Srodrigc "Check memory initialization") \ 2246158857Srodrigc \ 22471558Srgrimes diagnostic(bool, BindCMSThreadToCPU, false, \ 22481558Srgrimes "Bind CMS Thread to CPU if possible") \ 22491558Srgrimes \ 2250192934Srmacklem diagnostic(uintx, CPUForCMSThread, 0, \ 22511558Srgrimes "When BindCMSThreadToCPU is true, the CPU to bind CMS thread to") \ 2252192934Srmacklem \ 2253192934Srmacklem product(bool, BindGCTaskThreadsToCPUs, false, \ 2254192934Srmacklem "Bind GCTaskThreads to CPUs if possible") \ 2255192934Srmacklem \ 2256192934Srmacklem product(bool, UseGCTaskAffinity, false, \ 2257192934Srmacklem "Use worker affinity when asking for GCTasks") \ 2258158857Srodrigc \ 2259192934Srmacklem product(uintx, ProcessDistributionStride, 4, \ 2260192934Srmacklem "Stride through processors when distributing processes") \ 2261192934Srmacklem \ 2262192934Srmacklem product(uintx, CMSCoordinatorYieldSleepCount, 10, \ 2263192934Srmacklem "Number of times the coordinator GC thread will sleep while " \ 2264192934Srmacklem "yielding before giving up and resuming GC") \ 2265192934Srmacklem \ 2266192934Srmacklem product(uintx, CMSYieldSleepCount, 0, \ 2267192934Srmacklem "Number of times a GC thread (minus the coordinator) " \ 2268192934Srmacklem "will sleep while yielding before giving up and resuming GC") \ 2269192934Srmacklem \ 2270192934Srmacklem /* gc tracing */ \ 2271192934Srmacklem manageable(bool, PrintGC, false, \ 2272192934Srmacklem "Print message at garbage collection") \ 2273192934Srmacklem \ 2274192934Srmacklem manageable(bool, PrintGCDetails, false, \ 2275192934Srmacklem "Print more details at garbage collection") \ 2276192934Srmacklem \ 2277192934Srmacklem manageable(bool, PrintGCDateStamps, false, \ 2278192934Srmacklem "Print date stamps at garbage collection") \ 2279192934Srmacklem \ 2280192934Srmacklem manageable(bool, PrintGCTimeStamps, false, \ 2281192934Srmacklem "Print timestamps at garbage collection") \ 2282192934Srmacklem \ 2283192934Srmacklem manageable(bool, PrintGCID, true, \ 2284192934Srmacklem "Print an identifier for each garbage collection") \ 2285192934Srmacklem \ 2286192934Srmacklem product(bool, PrintGCTaskTimeStamps, false, \ 2287192934Srmacklem "Print timestamps for individual gc worker thread tasks") \ 2288192934Srmacklem \ 2289192934Srmacklem develop(intx, ConcGCYieldTimeout, 0, \ 229075635Siedowse "If non-zero, assert that GC threads yield within this " \ 2291192934Srmacklem "number of milliseconds") \ 2292192934Srmacklem \ 2293192934Srmacklem product(bool, PrintReferenceGC, false, \ 2294192934Srmacklem "Print times spent handling reference objects during GC " \ 2295192934Srmacklem "(enabled only when PrintGCDetails)") \ 2296192934Srmacklem \ 2297100336Sjoerg develop(bool, TraceReferenceGC, false, \ 2298192934Srmacklem "Trace handling of soft/weak/final/phantom references") \ 2299192934Srmacklem \ 2300192934Srmacklem develop(bool, TraceFinalizerRegistration, false, \ 2301192934Srmacklem "Trace registration of final references") \ 2302192934Srmacklem \ 2303192934Srmacklem notproduct(bool, TraceScavenge, false, \ 2304192934Srmacklem "Trace scavenge") \ 2305192934Srmacklem \ 2306192934Srmacklem product(bool, IgnoreEmptyClassPaths, false, \ 2307192934Srmacklem "Ignore empty path elements in -classpath") \ 2308192934Srmacklem \ 2309192934Srmacklem product(bool, TraceClassPaths, false, \ 2310192934Srmacklem "Trace processing of class paths") \ 2311192934Srmacklem \ 2312192934Srmacklem product_rw(bool, TraceClassLoading, false, \ 2313192934Srmacklem "Trace all classes loaded") \ 2314192934Srmacklem \ 2315192934Srmacklem product(bool, TraceClassLoadingPreorder, false, \ 2316192934Srmacklem "Trace all classes loaded in order referenced (not loaded)") \ 2317192934Srmacklem \ 2318192934Srmacklem product_rw(bool, TraceClassUnloading, false, \ 2319192934Srmacklem "Trace unloading of classes") \ 2320192934Srmacklem \ 2321192934Srmacklem product_rw(bool, TraceLoaderConstraints, false, \ 2322192934Srmacklem "Trace loader constraints") \ 2323192934Srmacklem \ 2324192934Srmacklem develop(bool, TraceClassLoaderData, false, \ 2325192934Srmacklem "Trace class loader loader_data lifetime") \ 2326192934Srmacklem \ 2327192934Srmacklem product(size_t, InitialBootClassLoaderMetaspaceSize, \ 2328192934Srmacklem NOT_LP64(2200*K) LP64_ONLY(4*M), \ 2329100336Sjoerg "Initial size of the boot class loader data metaspace") \ 2330192934Srmacklem \ 2331192934Srmacklem product(bool, TraceYoungGenTime, false, \ 2332192934Srmacklem "Trace accumulated time for young collection") \ 2333192934Srmacklem \ 2334192934Srmacklem product(bool, TraceOldGenTime, false, \ 23351558Srgrimes "Trace accumulated time for old collection") \ 23361558Srgrimes \ 2337192934Srmacklem product(bool, PrintTenuringDistribution, false, \ 2338192934Srmacklem "Print tenuring age information") \ 2339192934Srmacklem \ 2340192934Srmacklem product_rw(bool, PrintHeapAtGC, false, \ 2341192934Srmacklem "Print heap layout before and after each GC") \ 2342192934Srmacklem \ 2343192934Srmacklem product_rw(bool, PrintHeapAtGCExtended, false, \ 2344192934Srmacklem "Print extended information about the layout of the heap " \ 2345192934Srmacklem "when -XX:+PrintHeapAtGC is set") \ 2346192934Srmacklem \ 2347192934Srmacklem product(bool, PrintHeapAtSIGBREAK, true, \ 2348192934Srmacklem "Print heap layout in response to SIGBREAK") \ 2349192934Srmacklem \ 2350192934Srmacklem manageable(bool, PrintClassHistogramBeforeFullGC, false, \ 2351192934Srmacklem "Print a class histogram before any major stop-world GC") \ 2352192934Srmacklem \ 2353192934Srmacklem manageable(bool, PrintClassHistogramAfterFullGC, false, \ 2354192934Srmacklem "Print a class histogram after any major stop-world GC") \ 2355192934Srmacklem \ 2356192934Srmacklem manageable(bool, PrintClassHistogram, false, \ 2357192934Srmacklem "Print a histogram of class instances") \ 2358192934Srmacklem \ 2359192934Srmacklem develop(bool, TraceWorkGang, false, \ 236074462Salfred "Trace activities of work gangs") \ 236175641Siedowse \ 236274462Salfred product(bool, TraceParallelOldGCTasks, false, \ 236375641Siedowse "Trace multithreaded GC activity") \ 23641558Srgrimes \ 23651558Srgrimes develop(bool, TraceBlockOffsetTable, false, \ 23661558Srgrimes "Print BlockOffsetTable maps") \ 23671558Srgrimes \ 2368158857Srodrigc develop(bool, TraceCardTableModRefBS, false, \ 2369158857Srodrigc "Print CardTableModRefBS maps") \ 2370158857Srodrigc \ 2371158857Srodrigc develop(bool, TraceGCTaskManager, false, \ 2372158857Srodrigc "Trace actions of the GC task manager") \ 2373158857Srodrigc \ 2374158857Srodrigc develop(bool, TraceGCTaskQueue, false, \ 2375158857Srodrigc "Trace actions of the GC task queues") \ 2376158857Srodrigc \ 2377158857Srodrigc diagnostic(bool, TraceGCTaskThread, false, \ 2378158857Srodrigc "Trace actions of the GC task threads") \ 2379158857Srodrigc \ 2380158857Srodrigc product(bool, PrintParallelOldGCPhaseTimes, false, \ 2381158857Srodrigc "Print the time taken by each phase in ParallelOldGC " \ 23821558Srgrimes "(PrintGCDetails must also be enabled)") \ 23831558Srgrimes \ 23841558Srgrimes develop(bool, TraceParallelOldGCMarkingPhase, false, \ 23851558Srgrimes "Trace marking phase in ParallelOldGC") \ 238675801Siedowse \ 238775801Siedowse develop(bool, TraceParallelOldGCSummaryPhase, false, \ 23881558Srgrimes "Trace summary phase in ParallelOldGC") \ 23891558Srgrimes \ 2390216587Scharnier develop(bool, TraceParallelOldGCCompactionPhase, false, \ 23911558Srgrimes "Trace compaction phase in ParallelOldGC") \ 239275861Siedowse \ 239374462Salfred develop(bool, TraceParallelOldGCDensePrefix, false, \ 239475801Siedowse "Trace dense prefix computation for ParallelOldGC") \ 239575861Siedowse \ 239674462Salfred develop(bool, IgnoreLibthreadGPFault, false, \ 239774462Salfred "Suppress workaround for libthread GP fault") \ 239874462Salfred \ 23991558Srgrimes product(bool, PrintJNIGCStalls, false, \ 240075635Siedowse "Print diagnostic message when GC is stalled " \ 240174462Salfred "by JNI critical section") \ 240274462Salfred \ 240374462Salfred experimental(double, ObjectCountCutOffPercent, 0.5, \ 240474462Salfred "The percentage of the used heap that the instances of a class " \ 240574462Salfred "must occupy for the class to generate a trace event") \ 240674462Salfred \ 240775861Siedowse /* GC log rotation setting */ \ 240875861Siedowse \ 240975861Siedowse product(bool, UseGCLogFileRotation, false, \ 241075861Siedowse "Rotate gclog files (for long running applications). It requires "\ 241175861Siedowse "-Xloggc:<filename>") \ 241274462Salfred \ 241375801Siedowse product(uintx, NumberOfGCLogFiles, 0, \ 241475801Siedowse "Number of gclog files in rotation " \ 241575801Siedowse "(default: 0, no rotation)") \ 241675801Siedowse \ 241775801Siedowse product(size_t, GCLogFileSize, 8*K, \ 241875801Siedowse "GC log file size, requires UseGCLogFileRotation. " \ 241975801Siedowse "Set to 0 to only trigger rotation via jcmd") \ 242074462Salfred \ 242175861Siedowse /* JVMTI heap profiling */ \ 242275861Siedowse \ 242375861Siedowse diagnostic(bool, TraceJVMTIObjectTagging, false, \ 242474462Salfred "Trace JVMTI object tagging calls") \ 242575801Siedowse \ 242675801Siedowse diagnostic(bool, VerifyBeforeIteration, false, \ 242775801Siedowse "Verify memory system before JVMTI iteration") \ 242874462Salfred \ 242975801Siedowse /* compiler interface */ \ 243074462Salfred \ 243174462Salfred develop(bool, CIPrintCompilerName, false, \ 243275801Siedowse "when CIPrint is active, print the name of the active compiler") \ 243374462Salfred \ 243475801Siedowse diagnostic(bool, CIPrintCompileQueue, false, \ 243575801Siedowse "display the contents of the compile queue whenever a " \ 243674462Salfred "compilation is enqueued") \ 243775861Siedowse \ 243875861Siedowse develop(bool, CIPrintRequests, false, \ 243975861Siedowse "display every request for compilation") \ 244075861Siedowse \ 244175861Siedowse product(bool, CITime, false, \ 244275861Siedowse "collect timing information for compilation") \ 244375861Siedowse \ 244475861Siedowse develop(bool, CITimeVerbose, false, \ 244575861Siedowse "be more verbose in compilation timings") \ 244675861Siedowse \ 244774462Salfred develop(bool, CITimeEach, false, \ 244825318Spst "display timing information after each successful compilation") \ 244975801Siedowse \ 245075801Siedowse develop(bool, CICountOSR, false, \ 245175801Siedowse "use a separate counter when assigning ids to osr compilations") \ 245275801Siedowse \ 245375801Siedowse develop(bool, CICompileNatives, true, \ 245475801Siedowse "compile native methods if supported by the compiler") \ 245575801Siedowse \ 245675801Siedowse develop_pd(bool, CICompileOSR, \ 245775801Siedowse "compile on stack replacement methods if supported by the " \ 245874462Salfred "compiler") \ 245975801Siedowse \ 246075801Siedowse develop(bool, CIPrintMethodCodes, false, \ 246175801Siedowse "print method bytecodes of the compiled code") \ 246275801Siedowse \ 2463146187Sume develop(bool, CIPrintTypeFlow, false, \ 246475801Siedowse "print the results of ciTypeFlow analysis") \ 246575801Siedowse \ 246675801Siedowse develop(bool, CITraceTypeFlow, false, \ 246775801Siedowse "detailed per-bytecode tracing of ciTypeFlow analysis") \ 246875801Siedowse \ 246975801Siedowse develop(intx, OSROnlyBCI, -1, \ 247075801Siedowse "OSR only at this bci. Negative values mean exclude that bci") \ 247175801Siedowse \ 247275801Siedowse /* compiler */ \ 247375801Siedowse \ 247475801Siedowse product(intx, CICompilerCount, CI_COMPILER_COUNT, \ 247574462Salfred "Number of compiler threads to run") \ 247674462Salfred \ 247775801Siedowse product(intx, CompilationPolicyChoice, 0, \ 247874462Salfred "which compilation policy (0-3)") \ 247975801Siedowse \ 248075801Siedowse develop(bool, UseStackBanging, true, \ 248175801Siedowse "use stack banging for stack overflow checks (required for " \ 248275801Siedowse "proper StackOverflow handling; disable only to measure cost " \ 248374462Salfred "of stackbanging)") \ 248475801Siedowse \ 248575801Siedowse develop(bool, UseStrictFP, true, \ 248675801Siedowse "use strict fp if modifier strictfp is set") \ 248774462Salfred \ 248875801Siedowse develop(bool, GenerateSynchronizationCode, true, \ 248975801Siedowse "generate locking/unlocking code for synchronized methods and " \ 249075801Siedowse "monitors") \ 249175801Siedowse \ 249275801Siedowse develop(bool, GenerateCompilerNullChecks, true, \ 249375801Siedowse "Generate explicit null checks for loads/stores/calls") \ 249475801Siedowse \ 249575801Siedowse develop(bool, GenerateRangeChecks, true, \ 249675801Siedowse "Generate range checks for array accesses") \ 249775801Siedowse \ 249875801Siedowse develop_pd(bool, ImplicitNullChecks, \ 249975801Siedowse "Generate code for implicit null checks") \ 250075801Siedowse \ 250175801Siedowse product_pd(bool, TrapBasedNullChecks, \ 250275801Siedowse "Generate code for null checks that uses a cmp and trap " \ 250374462Salfred "instruction raising SIGTRAP. This is only used if an access to" \ 250474462Salfred "null (+offset) will not raise a SIGSEGV, i.e.," \ 250574462Salfred "ImplicitNullChecks don't work (PPC64).") \ 250674462Salfred \ 250774462Salfred product(bool, PrintSafepointStatistics, false, \ 250874462Salfred "Print statistics about safepoint synchronization") \ 250974462Salfred \ 251074462Salfred product(intx, PrintSafepointStatisticsCount, 300, \ 251174462Salfred "Total number of safepoint statistics collected " \ 251274462Salfred "before printing them out") \ 251374462Salfred \ 25141558Srgrimes product(intx, PrintSafepointStatisticsTimeout, -1, \ 25151558Srgrimes "Print safepoint statistics only when safepoint takes " \ 25161558Srgrimes "more than PrintSafepointSatisticsTimeout in millis") \ 25171558Srgrimes \ 25181558Srgrimes product(bool, TraceSafepointCleanupTime, false, \ 25191558Srgrimes "Print the break down of clean up tasks performed during " \ 2520216587Scharnier "safepoint") \ 25211558Srgrimes \ 25221558Srgrimes product(bool, Inline, true, \ 25231558Srgrimes "Enable inlining") \ 25241558Srgrimes \ 25251558Srgrimes product(bool, ClipInlining, true, \ 25261558Srgrimes "Clip inlining if aggregate method exceeds DesiredMethodLimit") \ 25271558Srgrimes \ 25281558Srgrimes develop(bool, UseCHA, true, \ 25291558Srgrimes "Enable CHA") \ 25301558Srgrimes \ 25311558Srgrimes product(bool, UseTypeProfile, true, \ 25321558Srgrimes "Check interpreter profile for historically monomorphic calls") \ 25331558Srgrimes \ 25341558Srgrimes diagnostic(bool, PrintInlining, false, \ 25351558Srgrimes "Print inlining optimizations") \ 25361558Srgrimes \ 25371558Srgrimes product(bool, UsePopCountInstruction, false, \ 25381558Srgrimes "Use population count instruction") \ 25391558Srgrimes \ 25401558Srgrimes develop(bool, EagerInitialization, false, \ 25411558Srgrimes "Eagerly initialize classes if possible") \ 2542216587Scharnier \ 25431558Srgrimes develop(bool, TraceMethodReplacement, false, \ 25441558Srgrimes "Print when methods are replaced do to recompilation") \ 254596622Siedowse \ 25461558Srgrimes develop(bool, PrintMethodFlushing, false, \ 25471558Srgrimes "Print the nmethods being flushed") \ 25481558Srgrimes \ 25491558Srgrimes diagnostic(bool, PrintMethodFlushingStatistics, false, \ 25501558Srgrimes "print statistics about method flushing") \ 25511558Srgrimes \ 25521558Srgrimes diagnostic(intx, HotMethodDetectionLimit, 100000, \ 25531558Srgrimes "Number of compiled code invocations after which " \ 255496622Siedowse "the method is considered as hot by the flusher") \ 25551558Srgrimes \ 25561558Srgrimes diagnostic(intx, MinPassesBeforeFlush, 10, \ 25571558Srgrimes "Minimum number of sweeper passes before an nmethod " \ 25581558Srgrimes "can be flushed") \ 25591558Srgrimes \ 25601558Srgrimes product(bool, UseCodeAging, true, \ 25611558Srgrimes "Insert counter to detect warm methods") \ 25621558Srgrimes \ 25631558Srgrimes diagnostic(bool, StressCodeAging, false, \ 25641558Srgrimes "Start with counters compiled in") \ 256579117Sdd \ 256679117Sdd develop(bool, UseRelocIndex, false, \ 256779117Sdd "Use an index to speed random access to relocations") \ 256879117Sdd \ 256996622Siedowse develop(bool, StressCodeBuffers, false, \ 257096622Siedowse "Exercise code buffer expansion and other rare state changes") \ 257196622Siedowse \ 257296622Siedowse diagnostic(bool, DebugNonSafepoints, trueInDebug, \ 257396622Siedowse "Generate extra debugging information for non-safepoints in " \ 25741558Srgrimes "nmethods") \ 257596622Siedowse \ 257696622Siedowse product(bool, PrintVMOptions, false, \ 257796622Siedowse "Print flags that appeared on the command line") \ 25781558Srgrimes \ 25791558Srgrimes product(bool, IgnoreUnrecognizedVMOptions, false, \ 25801558Srgrimes "Ignore unrecognized VM options") \ 25811558Srgrimes \ 25821558Srgrimes product(bool, PrintCommandLineFlags, false, \ 25831558Srgrimes "Print flags specified on command line or set by ergonomics") \ 25841558Srgrimes \ 25851558Srgrimes product(bool, PrintFlagsInitial, false, \ 2586216587Scharnier "Print all VM flags before argument processing and exit VM") \ 25871558Srgrimes \ 25881558Srgrimes product(bool, PrintFlagsFinal, false, \ 25891558Srgrimes "Print all VM flags after argument and ergonomic processing") \ 25901558Srgrimes \ 25911558Srgrimes notproduct(bool, PrintFlagsWithComments, false, \ 25921558Srgrimes "Print all VM flags with default values and descriptions and " \ 2593194498Sbrooks "exit") \ 2594136051Sstefanf \ 25951558Srgrimes diagnostic(bool, SerializeVMOutput, true, \ 259691354Sdd "Use a mutex to serialize output to tty and LogFile") \ 25971558Srgrimes \ 259837663Scharnier diagnostic(bool, DisplayVMOutput, true, \ 25991558Srgrimes "Display all VM output on the tty, independently of LogVMOutput") \ 26001558Srgrimes \ 26011558Srgrimes diagnostic(bool, LogVMOutput, false, \ 26021558Srgrimes "Save VM output to LogFile") \ 26031558Srgrimes \ 26041558Srgrimes diagnostic(ccstr, LogFile, NULL, \ 26051558Srgrimes "If LogVMOutput or LogCompilation is on, save VM output to " \ 26061558Srgrimes "this file [default: ./hotspot_pid%p.log] (%p replaced with pid)")\ 26071558Srgrimes \ 26081558Srgrimes product(ccstr, ErrorFile, NULL, \ 26091558Srgrimes "If an error occurs, save the error data to this file " \ 26101558Srgrimes "[default: ./hs_err_pid%p.log] (%p replaced with pid)") \ 26111558Srgrimes \ 26121558Srgrimes product(bool, DisplayVMOutputToStderr, false, \ 26131558Srgrimes "If DisplayVMOutput is true, display all VM output to stderr") \ 26141558Srgrimes \ 26151558Srgrimes product(bool, DisplayVMOutputToStdout, false, \ 26161558Srgrimes "If DisplayVMOutput is true, display all VM output to stdout") \ 261737663Scharnier \ 26181558Srgrimes product(bool, UseHeavyMonitors, false, \ 26191558Srgrimes "use heavyweight instead of lightweight Java monitors") \ 26201558Srgrimes \ 2621194498Sbrooks product(bool, PrintStringTableStatistics, false, \ 26221558Srgrimes "print statistics about the StringTable and SymbolTable") \ 262337663Scharnier \ 26241558Srgrimes diagnostic(bool, VerifyStringTableAtExit, false, \ 2625136051Sstefanf "verify StringTable contents at exit") \ 26261558Srgrimes \ 26271558Srgrimes notproduct(bool, PrintSymbolTableSizeHistogram, false, \ 26281558Srgrimes "print histogram of the symbol table") \ 26291558Srgrimes \ 26301558Srgrimes notproduct(bool, ExitVMOnVerifyError, false, \ 26311558Srgrimes "standard exit from VM if bytecode verify error " \ 26321558Srgrimes "(only in debug mode)") \ 26331558Srgrimes \ 26341558Srgrimes notproduct(ccstr, AbortVMOnException, NULL, \ 26351558Srgrimes "Call fatal if this exception is thrown. Example: " \ 26361558Srgrimes "java -XX:AbortVMOnException=java.lang.NullPointerException Foo") \ 26371558Srgrimes \ 26381558Srgrimes notproduct(ccstr, AbortVMOnExceptionMessage, NULL, \ 26391558Srgrimes "Call fatal if the exception pointed by AbortVMOnException " \ 26401558Srgrimes "has this message") \ 26411558Srgrimes \ 264237663Scharnier develop(bool, DebugVtables, false, \ 26431558Srgrimes "add debugging code to vtable dispatch") \ 26441558Srgrimes \ 26451558Srgrimes develop(bool, PrintVtables, false, \ 2646194498Sbrooks "print vtables when printing klass") \ 26471558Srgrimes \ 26481558Srgrimes notproduct(bool, PrintVtableStats, false, \ 26491558Srgrimes "print vtables stats at end of run") \ 26501558Srgrimes \ 26511558Srgrimes develop(bool, TraceCreateZombies, false, \ 265237663Scharnier "trace creation of zombie nmethods") \ 26531558Srgrimes \ 26541558Srgrimes notproduct(bool, IgnoreLockingAssertions, false, \ 26551558Srgrimes "disable locking assertions (for speed)") \ 26561558Srgrimes \ 26571558Srgrimes product(bool, RangeCheckElimination, true, \ 2658194498Sbrooks "Eliminate range checks") \ 265937663Scharnier \ 26601558Srgrimes develop_pd(bool, UncommonNullCast, \ 26611558Srgrimes "track occurrences of null in casts; adjust compiler tactics") \ 2662194880Sdfr \ 26631558Srgrimes develop(bool, TypeProfileCasts, true, \ 26641558Srgrimes "treat casts like calls for purposes of type profiling") \ 26651558Srgrimes \ 26661558Srgrimes develop(bool, DelayCompilationDuringStartup, true, \ 2667216587Scharnier "Delay invoking the compiler until main application class is " \ 26681558Srgrimes "loaded") \ 26691558Srgrimes \ 267023681Speter develop(bool, CompileTheWorld, false, \ 26711558Srgrimes "Compile all methods in all classes in bootstrap class path " \ 26721558Srgrimes "(stress test)") \ 26731558Srgrimes \ 26741558Srgrimes develop(bool, CompileTheWorldPreloadClasses, true, \ 267553117Sbillf "Preload all classes used by a class before start loading") \ 267653117Sbillf \ 267753117Sbillf notproduct(intx, CompileTheWorldSafepointInterval, 100, \ 267853117Sbillf "Force a safepoint every n compiles so sweeper can keep up") \ 267953117Sbillf \ 268053117Sbillf develop(bool, FillDelaySlots, true, \ 26811558Srgrimes "Fill delay slots (on SPARC only)") \ 26821558Srgrimes \ 26831558Srgrimes develop(bool, TimeLivenessAnalysis, false, \ 268423681Speter "Time computation of bytecode liveness analysis") \ 268523681Speter \ 268623681Speter develop(bool, TraceLivenessGen, false, \ 268723681Speter "Trace the generation of liveness analysis information") \ 26881558Srgrimes \ 26891558Srgrimes notproduct(bool, TraceLivenessQuery, false, \ 269037663Scharnier "Trace queries of liveness analysis information") \ 269137663Scharnier \ 2692194880Sdfr notproduct(bool, CollectIndexSetStatistics, false, \ 2693194880Sdfr "Collect information about IndexSets") \ 2694194880Sdfr \ 2695194880Sdfr develop(bool, UseLoopSafepoints, true, \ 26961558Srgrimes "Generate Safepoint nodes in every loop") \ 26971558Srgrimes \ 26981558Srgrimes develop(intx, FastAllocateSizeLimit, 128*K, \ 26991558Srgrimes /* Note: This value is zero mod 1<<13 for a cheap sparc set. */ \ 27001558Srgrimes "Inline allocations larger than this in doublewords must go slow")\ 27011558Srgrimes \ 27021558Srgrimes product(bool, AggressiveOpts, false, \ 270375635Siedowse "Enable aggressive optimizations - see arguments.cpp") \ 270475635Siedowse \ 27051558Srgrimes product_pd(uintx, TypeProfileLevel, \ 27061558Srgrimes "=XYZ, with Z: Type profiling of arguments at call; " \ 27071558Srgrimes "Y: Type profiling of return value at call; " \ 27081558Srgrimes "X: Type profiling of parameters to methods; " \ 27091558Srgrimes "X, Y and Z in 0=off ; 1=jsr292 only; 2=all methods") \ 27101558Srgrimes \ 27111558Srgrimes product(intx, TypeProfileArgsLimit, 2, \ 27121558Srgrimes "max number of call arguments to consider for type profiling") \ 27131558Srgrimes \ 27141558Srgrimes product(intx, TypeProfileParmsLimit, 2, \ 27151558Srgrimes "max number of incoming parameters to consider for type profiling"\ 27161558Srgrimes ", -1 for all") \ 27171558Srgrimes \ 27181558Srgrimes /* statistics */ \ 27191558Srgrimes develop(bool, CountCompiledCalls, false, \ 27201558Srgrimes "Count method invocations") \ 27211558Srgrimes \ 27221558Srgrimes notproduct(bool, CountRuntimeCalls, false, \ 27231558Srgrimes "Count VM runtime calls") \ 27241558Srgrimes \ 27251558Srgrimes develop(bool, CountJNICalls, false, \ 27261558Srgrimes "Count jni method invocations") \ 272737663Scharnier \ 27281558Srgrimes notproduct(bool, CountJVMCalls, false, \ 27291558Srgrimes "Count jvm method invocations") \ 27301558Srgrimes \ 27311558Srgrimes notproduct(bool, CountRemovableExceptions, false, \ 27321558Srgrimes "Count exceptions that could be replaced by branches due to " \ 27331558Srgrimes "inlining") \ 27341558Srgrimes \ 27351558Srgrimes notproduct(bool, ICMissHistogram, false, \ 27361558Srgrimes "Produce histogram of IC misses") \ 27371558Srgrimes \ 27381558Srgrimes notproduct(bool, PrintClassStatistics, false, \ 27391558Srgrimes "Print class statistics at end of run") \ 2740216587Scharnier \ 27411558Srgrimes notproduct(bool, PrintMethodStatistics, false, \ 27421558Srgrimes "Print method statistics at end of run") \ 27431558Srgrimes \ 27441558Srgrimes /* interpreter */ \ 27451558Srgrimes develop(bool, ClearInterpreterLocals, false, \ 27461558Srgrimes "Always clear local variables of interpreter activations upon " \ 27471558Srgrimes "entry") \ 27481558Srgrimes \ 27491558Srgrimes product_pd(bool, RewriteBytecodes, \ 27501558Srgrimes "Allow rewriting of bytecodes (bytecodes are not immutable)") \ 27511558Srgrimes \ 27521558Srgrimes product_pd(bool, RewriteFrequentPairs, \ 27531558Srgrimes "Rewrite frequently used bytecode pairs into a single bytecode") \ 275437663Scharnier \ 275537663Scharnier diagnostic(bool, PrintInterpreter, false, \ 2756194880Sdfr "Print the generated interpreter code") \ 2757194880Sdfr \ 2758194880Sdfr product(bool, UseInterpreter, true, \ 2759194880Sdfr "Use interpreter for non-compiled methods") \ 27601558Srgrimes \ 27611558Srgrimes develop(bool, UseFastSignatureHandlers, true, \ 27621558Srgrimes "Use fast signature handlers for native calls") \ 276337663Scharnier \ 27641558Srgrimes product(bool, UseLoopCounter, true, \ 27651558Srgrimes "Increment invocation counter on backward branch") \ 27661558Srgrimes \ 27671558Srgrimes product_pd(bool, UseOnStackReplacement, \ 27681558Srgrimes "Use on stack replacement, calls runtime if invoc. counter " \ 27691558Srgrimes "overflows in loop") \ 27701558Srgrimes \ 27711558Srgrimes notproduct(bool, TraceOnStackReplacement, false, \ 27721558Srgrimes "Trace on stack replacement") \ 27731558Srgrimes \ 2774216587Scharnier product_pd(bool, PreferInterpreterNativeStubs, \ 27751558Srgrimes "Use always interpreter stubs for native methods invoked via " \ 27761558Srgrimes "interpreter") \ 277774462Salfred \ 277874462Salfred develop(bool, CountBytecodes, false, \ 27791558Srgrimes "Count number of bytecodes executed") \ 27801558Srgrimes \ 27811558Srgrimes develop(bool, PrintBytecodeHistogram, false, \ 27821558Srgrimes "Print histogram of the executed bytecodes") \ 27831558Srgrimes \ 27841558Srgrimes develop(bool, PrintBytecodePairHistogram, false, \ 27851558Srgrimes "Print histogram of the executed bytecode pairs") \ 27861558Srgrimes \ 27871558Srgrimes diagnostic(bool, PrintSignatureHandlers, false, \ 27881558Srgrimes "Print code generated for native method signature handlers") \ 27891558Srgrimes \ 27901558Srgrimes develop(bool, VerifyOops, false, \ 27911558Srgrimes "Do plausibility checks for oops") \ 27921558Srgrimes \ 27931558Srgrimes develop(bool, CheckUnhandledOops, false, \ 27941558Srgrimes "Check for unhandled oops in VM code") \ 27951558Srgrimes \ 27961558Srgrimes develop(bool, VerifyJNIFields, trueInDebug, \ 27971558Srgrimes "Verify jfieldIDs for instance fields") \ 27981558Srgrimes \ 27991558Srgrimes notproduct(bool, VerifyJNIEnvThread, false, \ 28001558Srgrimes "Verify JNIEnv.thread == Thread::current() when entering VM " \ 28011558Srgrimes "from JNI") \ 2802216587Scharnier \ 28031558Srgrimes develop(bool, VerifyFPU, false, \ 28041558Srgrimes "Verify FPU state (check for NaN's, etc.)") \ 2805192934Srmacklem \ 28061558Srgrimes develop(bool, VerifyThread, false, \ 280783653Speter "Watch the thread register for corruption (SPARC only)") \ 280883653Speter \ 28091558Srgrimes develop(bool, VerifyActivationFrameSize, false, \ 28101558Srgrimes "Verify that activation frame didn't become smaller than its " \ 28111558Srgrimes "minimal size") \ 281275801Siedowse \ 281375801Siedowse develop(bool, TraceFrequencyInlining, false, \ 28141558Srgrimes "Trace frequency based inlining") \ 281575801Siedowse \ 281675801Siedowse develop_pd(bool, InlineIntrinsics, \ 281775801Siedowse "Inline intrinsics that can be statically resolved") \ 281875801Siedowse \ 281975801Siedowse product_pd(bool, ProfileInterpreter, \ 282075801Siedowse "Profile at the bytecode level during interpretation") \ 282175801Siedowse \ 282275801Siedowse develop(bool, TraceProfileInterpreter, false, \ 2823192934Srmacklem "Trace profiling at the bytecode level during interpretation. " \ 2824192934Srmacklem "This outputs the profiling information collected to improve " \ 2825192934Srmacklem "jit compilation.") \ 2826192934Srmacklem \ 2827192934Srmacklem develop_pd(bool, ProfileTraps, \ 2828192934Srmacklem "Profile deoptimization traps at the bytecode level") \ 2829207689Srmacklem \ 2830207689Srmacklem product(intx, ProfileMaturityPercentage, 20, \ 2831207689Srmacklem "number of method invocations/branches (expressed as % of " \ 2832207689Srmacklem "CompileThreshold) before using the method's profile") \ 28331558Srgrimes \ 28341558Srgrimes diagnostic(bool, PrintMethodData, false, \ 28351558Srgrimes "Print the results of +ProfileInterpreter at end of run") \ 28361558Srgrimes \ 28371558Srgrimes develop(bool, VerifyDataPointer, trueInDebug, \ 28381558Srgrimes "Verify the method data pointer during interpreter profiling") \ 28391558Srgrimes \ 2840216587Scharnier develop(bool, VerifyCompiledCode, false, \ 28411558Srgrimes "Include miscellaneous runtime verifications in nmethod code; " \ 28421558Srgrimes "default off because it disturbs nmethod size heuristics") \ 28431558Srgrimes \ 28441558Srgrimes notproduct(bool, CrashGCForDumpingJavaThread, false, \ 28451558Srgrimes "Manually make GC thread crash then dump java stack trace; " \ 28461558Srgrimes "Test only") \ 28471558Srgrimes \ 28481558Srgrimes /* compilation */ \ 28491558Srgrimes product(bool, UseCompiler, true, \ 28509336Sdfr "Use Just-In-Time compilation") \ 28511558Srgrimes \ 28521558Srgrimes develop(bool, TraceCompilationPolicy, false, \ 28531558Srgrimes "Trace compilation policy") \ 28541558Srgrimes \ 28551558Srgrimes develop(bool, TimeCompilationPolicy, false, \ 28569336Sdfr "Time the compilation policy") \ 28571558Srgrimes \ 28581558Srgrimes product(bool, UseCounterDecay, true, \ 28591558Srgrimes "Adjust recompilation counters") \ 28609336Sdfr \ 286175801Siedowse develop(intx, CounterHalfLifeTime, 30, \ 286275801Siedowse "Half-life time of invocation counters (in seconds)") \ 286375801Siedowse \ 286475801Siedowse develop(intx, CounterDecayMinIntervalLength, 500, \ 286575801Siedowse "The minimum interval (in milliseconds) between invocation of " \ 286675801Siedowse "CounterDecay") \ 286774462Salfred \ 286875801Siedowse product(bool, AlwaysCompileLoopMethods, false, \ 286975801Siedowse "When using recompilation, never interpret methods " \ 287074462Salfred "containing loops") \ 287175801Siedowse \ 287275801Siedowse product(bool, DontCompileHugeMethods, true, \ 2873103949Smike "Do not compile methods > HugeMethodLimit") \ 287475801Siedowse \ 287574462Salfred /* Bytecode escape analysis estimation. */ \ 287675801Siedowse product(bool, EstimateArgEscape, true, \ 2877103949Smike "Analyze bytecodes to estimate escape state of arguments") \ 287875801Siedowse \ 287975801Siedowse product(intx, BCEATraceLevel, 0, \ 288074462Salfred "How much tracing to do of bytecode escape analysis estimates") \ 288175801Siedowse \ 288274462Salfred product(intx, MaxBCEAEstimateLevel, 5, \ 288374462Salfred "Maximum number of nested calls that are analyzed by BC EA") \ 288475801Siedowse \ 288575801Siedowse product(intx, MaxBCEAEstimateSize, 150, \ 288675801Siedowse "Maximum bytecode size of a method to be analyzed by BC EA") \ 288775801Siedowse \ 288875801Siedowse product(intx, AllocatePrefetchStyle, 1, \ 288975801Siedowse "0 = no prefetch, " \ 289074462Salfred "1 = prefetch instructions for each allocation, " \ 289175801Siedowse "2 = use TLAB watermark to gate allocation prefetch, " \ 289275801Siedowse "3 = use BIS instruction on Sparc for allocation prefetch") \ 289374462Salfred \ 289475801Siedowse product(intx, AllocatePrefetchDistance, -1, \ 289575801Siedowse "Distance to prefetch ahead of allocation pointer") \ 289675801Siedowse \ 289775801Siedowse product(intx, AllocatePrefetchLines, 3, \ 289875801Siedowse "Number of lines to prefetch ahead of array allocation pointer") \ 289975801Siedowse \ 290075801Siedowse product(intx, AllocateInstancePrefetchLines, 1, \ 290175801Siedowse "Number of lines to prefetch ahead of instance allocation " \ 290275801Siedowse "pointer") \ 290375801Siedowse \ 290474462Salfred product(intx, AllocatePrefetchStepSize, 16, \ 290575801Siedowse "Step size in bytes of sequential prefetch instructions") \ 290675801Siedowse \ 290775801Siedowse product(intx, AllocatePrefetchInstr, 0, \ 290875801Siedowse "Prefetch instruction to prefetch ahead of allocation pointer") \ 290974462Salfred \ 291074462Salfred /* deoptimization */ \ 291175801Siedowse develop(bool, TraceDeoptimization, false, \ 291275801Siedowse "Trace deoptimization") \ 291375801Siedowse \ 291475801Siedowse develop(bool, DebugDeoptimization, false, \ 291575801Siedowse "Tracing various information while debugging deoptimization") \ 291675801Siedowse \ 291775801Siedowse product(intx, SelfDestructTimer, 0, \ 291874462Salfred "Will cause VM to terminate after a given time (in minutes) " \ 291975801Siedowse "(0 means off)") \ 292075801Siedowse \ 292174462Salfred product(intx, MaxJavaStackTraceDepth, 1024, \ 292275801Siedowse "The maximum number of lines in the stack trace for Java " \ 292375801Siedowse "exceptions (0 means all)") \ 292475801Siedowse \ 292575801Siedowse NOT_EMBEDDED(diagnostic(intx, GuaranteedSafepointInterval, 1000, \ 292675801Siedowse "Guarantee a safepoint (at least) every so many milliseconds " \ 292775801Siedowse "(0 means none)")) \ 292874462Salfred \ 292975801Siedowse EMBEDDED_ONLY(product(intx, GuaranteedSafepointInterval, 0, \ 293075801Siedowse "Guarantee a safepoint (at least) every so many milliseconds " \ 293175801Siedowse "(0 means none)")) \ 293274462Salfred \ 293374462Salfred product(intx, SafepointTimeoutDelay, 10000, \ 293474462Salfred "Delay in milliseconds for option SafepointTimeout") \ 293575801Siedowse \ 293675801Siedowse product(intx, NmethodSweepActivity, 10, \ 293775801Siedowse "Removes cold nmethods from code cache if > 0. Higher values " \ 293874462Salfred "result in more aggressive sweeping") \ 293975801Siedowse \ 294075801Siedowse notproduct(bool, LogSweeper, false, \ 294175801Siedowse "Keep a ring buffer of sweeper activity") \ 294275801Siedowse \ 294374462Salfred notproduct(intx, SweeperLogEntries, 1024, \ 294475801Siedowse "Number of records in the ring buffer of sweeper activity") \ 294575801Siedowse \ 294675801Siedowse notproduct(intx, MemProfilingInterval, 500, \ 294775801Siedowse "Time between each invocation of the MemProfiler") \ 294874462Salfred \ 294974462Salfred develop(intx, MallocCatchPtr, -1, \ 295075801Siedowse "Hit breakpoint when mallocing/freeing this pointer") \ 295175801Siedowse \ 295275801Siedowse notproduct(ccstrlist, SuppressErrorAt, "", \ 295375801Siedowse "List of assertions (file:line) to muzzle") \ 295475801Siedowse \ 295575801Siedowse notproduct(size_t, HandleAllocationLimit, 1024, \ 295675801Siedowse "Threshold for HandleMark allocation when +TraceHandleAllocation "\ 295775801Siedowse "is used") \ 295874462Salfred \ 295974462Salfred develop(size_t, TotalHandleAllocationLimit, 1024, \ 296075801Siedowse "Threshold for total handle allocation when " \ 296174462Salfred "+TraceHandleAllocation is used") \ 296275801Siedowse \ 296375801Siedowse develop(intx, StackPrintLimit, 100, \ 296474462Salfred "number of stack frames to print in VM-level stack dump") \ 296574462Salfred \ 296675801Siedowse notproduct(intx, MaxElementPrintSize, 256, \ 296775801Siedowse "maximum number of elements to print") \ 296874462Salfred \ 296974462Salfred notproduct(intx, MaxSubklassPrintSize, 4, \ 297075801Siedowse "maximum number of subklasses to print when printing klass") \ 297175801Siedowse \ 297274462Salfred product(intx, MaxInlineLevel, 9, \ 297374462Salfred "maximum number of nested calls that are inlined") \ 297475801Siedowse \ 297575801Siedowse product(intx, MaxRecursiveInlineLevel, 1, \ 297675801Siedowse "maximum number of nested recursive calls that are inlined") \ 297774462Salfred \ 297874462Salfred develop(intx, MaxForceInlineLevel, 100, \ 297975754Siedowse "maximum number of nested calls that are forced for inlining " \ 2980216587Scharnier "(using CompilerOracle or marked w/ @ForceInline)") \ 298175754Siedowse \ 298275754Siedowse product_pd(intx, InlineSmallCode, \ 298375754Siedowse "Only inline already compiled methods if their code size is " \ 298475754Siedowse "less than this") \ 2985216587Scharnier \ 298674462Salfred product(intx, MaxInlineSize, 35, \ 2987149433Spjd "The maximum bytecode size of a method to be inlined") \ 2988194880Sdfr \ 2989194880Sdfr product_pd(intx, FreqInlineSize, \ 299074462Salfred "The maximum bytecode size of a frequent method to be inlined") \ 299174462Salfred \ 2992192934Srmacklem product(intx, MaxTrivialSize, 6, \ 2993 "The maximum bytecode size of a trivial method to be inlined") \ 2994 \ 2995 product(intx, MinInliningThreshold, 250, \ 2996 "The minimum invocation count a method needs to have to be " \ 2997 "inlined") \ 2998 \ 2999 develop(intx, MethodHistogramCutoff, 100, \ 3000 "The cutoff value for method invocation histogram (+CountCalls)") \ 3001 \ 3002 develop(intx, ProfilerNumberOfInterpretedMethods, 25, \ 3003 "Number of interpreted methods to show in profile") \ 3004 \ 3005 develop(intx, ProfilerNumberOfCompiledMethods, 25, \ 3006 "Number of compiled methods to show in profile") \ 3007 \ 3008 develop(intx, ProfilerNumberOfStubMethods, 25, \ 3009 "Number of stub methods to show in profile") \ 3010 \ 3011 develop(intx, ProfilerNumberOfRuntimeStubNodes, 25, \ 3012 "Number of runtime stub nodes to show in profile") \ 3013 \ 3014 product(intx, ProfileIntervalsTicks, 100, \ 3015 "Number of ticks between printing of interval profile " \ 3016 "(+ProfileIntervals)") \ 3017 \ 3018 notproduct(intx, ScavengeALotInterval, 1, \ 3019 "Interval between which scavenge will occur with +ScavengeALot") \ 3020 \ 3021 notproduct(intx, FullGCALotInterval, 1, \ 3022 "Interval between which full gc will occur with +FullGCALot") \ 3023 \ 3024 notproduct(intx, FullGCALotStart, 0, \ 3025 "For which invocation to start FullGCAlot") \ 3026 \ 3027 notproduct(intx, FullGCALotDummies, 32*K, \ 3028 "Dummy object allocated with +FullGCALot, forcing all objects " \ 3029 "to move") \ 3030 \ 3031 develop(intx, DontYieldALotInterval, 10, \ 3032 "Interval between which yields will be dropped (milliseconds)") \ 3033 \ 3034 develop(intx, MinSleepInterval, 1, \ 3035 "Minimum sleep() interval (milliseconds) when " \ 3036 "ConvertSleepToYield is off (used for Solaris)") \ 3037 \ 3038 develop(intx, ProfilerPCTickThreshold, 15, \ 3039 "Number of ticks in a PC buckets to be a hotspot") \ 3040 \ 3041 notproduct(intx, DeoptimizeALotInterval, 5, \ 3042 "Number of exits until DeoptimizeALot kicks in") \ 3043 \ 3044 notproduct(intx, ZombieALotInterval, 5, \ 3045 "Number of exits until ZombieALot kicks in") \ 3046 \ 3047 diagnostic(intx, MallocVerifyInterval, 0, \ 3048 "If non-zero, verify C heap after every N calls to " \ 3049 "malloc/realloc/free") \ 3050 \ 3051 diagnostic(intx, MallocVerifyStart, 0, \ 3052 "If non-zero, start verifying C heap after Nth call to " \ 3053 "malloc/realloc/free") \ 3054 \ 3055 diagnostic(uintx, MallocMaxTestWords, 0, \ 3056 "If non-zero, maximum number of words that malloc/realloc can " \ 3057 "allocate (for testing only)") \ 3058 \ 3059 product(intx, TypeProfileWidth, 2, \ 3060 "Number of receiver types to record in call/cast profile") \ 3061 \ 3062 develop(intx, BciProfileWidth, 2, \ 3063 "Number of return bci's to record in ret profile") \ 3064 \ 3065 product(intx, PerMethodRecompilationCutoff, 400, \ 3066 "After recompiling N times, stay in the interpreter (-1=>'Inf')") \ 3067 \ 3068 product(intx, PerBytecodeRecompilationCutoff, 200, \ 3069 "Per-BCI limit on repeated recompilation (-1=>'Inf')") \ 3070 \ 3071 product(intx, PerMethodTrapLimit, 100, \ 3072 "Limit on traps (of one kind) in a method (includes inlines)") \ 3073 \ 3074 experimental(intx, PerMethodSpecTrapLimit, 5000, \ 3075 "Limit on speculative traps (of one kind) in a method (includes inlines)") \ 3076 \ 3077 product(intx, PerBytecodeTrapLimit, 4, \ 3078 "Limit on traps (of one kind) at a particular BCI") \ 3079 \ 3080 experimental(intx, SpecTrapLimitExtraEntries, 3, \ 3081 "Extra method data trap entries for speculation") \ 3082 \ 3083 develop(intx, InlineFrequencyRatio, 20, \ 3084 "Ratio of call site execution to caller method invocation") \ 3085 \ 3086 develop_pd(intx, InlineFrequencyCount, \ 3087 "Count of call site execution necessary to trigger frequent " \ 3088 "inlining") \ 3089 \ 3090 develop(intx, InlineThrowCount, 50, \ 3091 "Force inlining of interpreted methods that throw this often") \ 3092 \ 3093 develop(intx, InlineThrowMaxSize, 200, \ 3094 "Force inlining of throwing methods smaller than this") \ 3095 \ 3096 develop(intx, ProfilerNodeSize, 1024, \ 3097 "Size in K to allocate for the Profile Nodes of each thread") \ 3098 \ 3099 product_pd(intx, PreInflateSpin, \ 3100 "Number of times to spin wait before inflation") \ 3101 \ 3102 /* gc parameters */ \ 3103 product(size_t, InitialHeapSize, 0, \ 3104 "Initial heap size (in bytes); zero means use ergonomics") \ 3105 \ 3106 product(size_t, MaxHeapSize, ScaleForWordSize(96*M), \ 3107 "Maximum heap size (in bytes)") \ 3108 \ 3109 product(size_t, OldSize, ScaleForWordSize(4*M), \ 3110 "Initial tenured generation size (in bytes)") \ 3111 \ 3112 product(size_t, NewSize, ScaleForWordSize(1*M), \ 3113 "Initial new generation size (in bytes)") \ 3114 \ 3115 product(size_t, MaxNewSize, max_uintx, \ 3116 "Maximum new generation size (in bytes), max_uintx means set " \ 3117 "ergonomically") \ 3118 \ 3119 product(size_t, PretenureSizeThreshold, 0, \ 3120 "Maximum size in bytes of objects allocated in DefNew " \ 3121 "generation; zero means no maximum") \ 3122 \ 3123 product(size_t, TLABSize, 0, \ 3124 "Starting TLAB size (in bytes); zero means set ergonomically") \ 3125 \ 3126 product(size_t, MinTLABSize, 2*K, \ 3127 "Minimum allowed TLAB size (in bytes)") \ 3128 \ 3129 product(uintx, TLABAllocationWeight, 35, \ 3130 "Allocation averaging weight") \ 3131 \ 3132 product(uintx, TLABWasteTargetPercent, 1, \ 3133 "Percentage of Eden that can be wasted") \ 3134 \ 3135 product(uintx, TLABRefillWasteFraction, 64, \ 3136 "Maximum TLAB waste at a refill (internal fragmentation)") \ 3137 \ 3138 product(uintx, TLABWasteIncrement, 4, \ 3139 "Increment allowed waste at slow allocation") \ 3140 \ 3141 product(uintx, SurvivorRatio, 8, \ 3142 "Ratio of eden/survivor space size") \ 3143 \ 3144 product(uintx, NewRatio, 2, \ 3145 "Ratio of old/new generation sizes") \ 3146 \ 3147 product_pd(size_t, NewSizeThreadIncrease, \ 3148 "Additional size added to desired new generation size per " \ 3149 "non-daemon thread (in bytes)") \ 3150 \ 3151 product_pd(size_t, MetaspaceSize, \ 3152 "Initial size of Metaspaces (in bytes)") \ 3153 \ 3154 product(size_t, MaxMetaspaceSize, max_uintx, \ 3155 "Maximum size of Metaspaces (in bytes)") \ 3156 \ 3157 product(size_t, CompressedClassSpaceSize, 1*G, \ 3158 "Maximum size of class area in Metaspace when compressed " \ 3159 "class pointers are used") \ 3160 \ 3161 manageable(uintx, MinHeapFreeRatio, 40, \ 3162 "The minimum percentage of heap free after GC to avoid expansion."\ 3163 " For most GCs this applies to the old generation. In G1 and" \ 3164 " ParallelGC it applies to the whole heap.") \ 3165 \ 3166 manageable(uintx, MaxHeapFreeRatio, 70, \ 3167 "The maximum percentage of heap free after GC to avoid shrinking."\ 3168 " For most GCs this applies to the old generation. In G1 and" \ 3169 " ParallelGC it applies to the whole heap.") \ 3170 \ 3171 product(intx, SoftRefLRUPolicyMSPerMB, 1000, \ 3172 "Number of milliseconds per MB of free space in the heap") \ 3173 \ 3174 product(size_t, MinHeapDeltaBytes, ScaleForWordSize(128*K), \ 3175 "The minimum change in heap space due to GC (in bytes)") \ 3176 \ 3177 product(size_t, MinMetaspaceExpansion, ScaleForWordSize(256*K), \ 3178 "The minimum expansion of Metaspace (in bytes)") \ 3179 \ 3180 product(uintx, MinMetaspaceFreeRatio, 40, \ 3181 "The minimum percentage of Metaspace free after GC to avoid " \ 3182 "expansion") \ 3183 \ 3184 product(uintx, MaxMetaspaceFreeRatio, 70, \ 3185 "The maximum percentage of Metaspace free after GC to avoid " \ 3186 "shrinking") \ 3187 \ 3188 product(size_t, MaxMetaspaceExpansion, ScaleForWordSize(4*M), \ 3189 "The maximum expansion of Metaspace without full GC (in bytes)") \ 3190 \ 3191 product(uintx, QueuedAllocationWarningCount, 0, \ 3192 "Number of times an allocation that queues behind a GC " \ 3193 "will retry before printing a warning") \ 3194 \ 3195 diagnostic(uintx, VerifyGCStartAt, 0, \ 3196 "GC invoke count where +VerifyBefore/AfterGC kicks in") \ 3197 \ 3198 diagnostic(intx, VerifyGCLevel, 0, \ 3199 "Generation level at which to start +VerifyBefore/AfterGC") \ 3200 \ 3201 product(uintx, MaxTenuringThreshold, 15, \ 3202 "Maximum value for tenuring threshold") \ 3203 \ 3204 product(uintx, InitialTenuringThreshold, 7, \ 3205 "Initial value for tenuring threshold") \ 3206 \ 3207 product(uintx, TargetSurvivorRatio, 50, \ 3208 "Desired percentage of survivor space used after scavenge") \ 3209 \ 3210 product(uintx, MarkSweepDeadRatio, 5, \ 3211 "Percentage (0-100) of the old gen allowed as dead wood. " \ 3212 "Serial mark sweep treats this as both the minimum and maximum " \ 3213 "value. " \ 3214 "CMS uses this value only if it falls back to mark sweep. " \ 3215 "Par compact uses a variable scale based on the density of the " \ 3216 "generation and treats this as the maximum value when the heap " \ 3217 "is either completely full or completely empty. Par compact " \ 3218 "also has a smaller default value; see arguments.cpp.") \ 3219 \ 3220 product(uintx, MarkSweepAlwaysCompactCount, 4, \ 3221 "How often should we fully compact the heap (ignoring the dead " \ 3222 "space parameters)") \ 3223 \ 3224 product(intx, PrintCMSStatistics, 0, \ 3225 "Statistics for CMS") \ 3226 \ 3227 product(bool, PrintCMSInitiationStatistics, false, \ 3228 "Statistics for initiating a CMS collection") \ 3229 \ 3230 product(intx, PrintFLSStatistics, 0, \ 3231 "Statistics for CMS' FreeListSpace") \ 3232 \ 3233 product(intx, PrintFLSCensus, 0, \ 3234 "Census for CMS' FreeListSpace") \ 3235 \ 3236 develop(uintx, GCExpandToAllocateDelayMillis, 0, \ 3237 "Delay between expansion and allocation (in milliseconds)") \ 3238 \ 3239 develop(uintx, GCWorkerDelayMillis, 0, \ 3240 "Delay in scheduling GC workers (in milliseconds)") \ 3241 \ 3242 product(intx, DeferThrSuspendLoopCount, 4000, \ 3243 "(Unstable) Number of times to iterate in safepoint loop " \ 3244 "before blocking VM threads ") \ 3245 \ 3246 product(intx, DeferPollingPageLoopCount, -1, \ 3247 "(Unsafe,Unstable) Number of iterations in safepoint loop " \ 3248 "before changing safepoint polling page to RO ") \ 3249 \ 3250 product(intx, SafepointSpinBeforeYield, 2000, "(Unstable)") \ 3251 \ 3252 product(bool, PSChunkLargeArrays, true, \ 3253 "Process large arrays in chunks") \ 3254 \ 3255 product(uintx, GCDrainStackTargetSize, 64, \ 3256 "Number of entries we will try to leave on the stack " \ 3257 "during parallel gc") \ 3258 \ 3259 /* stack parameters */ \ 3260 product_pd(intx, StackYellowPages, \ 3261 "Number of yellow zone (recoverable overflows) pages") \ 3262 \ 3263 product_pd(intx, StackRedPages, \ 3264 "Number of red zone (unrecoverable overflows) pages") \ 3265 \ 3266 product_pd(intx, StackShadowPages, \ 3267 "Number of shadow zone (for overflow checking) pages " \ 3268 "this should exceed the depth of the VM and native call stack") \ 3269 \ 3270 product_pd(intx, ThreadStackSize, \ 3271 "Thread Stack Size (in Kbytes)") \ 3272 \ 3273 product_pd(intx, VMThreadStackSize, \ 3274 "Non-Java Thread Stack Size (in Kbytes)") \ 3275 \ 3276 product_pd(intx, CompilerThreadStackSize, \ 3277 "Compiler Thread Stack Size (in Kbytes)") \ 3278 \ 3279 develop_pd(size_t, JVMInvokeMethodSlack, \ 3280 "Stack space (bytes) required for JVM_InvokeMethod to complete") \ 3281 \ 3282 product(size_t, ThreadSafetyMargin, 50*M, \ 3283 "Thread safety margin is used on fixed-stack LinuxThreads (on " \ 3284 "Linux/x86 only) to prevent heap-stack collision. Set to 0 to " \ 3285 "disable this feature") \ 3286 \ 3287 /* code cache parameters */ \ 3288 /* ppc64/tiered compilation has large code-entry alignment. */ \ 3289 develop(uintx, CodeCacheSegmentSize, 64 PPC64_ONLY(+64) NOT_PPC64(TIERED_ONLY(+64)),\ 3290 "Code cache segment size (in bytes) - smallest unit of " \ 3291 "allocation") \ 3292 \ 3293 develop_pd(intx, CodeEntryAlignment, \ 3294 "Code entry alignment for generated code (in bytes)") \ 3295 \ 3296 product_pd(intx, OptoLoopAlignment, \ 3297 "Align inner loops to zero relative to this modulus") \ 3298 \ 3299 product_pd(uintx, InitialCodeCacheSize, \ 3300 "Initial code cache size (in bytes)") \ 3301 \ 3302 develop_pd(uintx, CodeCacheMinimumUseSpace, \ 3303 "Minimum code cache size (in bytes) required to start VM.") \ 3304 \ 3305 product(bool, SegmentedCodeCache, false, \ 3306 "Use a segmented code cache") \ 3307 \ 3308 product_pd(uintx, ReservedCodeCacheSize, \ 3309 "Reserved code cache size (in bytes) - maximum code cache size") \ 3310 \ 3311 product_pd(uintx, NonProfiledCodeHeapSize, \ 3312 "Size of code heap with non-profiled methods (in bytes)") \ 3313 \ 3314 product_pd(uintx, ProfiledCodeHeapSize, \ 3315 "Size of code heap with profiled methods (in bytes)") \ 3316 \ 3317 product_pd(uintx, NonNMethodCodeHeapSize, \ 3318 "Size of code heap with non-nmethods (in bytes)") \ 3319 \ 3320 product_pd(uintx, CodeCacheExpansionSize, \ 3321 "Code cache expansion size (in bytes)") \ 3322 \ 3323 develop_pd(uintx, CodeCacheMinBlockLength, \ 3324 "Minimum number of segments in a code cache block") \ 3325 \ 3326 notproduct(bool, ExitOnFullCodeCache, false, \ 3327 "Exit the VM if we fill the code cache") \ 3328 \ 3329 product(bool, UseCodeCacheFlushing, true, \ 3330 "Remove cold/old nmethods from the code cache") \ 3331 \ 3332 product(uintx, StartAggressiveSweepingAt, 10, \ 3333 "Start aggressive sweeping if X[%] of the code cache is free." \ 3334 "Segmented code cache: X[%] of the non-profiled heap." \ 3335 "Non-segmented code cache: X[%] of the total code cache") \ 3336 \ 3337 /* interpreter debugging */ \ 3338 develop(intx, BinarySwitchThreshold, 5, \ 3339 "Minimal number of lookupswitch entries for rewriting to binary " \ 3340 "switch") \ 3341 \ 3342 develop(intx, StopInterpreterAt, 0, \ 3343 "Stop interpreter execution at specified bytecode number") \ 3344 \ 3345 develop(intx, TraceBytecodesAt, 0, \ 3346 "Trace bytecodes starting with specified bytecode number") \ 3347 \ 3348 /* compiler interface */ \ 3349 develop(intx, CIStart, 0, \ 3350 "The id of the first compilation to permit") \ 3351 \ 3352 develop(intx, CIStop, max_jint, \ 3353 "The id of the last compilation to permit") \ 3354 \ 3355 develop(intx, CIStartOSR, 0, \ 3356 "The id of the first osr compilation to permit " \ 3357 "(CICountOSR must be on)") \ 3358 \ 3359 develop(intx, CIStopOSR, max_jint, \ 3360 "The id of the last osr compilation to permit " \ 3361 "(CICountOSR must be on)") \ 3362 \ 3363 develop(intx, CIBreakAtOSR, -1, \ 3364 "The id of osr compilation to break at") \ 3365 \ 3366 develop(intx, CIBreakAt, -1, \ 3367 "The id of compilation to break at") \ 3368 \ 3369 product(ccstrlist, CompileOnly, "", \ 3370 "List of methods (pkg/class.name) to restrict compilation to") \ 3371 \ 3372 product(ccstr, CompileCommandFile, NULL, \ 3373 "Read compiler commands from this file [.hotspot_compiler]") \ 3374 \ 3375 product(ccstrlist, CompileCommand, "", \ 3376 "Prepend to .hotspot_compiler; e.g. log,java/lang/String.<init>") \ 3377 \ 3378 develop(bool, ReplayCompiles, false, \ 3379 "Enable replay of compilations from ReplayDataFile") \ 3380 \ 3381 product(ccstr, ReplayDataFile, NULL, \ 3382 "File containing compilation replay information" \ 3383 "[default: ./replay_pid%p.log] (%p replaced with pid)") \ 3384 \ 3385 product(ccstr, InlineDataFile, NULL, \ 3386 "File containing inlining replay information" \ 3387 "[default: ./inline_pid%p.log] (%p replaced with pid)") \ 3388 \ 3389 develop(intx, ReplaySuppressInitializers, 2, \ 3390 "Control handling of class initialization during replay: " \ 3391 "0 - don't do anything special; " \ 3392 "1 - treat all class initializers as empty; " \ 3393 "2 - treat class initializers for application classes as empty; " \ 3394 "3 - allow all class initializers to run during bootstrap but " \ 3395 " pretend they are empty after starting replay") \ 3396 \ 3397 develop(bool, ReplayIgnoreInitErrors, false, \ 3398 "Ignore exceptions thrown during initialization for replay") \ 3399 \ 3400 product(bool, DumpReplayDataOnError, true, \ 3401 "Record replay data for crashing compiler threads") \ 3402 \ 3403 product(bool, CICompilerCountPerCPU, false, \ 3404 "1 compiler thread for log(N CPUs)") \ 3405 \ 3406 develop(intx, CIFireOOMAt, -1, \ 3407 "Fire OutOfMemoryErrors throughout CI for testing the compiler " \ 3408 "(non-negative value throws OOM after this many CI accesses " \ 3409 "in each compile)") \ 3410 notproduct(intx, CICrashAt, -1, \ 3411 "id of compilation to trigger assert in compiler thread for " \ 3412 "the purpose of testing, e.g. generation of replay data") \ 3413 notproduct(bool, CIObjectFactoryVerify, false, \ 3414 "enable potentially expensive verification in ciObjectFactory") \ 3415 \ 3416 /* Priorities */ \ 3417 product_pd(bool, UseThreadPriorities, "Use native thread priorities") \ 3418 \ 3419 product(intx, ThreadPriorityPolicy, 0, \ 3420 "0 : Normal. "\ 3421 " VM chooses priorities that are appropriate for normal "\ 3422 " applications. On Solaris NORM_PRIORITY and above are mapped "\ 3423 " to normal native priority. Java priorities below " \ 3424 " NORM_PRIORITY map to lower native priority values. On "\ 3425 " Windows applications are allowed to use higher native "\ 3426 " priorities. However, with ThreadPriorityPolicy=0, VM will "\ 3427 " not use the highest possible native priority, "\ 3428 " THREAD_PRIORITY_TIME_CRITICAL, as it may interfere with "\ 3429 " system threads. On Linux thread priorities are ignored "\ 3430 " because the OS does not support static priority in "\ 3431 " SCHED_OTHER scheduling class which is the only choice for "\ 3432 " non-root, non-realtime applications. "\ 3433 "1 : Aggressive. "\ 3434 " Java thread priorities map over to the entire range of "\ 3435 " native thread priorities. Higher Java thread priorities map "\ 3436 " to higher native thread priorities. This policy should be "\ 3437 " used with care, as sometimes it can cause performance "\ 3438 " degradation in the application and/or the entire system. On "\ 3439 " Linux this policy requires root privilege.") \ 3440 \ 3441 product(bool, ThreadPriorityVerbose, false, \ 3442 "Print priority changes") \ 3443 \ 3444 product(intx, DefaultThreadPriority, -1, \ 3445 "The native priority at which threads run if not elsewhere " \ 3446 "specified (-1 means no change)") \ 3447 \ 3448 product(intx, CompilerThreadPriority, -1, \ 3449 "The native priority at which compiler threads should run " \ 3450 "(-1 means no change)") \ 3451 \ 3452 product(intx, VMThreadPriority, -1, \ 3453 "The native priority at which the VM thread should run " \ 3454 "(-1 means no change)") \ 3455 \ 3456 product(bool, CompilerThreadHintNoPreempt, true, \ 3457 "(Solaris only) Give compiler threads an extra quanta") \ 3458 \ 3459 product(bool, VMThreadHintNoPreempt, false, \ 3460 "(Solaris only) Give VM thread an extra quanta") \ 3461 \ 3462 product(intx, JavaPriority1_To_OSPriority, -1, \ 3463 "Map Java priorities to OS priorities") \ 3464 \ 3465 product(intx, JavaPriority2_To_OSPriority, -1, \ 3466 "Map Java priorities to OS priorities") \ 3467 \ 3468 product(intx, JavaPriority3_To_OSPriority, -1, \ 3469 "Map Java priorities to OS priorities") \ 3470 \ 3471 product(intx, JavaPriority4_To_OSPriority, -1, \ 3472 "Map Java priorities to OS priorities") \ 3473 \ 3474 product(intx, JavaPriority5_To_OSPriority, -1, \ 3475 "Map Java priorities to OS priorities") \ 3476 \ 3477 product(intx, JavaPriority6_To_OSPriority, -1, \ 3478 "Map Java priorities to OS priorities") \ 3479 \ 3480 product(intx, JavaPriority7_To_OSPriority, -1, \ 3481 "Map Java priorities to OS priorities") \ 3482 \ 3483 product(intx, JavaPriority8_To_OSPriority, -1, \ 3484 "Map Java priorities to OS priorities") \ 3485 \ 3486 product(intx, JavaPriority9_To_OSPriority, -1, \ 3487 "Map Java priorities to OS priorities") \ 3488 \ 3489 product(intx, JavaPriority10_To_OSPriority,-1, \ 3490 "Map Java priorities to OS priorities") \ 3491 \ 3492 experimental(bool, UseCriticalJavaThreadPriority, false, \ 3493 "Java thread priority 10 maps to critical scheduling priority") \ 3494 \ 3495 experimental(bool, UseCriticalCompilerThreadPriority, false, \ 3496 "Compiler thread(s) run at critical scheduling priority") \ 3497 \ 3498 experimental(bool, UseCriticalCMSThreadPriority, false, \ 3499 "ConcurrentMarkSweep thread runs at critical scheduling priority")\ 3500 \ 3501 /* compiler debugging */ \ 3502 notproduct(intx, CompileTheWorldStartAt, 1, \ 3503 "First class to consider when using +CompileTheWorld") \ 3504 \ 3505 notproduct(intx, CompileTheWorldStopAt, max_jint, \ 3506 "Last class to consider when using +CompileTheWorld") \ 3507 \ 3508 develop(intx, NewCodeParameter, 0, \ 3509 "Testing Only: Create a dedicated integer parameter before " \ 3510 "putback") \ 3511 \ 3512 /* new oopmap storage allocation */ \ 3513 develop(intx, MinOopMapAllocation, 8, \ 3514 "Minimum number of OopMap entries in an OopMapSet") \ 3515 \ 3516 /* Background Compilation */ \ 3517 develop(intx, LongCompileThreshold, 50, \ 3518 "Used with +TraceLongCompiles") \ 3519 \ 3520 product(intx, StarvationMonitorInterval, 200, \ 3521 "Pause between each check (in milliseconds)") \ 3522 \ 3523 /* recompilation */ \ 3524 product_pd(intx, CompileThreshold, \ 3525 "number of interpreted method invocations before (re-)compiling") \ 3526 \ 3527 product(double, CompileThresholdScaling, 1.0, \ 3528 "Factor to control when first compilation happens " \ 3529 "(both with and without tiered compilation): " \ 3530 "values greater than 1.0 delay counter overflow, " \ 3531 "values between 0 and 1.0 rush counter overflow, " \ 3532 "value of 1.0 leaves compilation thresholds unchanged " \ 3533 "value of 0.0 is equivalent to -Xint. " \ 3534 "" \ 3535 "Flag can be set as per-method option. " \ 3536 "If a value is specified for a method, compilation thresholds " \ 3537 "for that method are scaled by both the value of the global flag "\ 3538 "and the value of the per-method flag.") \ 3539 \ 3540 product(intx, Tier0InvokeNotifyFreqLog, 7, \ 3541 "Interpreter (tier 0) invocation notification frequency") \ 3542 \ 3543 product(intx, Tier2InvokeNotifyFreqLog, 11, \ 3544 "C1 without MDO (tier 2) invocation notification frequency") \ 3545 \ 3546 product(intx, Tier3InvokeNotifyFreqLog, 10, \ 3547 "C1 with MDO profiling (tier 3) invocation notification " \ 3548 "frequency") \ 3549 \ 3550 product(intx, Tier23InlineeNotifyFreqLog, 20, \ 3551 "Inlinee invocation (tiers 2 and 3) notification frequency") \ 3552 \ 3553 product(intx, Tier0BackedgeNotifyFreqLog, 10, \ 3554 "Interpreter (tier 0) invocation notification frequency") \ 3555 \ 3556 product(intx, Tier2BackedgeNotifyFreqLog, 14, \ 3557 "C1 without MDO (tier 2) invocation notification frequency") \ 3558 \ 3559 product(intx, Tier3BackedgeNotifyFreqLog, 13, \ 3560 "C1 with MDO profiling (tier 3) invocation notification " \ 3561 "frequency") \ 3562 \ 3563 product(intx, Tier2CompileThreshold, 0, \ 3564 "threshold at which tier 2 compilation is invoked") \ 3565 \ 3566 product(intx, Tier2BackEdgeThreshold, 0, \ 3567 "Back edge threshold at which tier 2 compilation is invoked") \ 3568 \ 3569 product(intx, Tier3InvocationThreshold, 200, \ 3570 "Compile if number of method invocations crosses this " \ 3571 "threshold") \ 3572 \ 3573 product(intx, Tier3MinInvocationThreshold, 100, \ 3574 "Minimum invocation to compile at tier 3") \ 3575 \ 3576 product(intx, Tier3CompileThreshold, 2000, \ 3577 "Threshold at which tier 3 compilation is invoked (invocation " \ 3578 "minimum must be satisfied") \ 3579 \ 3580 product(intx, Tier3BackEdgeThreshold, 60000, \ 3581 "Back edge threshold at which tier 3 OSR compilation is invoked") \ 3582 \ 3583 product(intx, Tier4InvocationThreshold, 5000, \ 3584 "Compile if number of method invocations crosses this " \ 3585 "threshold") \ 3586 \ 3587 product(intx, Tier4MinInvocationThreshold, 600, \ 3588 "Minimum invocation to compile at tier 4") \ 3589 \ 3590 product(intx, Tier4CompileThreshold, 15000, \ 3591 "Threshold at which tier 4 compilation is invoked (invocation " \ 3592 "minimum must be satisfied") \ 3593 \ 3594 product(intx, Tier4BackEdgeThreshold, 40000, \ 3595 "Back edge threshold at which tier 4 OSR compilation is invoked") \ 3596 \ 3597 product(intx, Tier3DelayOn, 5, \ 3598 "If C2 queue size grows over this amount per compiler thread " \ 3599 "stop compiling at tier 3 and start compiling at tier 2") \ 3600 \ 3601 product(intx, Tier3DelayOff, 2, \ 3602 "If C2 queue size is less than this amount per compiler thread " \ 3603 "allow methods compiled at tier 2 transition to tier 3") \ 3604 \ 3605 product(intx, Tier3LoadFeedback, 5, \ 3606 "Tier 3 thresholds will increase twofold when C1 queue size " \ 3607 "reaches this amount per compiler thread") \ 3608 \ 3609 product(intx, Tier4LoadFeedback, 3, \ 3610 "Tier 4 thresholds will increase twofold when C2 queue size " \ 3611 "reaches this amount per compiler thread") \ 3612 \ 3613 product(intx, TieredCompileTaskTimeout, 50, \ 3614 "Kill compile task if method was not used within " \ 3615 "given timeout in milliseconds") \ 3616 \ 3617 product(intx, TieredStopAtLevel, 4, \ 3618 "Stop at given compilation level") \ 3619 \ 3620 product(intx, Tier0ProfilingStartPercentage, 200, \ 3621 "Start profiling in interpreter if the counters exceed tier 3 " \ 3622 "thresholds by the specified percentage") \ 3623 \ 3624 product(uintx, IncreaseFirstTierCompileThresholdAt, 50, \ 3625 "Increase the compile threshold for C1 compilation if the code " \ 3626 "cache is filled by the specified percentage") \ 3627 \ 3628 product(intx, TieredRateUpdateMinTime, 1, \ 3629 "Minimum rate sampling interval (in milliseconds)") \ 3630 \ 3631 product(intx, TieredRateUpdateMaxTime, 25, \ 3632 "Maximum rate sampling interval (in milliseconds)") \ 3633 \ 3634 product_pd(bool, TieredCompilation, \ 3635 "Enable tiered compilation") \ 3636 \ 3637 product(bool, PrintTieredEvents, false, \ 3638 "Print tiered events notifications") \ 3639 \ 3640 product_pd(intx, OnStackReplacePercentage, \ 3641 "NON_TIERED number of method invocations/branches (expressed as " \ 3642 "% of CompileThreshold) before (re-)compiling OSR code") \ 3643 \ 3644 product(intx, InterpreterProfilePercentage, 33, \ 3645 "NON_TIERED number of method invocations/branches (expressed as " \ 3646 "% of CompileThreshold) before profiling in the interpreter") \ 3647 \ 3648 develop(intx, MaxRecompilationSearchLength, 10, \ 3649 "The maximum number of frames to inspect when searching for " \ 3650 "recompilee") \ 3651 \ 3652 develop(intx, MaxInterpretedSearchLength, 3, \ 3653 "The maximum number of interpreted frames to skip when searching "\ 3654 "for recompilee") \ 3655 \ 3656 develop(intx, DesiredMethodLimit, 8000, \ 3657 "The desired maximum method size (in bytecodes) after inlining") \ 3658 \ 3659 develop(intx, HugeMethodLimit, 8000, \ 3660 "Don't compile methods larger than this if " \ 3661 "+DontCompileHugeMethods") \ 3662 \ 3663 /* New JDK 1.4 reflection implementation */ \ 3664 \ 3665 develop(intx, FastSuperclassLimit, 8, \ 3666 "Depth of hardwired instanceof accelerator array") \ 3667 \ 3668 /* Properties for Java libraries */ \ 3669 \ 3670 product(size_t, MaxDirectMemorySize, 0, \ 3671 "Maximum total size of NIO direct-buffer allocations") \ 3672 \ 3673 /* Flags used for temporary code during development */ \ 3674 \ 3675 diagnostic(bool, UseNewCode, false, \ 3676 "Testing Only: Use the new version while testing") \ 3677 \ 3678 diagnostic(bool, UseNewCode2, false, \ 3679 "Testing Only: Use the new version while testing") \ 3680 \ 3681 diagnostic(bool, UseNewCode3, false, \ 3682 "Testing Only: Use the new version while testing") \ 3683 \ 3684 /* flags for performance data collection */ \ 3685 \ 3686 product(bool, UsePerfData, falseInEmbedded, \ 3687 "Flag to disable jvmstat instrumentation for performance testing "\ 3688 "and problem isolation purposes") \ 3689 \ 3690 product(bool, PerfDataSaveToFile, false, \ 3691 "Save PerfData memory to hsperfdata_<pid> file on exit") \ 3692 \ 3693 product(ccstr, PerfDataSaveFile, NULL, \ 3694 "Save PerfData memory to the specified absolute pathname. " \ 3695 "The string %p in the file name (if present) " \ 3696 "will be replaced by pid") \ 3697 \ 3698 product(intx, PerfDataSamplingInterval, 50, \ 3699 "Data sampling interval (in milliseconds)") \ 3700 \ 3701 develop(bool, PerfTraceDataCreation, false, \ 3702 "Trace creation of Performance Data Entries") \ 3703 \ 3704 develop(bool, PerfTraceMemOps, false, \ 3705 "Trace PerfMemory create/attach/detach calls") \ 3706 \ 3707 product(bool, PerfDisableSharedMem, false, \ 3708 "Store performance data in standard memory") \ 3709 \ 3710 product(intx, PerfDataMemorySize, 32*K, \ 3711 "Size of performance data memory region. Will be rounded " \ 3712 "up to a multiple of the native os page size.") \ 3713 \ 3714 product(intx, PerfMaxStringConstLength, 1024, \ 3715 "Maximum PerfStringConstant string length before truncation") \ 3716 \ 3717 product(bool, PerfAllowAtExitRegistration, false, \ 3718 "Allow registration of atexit() methods") \ 3719 \ 3720 product(bool, PerfBypassFileSystemCheck, false, \ 3721 "Bypass Win32 file system criteria checks (Windows Only)") \ 3722 \ 3723 product(intx, UnguardOnExecutionViolation, 0, \ 3724 "Unguard page and retry on no-execute fault (Win32 only) " \ 3725 "0=off, 1=conservative, 2=aggressive") \ 3726 \ 3727 /* Serviceability Support */ \ 3728 \ 3729 product(bool, ManagementServer, false, \ 3730 "Create JMX Management Server") \ 3731 \ 3732 product(bool, DisableAttachMechanism, false, \ 3733 "Disable mechanism that allows tools to attach to this VM") \ 3734 \ 3735 product(bool, StartAttachListener, false, \ 3736 "Always start Attach Listener at VM startup") \ 3737 \ 3738 manageable(bool, PrintConcurrentLocks, false, \ 3739 "Print java.util.concurrent locks in thread dump") \ 3740 \ 3741 product(bool, TransmitErrorReport, false, \ 3742 "Enable error report transmission on erroneous termination") \ 3743 \ 3744 product(ccstr, ErrorReportServer, NULL, \ 3745 "Override built-in error report server address") \ 3746 \ 3747 /* Shared spaces */ \ 3748 \ 3749 product(bool, UseSharedSpaces, true, \ 3750 "Use shared spaces for metadata") \ 3751 \ 3752 product(bool, VerifySharedSpaces, false, \ 3753 "Verify shared spaces (false for default archive, true for " \ 3754 "archive specified by -XX:SharedArchiveFile)") \ 3755 \ 3756 product(bool, RequireSharedSpaces, false, \ 3757 "Require shared spaces for metadata") \ 3758 \ 3759 product(bool, DumpSharedSpaces, false, \ 3760 "Special mode: JVM reads a class list, loads classes, builds " \ 3761 "shared spaces, and dumps the shared spaces to a file to be " \ 3762 "used in future JVM runs") \ 3763 \ 3764 product(bool, PrintSharedSpaces, false, \ 3765 "Print usage of shared spaces") \ 3766 \ 3767 product(bool, PrintSharedArchiveAndExit, false, \ 3768 "Print shared archive file contents") \ 3769 \ 3770 product(bool, PrintSharedDictionary, false, \ 3771 "If PrintSharedArchiveAndExit is true, also print the shared " \ 3772 "dictionary") \ 3773 \ 3774 product(size_t, SharedReadWriteSize, NOT_LP64(12*M) LP64_ONLY(16*M), \ 3775 "Size of read-write space for metadata (in bytes)") \ 3776 \ 3777 product(size_t, SharedReadOnlySize, NOT_LP64(12*M) LP64_ONLY(16*M), \ 3778 "Size of read-only space for metadata (in bytes)") \ 3779 \ 3780 product(uintx, SharedMiscDataSize, NOT_LP64(2*M) LP64_ONLY(4*M), \ 3781 "Size of the shared miscellaneous data area (in bytes)") \ 3782 \ 3783 product(uintx, SharedMiscCodeSize, 120*K, \ 3784 "Size of the shared miscellaneous code area (in bytes)") \ 3785 \ 3786 product(uintx, SharedBaseAddress, LP64_ONLY(32*G) \ 3787 NOT_LP64(LINUX_ONLY(2*G) NOT_LINUX(0)), \ 3788 "Address to allocate shared memory region for class data") \ 3789 \ 3790 product(uintx, SharedSymbolTableBucketSize, 4, \ 3791 "Average number of symbols per bucket in shared table") \ 3792 \ 3793 diagnostic(bool, IgnoreUnverifiableClassesDuringDump, false, \ 3794 "Do not quit -Xshare:dump even if we encounter unverifiable " \ 3795 "classes. Just exclude them from the shared dictionary.") \ 3796 \ 3797 diagnostic(bool, PrintMethodHandleStubs, false, \ 3798 "Print generated stub code for method handles") \ 3799 \ 3800 develop(bool, TraceMethodHandles, false, \ 3801 "trace internal method handle operations") \ 3802 \ 3803 diagnostic(bool, VerifyMethodHandles, trueInDebug, \ 3804 "perform extra checks when constructing method handles") \ 3805 \ 3806 diagnostic(bool, ShowHiddenFrames, false, \ 3807 "show method handle implementation frames (usually hidden)") \ 3808 \ 3809 experimental(bool, TrustFinalNonStaticFields, false, \ 3810 "trust final non-static declarations for constant folding") \ 3811 \ 3812 diagnostic(bool, FoldStableValues, true, \ 3813 "Optimize loads from stable fields (marked w/ @Stable)") \ 3814 \ 3815 develop(bool, TraceInvokeDynamic, false, \ 3816 "trace internal invoke dynamic operations") \ 3817 \ 3818 diagnostic(bool, PauseAtStartup, false, \ 3819 "Causes the VM to pause at startup time and wait for the pause " \ 3820 "file to be removed (default: ./vm.paused.<pid>)") \ 3821 \ 3822 diagnostic(ccstr, PauseAtStartupFile, NULL, \ 3823 "The file to create and for whose removal to await when pausing " \ 3824 "at startup. (default: ./vm.paused.<pid>)") \ 3825 \ 3826 diagnostic(bool, PauseAtExit, false, \ 3827 "Pause and wait for keypress on exit if a debugger is attached") \ 3828 \ 3829 product(bool, ExtendedDTraceProbes, false, \ 3830 "Enable performance-impacting dtrace probes") \ 3831 \ 3832 product(bool, DTraceMethodProbes, false, \ 3833 "Enable dtrace probes for method-entry and method-exit") \ 3834 \ 3835 product(bool, DTraceAllocProbes, false, \ 3836 "Enable dtrace probes for object allocation") \ 3837 \ 3838 product(bool, DTraceMonitorProbes, false, \ 3839 "Enable dtrace probes for monitor events") \ 3840 \ 3841 product(bool, RelaxAccessControlCheck, false, \ 3842 "Relax the access control checks in the verifier") \ 3843 \ 3844 product(uintx, StringTableSize, defaultStringTableSize, \ 3845 "Number of buckets in the interned String table") \ 3846 \ 3847 experimental(uintx, SymbolTableSize, defaultSymbolTableSize, \ 3848 "Number of buckets in the JVM internal Symbol table") \ 3849 \ 3850 product(bool, UseStringDeduplication, false, \ 3851 "Use string deduplication") \ 3852 \ 3853 product(bool, PrintStringDeduplicationStatistics, false, \ 3854 "Print string deduplication statistics") \ 3855 \ 3856 product(uintx, StringDeduplicationAgeThreshold, 3, \ 3857 "A string must reach this age (or be promoted to an old region) " \ 3858 "to be considered for deduplication") \ 3859 \ 3860 diagnostic(bool, StringDeduplicationResizeALot, false, \ 3861 "Force table resize every time the table is scanned") \ 3862 \ 3863 diagnostic(bool, StringDeduplicationRehashALot, false, \ 3864 "Force table rehash every time the table is scanned") \ 3865 \ 3866 develop(bool, TraceDefaultMethods, false, \ 3867 "Trace the default method processing steps") \ 3868 \ 3869 develop(bool, VerifyGenericSignatures, false, \ 3870 "Abort VM on erroneous or inconsistent generic signatures") \ 3871 \ 3872 diagnostic(bool, WhiteBoxAPI, false, \ 3873 "Enable internal testing APIs") \ 3874 \ 3875 product(bool, PrintGCCause, true, \ 3876 "Include GC cause in GC logging") \ 3877 \ 3878 experimental(intx, SurvivorAlignmentInBytes, 0, \ 3879 "Default survivor space alignment in bytes") \ 3880 \ 3881 product(bool , AllowNonVirtualCalls, false, \ 3882 "Obey the ACC_SUPER flag and allow invokenonvirtual calls") \ 3883 \ 3884 product(ccstr, DumpLoadedClassList, NULL, \ 3885 "Dump the names all loaded classes, that could be stored into " \ 3886 "the CDS archive, in the specified file") \ 3887 \ 3888 product(ccstr, SharedClassListFile, NULL, \ 3889 "Override the default CDS class list") \ 3890 \ 3891 diagnostic(ccstr, SharedArchiveFile, NULL, \ 3892 "Override the default location of the CDS archive file") \ 3893 \ 3894 product(ccstr, ExtraSharedClassListFile, NULL, \ 3895 "Extra classlist for building the CDS archive file") \ 3896 \ 3897 experimental(size_t, ArrayAllocatorMallocLimit, \ 3898 SOLARIS_ONLY(64*K) NOT_SOLARIS((size_t)-1), \ 3899 "Allocation less than this value will be allocated " \ 3900 "using malloc. Larger allocations will use mmap.") \ 3901 \ 3902 experimental(bool, AlwaysAtomicAccesses, false, \ 3903 "Accesses to all variables should always be atomic") \ 3904 \ 3905 product(bool, EnableTracing, false, \ 3906 "Enable event-based tracing") \ 3907 \ 3908 product(bool, UseLockedTracing, false, \ 3909 "Use locked-tracing when doing event-based tracing") 3910 3911/* 3912 * Macros for factoring of globals 3913 */ 3914 3915// Interface macros 3916#define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3917#define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name; 3918#define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name; 3919#define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name; 3920#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name; 3921#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name; 3922#ifdef PRODUCT 3923#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type CONST_##name; const type name = value; 3924#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type CONST_##name; const type name = pd_##name; 3925#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type CONST_##name; 3926#else 3927#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name; 3928#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name; 3929#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3930#endif 3931// Special LP64 flags, product only needed for now. 3932#ifdef _LP64 3933#define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 3934#else 3935#define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) const type name = value; 3936#endif // _LP64 3937 3938// Implementation macros 3939#define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value; 3940#define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name; 3941#define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value; 3942#define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value; 3943#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value; 3944#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value; 3945#ifdef PRODUCT 3946#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type CONST_##name = value; 3947#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type CONST_##name = pd_##name; 3948#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type CONST_##name = value; 3949#else 3950#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value; 3951#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name; 3952#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value; 3953#endif 3954#ifdef _LP64 3955#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value; 3956#else 3957#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */ 3958#endif // _LP64 3959 3960RUNTIME_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) 3961 3962RUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG) 3963 3964ARCH_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG) 3965 3966// Extensions 3967 3968#include "runtime/globals_ext.hpp" 3969 3970#endif // SHARE_VM_RUNTIME_GLOBALS_HPP 3971