globals.hpp revision 4419:754c24457b20
1132718Skan/* 2132718Skan * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 3169689Skan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 450397Sobrien * 550397Sobrien * This code is free software; you can redistribute it and/or modify it 650397Sobrien * under the terms of the GNU General Public License version 2 only, as 750397Sobrien * published by the Free Software Foundation. 890075Sobrien * 950397Sobrien * This code is distributed in the hope that it will be useful, but WITHOUT 1090075Sobrien * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1190075Sobrien * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1290075Sobrien * version 2 for more details (a copy is included in the LICENSE file that 1390075Sobrien * accompanied this code). 1450397Sobrien * 1590075Sobrien * You should have received a copy of the GNU General Public License version 1690075Sobrien * 2 along with this work; if not, write to the Free Software Foundation, 1790075Sobrien * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1890075Sobrien * 1950397Sobrien * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2050397Sobrien * or visit www.oracle.com if you need additional information or have any 2190075Sobrien * questions. 22169689Skan * 23169689Skan */ 2450397Sobrien 2590075Sobrien#ifndef SHARE_VM_RUNTIME_GLOBALS_HPP 2690075Sobrien#define SHARE_VM_RUNTIME_GLOBALS_HPP 2790075Sobrien 2890075Sobrien#include "utilities/debug.hpp" 2990075Sobrien 3090075Sobrien// use this for flags that are true per default in the tiered build 3150397Sobrien// but false in non-tiered builds, and vice versa 3250397Sobrien#ifdef TIERED 3350397Sobrien#define trueInTiered true 3450397Sobrien#define falseInTiered false 3550397Sobrien#else 3650397Sobrien#define trueInTiered false 3750397Sobrien#define falseInTiered true 3850397Sobrien#endif 39132718Skan 40132718Skan#ifdef TARGET_ARCH_x86 4150397Sobrien# include "globals_x86.hpp" 42169689Skan#endif 4350397Sobrien#ifdef TARGET_ARCH_sparc 44117395Skan# include "globals_sparc.hpp" 4550397Sobrien#endif 4650397Sobrien#ifdef TARGET_ARCH_zero 4750397Sobrien# include "globals_zero.hpp" 4850397Sobrien#endif 4950397Sobrien#ifdef TARGET_ARCH_arm 5090075Sobrien# include "globals_arm.hpp" 5150397Sobrien#endif 5250397Sobrien#ifdef TARGET_ARCH_ppc 5390075Sobrien# include "globals_ppc.hpp" 5450397Sobrien#endif 5550397Sobrien#ifdef TARGET_OS_FAMILY_linux 5650397Sobrien# include "globals_linux.hpp" 5790075Sobrien#endif 5850397Sobrien#ifdef TARGET_OS_FAMILY_solaris 5990075Sobrien# include "globals_solaris.hpp" 6090075Sobrien#endif 6190075Sobrien#ifdef TARGET_OS_FAMILY_windows 6290075Sobrien# include "globals_windows.hpp" 6390075Sobrien#endif 6490075Sobrien#ifdef TARGET_OS_FAMILY_bsd 6590075Sobrien# include "globals_bsd.hpp" 6690075Sobrien#endif 67117395Skan#ifdef TARGET_OS_ARCH_linux_x86 68132718Skan# include "globals_linux_x86.hpp" 69169689Skan#endif 7050397Sobrien#ifdef TARGET_OS_ARCH_linux_sparc 7190075Sobrien# include "globals_linux_sparc.hpp" 72132718Skan#endif 7350397Sobrien#ifdef TARGET_OS_ARCH_linux_zero 7450397Sobrien# include "globals_linux_zero.hpp" 7590075Sobrien#endif 7690075Sobrien#ifdef TARGET_OS_ARCH_solaris_x86 7790075Sobrien# include "globals_solaris_x86.hpp" 7890075Sobrien#endif 7990075Sobrien#ifdef TARGET_OS_ARCH_solaris_sparc 8090075Sobrien# include "globals_solaris_sparc.hpp" 8190075Sobrien#endif 8290075Sobrien#ifdef TARGET_OS_ARCH_windows_x86 8390075Sobrien# include "globals_windows_x86.hpp" 8490075Sobrien#endif 8590075Sobrien#ifdef TARGET_OS_ARCH_linux_arm 8690075Sobrien# include "globals_linux_arm.hpp" 8790075Sobrien#endif 8890075Sobrien#ifdef TARGET_OS_ARCH_linux_ppc 8990075Sobrien# include "globals_linux_ppc.hpp" 9090075Sobrien#endif 9190075Sobrien#ifdef TARGET_OS_ARCH_bsd_x86 9290075Sobrien# include "globals_bsd_x86.hpp" 93169689Skan#endif 94169689Skan#ifdef TARGET_OS_ARCH_bsd_zero 95169689Skan# include "globals_bsd_zero.hpp" 96169689Skan#endif 97169689Skan#ifdef COMPILER1 98169689Skan#ifdef TARGET_ARCH_x86 99169689Skan# include "c1_globals_x86.hpp" 100169689Skan#endif 101169689Skan#ifdef TARGET_ARCH_sparc 102169689Skan# include "c1_globals_sparc.hpp" 103169689Skan#endif 104169689Skan#ifdef TARGET_ARCH_arm 105169689Skan# include "c1_globals_arm.hpp" 106169689Skan#endif 107169689Skan#ifdef TARGET_ARCH_ppc 108169689Skan# include "c1_globals_ppc.hpp" 10950397Sobrien#endif 11050397Sobrien#ifdef TARGET_OS_FAMILY_linux 11150397Sobrien# include "c1_globals_linux.hpp" 11250397Sobrien#endif 113132718Skan#ifdef TARGET_OS_FAMILY_solaris 11450397Sobrien# include "c1_globals_solaris.hpp" 115169689Skan#endif 116169689Skan#ifdef TARGET_OS_FAMILY_windows 117169689Skan# include "c1_globals_windows.hpp" 11850397Sobrien#endif 11990075Sobrien#ifdef TARGET_OS_FAMILY_bsd 12090075Sobrien# include "c1_globals_bsd.hpp" 12150397Sobrien#endif 122169689Skan#endif 123169689Skan#ifdef COMPILER2 124169689Skan#ifdef TARGET_ARCH_x86 12550397Sobrien# include "c2_globals_x86.hpp" 12650397Sobrien#endif 12750397Sobrien#ifdef TARGET_ARCH_sparc 12850397Sobrien# include "c2_globals_sparc.hpp" 12990075Sobrien#endif 13090075Sobrien#ifdef TARGET_ARCH_arm 13190075Sobrien# include "c2_globals_arm.hpp" 13290075Sobrien#endif 13390075Sobrien#ifdef TARGET_OS_FAMILY_linux 134117395Skan# include "c2_globals_linux.hpp" 135117395Skan#endif 136169689Skan#ifdef TARGET_OS_FAMILY_solaris 137117395Skan# include "c2_globals_solaris.hpp" 138117395Skan#endif 139169689Skan#ifdef TARGET_OS_FAMILY_windows 140169689Skan# include "c2_globals_windows.hpp" 141169689Skan#endif 142169689Skan#ifdef TARGET_OS_FAMILY_bsd 143117395Skan# include "c2_globals_bsd.hpp" 144117395Skan#endif 145117395Skan#endif 146117395Skan#ifdef SHARK 147117395Skan#ifdef TARGET_ARCH_zero 148117395Skan# include "shark_globals_zero.hpp" 149169689Skan#endif 150117395Skan#endif 151169689Skan 152169689Skan#if !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK) 153169689Skandefine_pd_global(bool, BackgroundCompilation, false); 154169689Skandefine_pd_global(bool, UseTLAB, false); 155169689Skandefine_pd_global(bool, CICompileOSR, false); 156169689Skandefine_pd_global(bool, UseTypeProfile, false); 157169689Skandefine_pd_global(bool, UseOnStackReplacement, false); 158169689Skandefine_pd_global(bool, InlineIntrinsics, false); 159169689Skandefine_pd_global(bool, PreferInterpreterNativeStubs, true); 160169689Skandefine_pd_global(bool, ProfileInterpreter, false); 161169689Skandefine_pd_global(bool, ProfileTraps, false); 162169689Skandefine_pd_global(bool, TieredCompilation, false); 16350397Sobrien 16450397Sobriendefine_pd_global(intx, CompileThreshold, 0); 16550397Sobriendefine_pd_global(intx, BackEdgeThreshold, 0); 16650397Sobrien 16750397Sobriendefine_pd_global(intx, OnStackReplacePercentage, 0); 16850397Sobriendefine_pd_global(bool, ResizeTLAB, false); 16950397Sobriendefine_pd_global(intx, FreqInlineSize, 0); 17050397Sobriendefine_pd_global(intx, InlineSmallCode, 0); 17150397Sobriendefine_pd_global(intx, NewSizeThreadIncrease, 4*K); 17250397Sobriendefine_pd_global(intx, InlineClassNatives, true); 17350397Sobriendefine_pd_global(intx, InlineUnsafeOps, true); 17450397Sobriendefine_pd_global(intx, InitialCodeCacheSize, 160*K); 17550397Sobriendefine_pd_global(intx, ReservedCodeCacheSize, 32*M); 17650397Sobriendefine_pd_global(intx, CodeCacheExpansionSize, 32*K); 177132718Skandefine_pd_global(intx, CodeCacheMinBlockLength, 1); 178132718Skandefine_pd_global(uintx,MetaspaceSize, ScaleForWordSize(4*M)); 179132718Skandefine_pd_global(bool, NeverActAsServerClassMachine, true); 180132718Skandefine_pd_global(uint64_t,MaxRAM, 1ULL*G); 181132718Skan#define CI_COMPILER_COUNT 0 182132718Skan#else 183132718Skan 184132718Skan#ifdef COMPILER2 185132718Skan#define CI_COMPILER_COUNT 2 18650397Sobrien#else 187169689Skan#define CI_COMPILER_COUNT 1 188132718Skan#endif // COMPILER2 189132718Skan 190132718Skan#endif // no compilers 19150397Sobrien 19250397Sobrien// string type aliases used only in this file 19350397Sobrientypedef const char* ccstr; 194132718Skantypedef const char* ccstrlist; // represents string arguments which accumulate 19550397Sobrien 19650397Sobrienenum FlagValueOrigin { 19750397Sobrien DEFAULT = 0, 198132718Skan COMMAND_LINE = 1, 199132718Skan ENVIRON_VAR = 2, 200132718Skan CONFIG_FILE = 3, 201132718Skan MANAGEMENT = 4, 20250397Sobrien ERGONOMIC = 5, 20350397Sobrien ATTACH_ON_DEMAND = 6, 20450397Sobrien INTERNAL = 99 20590075Sobrien}; 20690075Sobrien 20790075Sobrienstruct Flag { 20890075Sobrien const char *type; 20990075Sobrien const char *name; 210132718Skan void* addr; 21190075Sobrien 212132718Skan NOT_PRODUCT(const char *doc;) 213132718Skan 214169689Skan const char *kind; 21590075Sobrien FlagValueOrigin origin; 21690075Sobrien 21790075Sobrien // points to all Flags static array 21850397Sobrien static Flag *flags; 21950397Sobrien 22090075Sobrien // number of flags 22150397Sobrien static size_t numFlags; 22250397Sobrien 22350397Sobrien static Flag* find_flag(char* name, size_t length, bool allow_locked = false); 224132718Skan 22550397Sobrien bool is_bool() const { return strcmp(type, "bool") == 0; } 226169689Skan bool get_bool() const { return *((bool*) addr); } 22790075Sobrien void set_bool(bool value) { *((bool*) addr) = value; } 22890075Sobrien 22990075Sobrien bool is_intx() const { return strcmp(type, "intx") == 0; } 230169689Skan intx get_intx() const { return *((intx*) addr); } 231169689Skan void set_intx(intx value) { *((intx*) addr) = value; } 232169689Skan 233169689Skan bool is_uintx() const { return strcmp(type, "uintx") == 0; } 234169689Skan uintx get_uintx() const { return *((uintx*) addr); } 23550397Sobrien void set_uintx(uintx value) { *((uintx*) addr) = value; } 23690075Sobrien 237117395Skan bool is_uint64_t() const { return strcmp(type, "uint64_t") == 0; } 23890075Sobrien uint64_t get_uint64_t() const { return *((uint64_t*) addr); } 23990075Sobrien void set_uint64_t(uint64_t value) { *((uint64_t*) addr) = value; } 24050397Sobrien 24150397Sobrien bool is_double() const { return strcmp(type, "double") == 0; } 24250397Sobrien double get_double() const { return *((double*) addr); } 24390075Sobrien void set_double(double value) { *((double*) addr) = value; } 24450397Sobrien 24550397Sobrien bool is_ccstr() const { return strcmp(type, "ccstr") == 0 || strcmp(type, "ccstrlist") == 0; } 24690075Sobrien bool ccstr_accumulates() const { return strcmp(type, "ccstrlist") == 0; } 24790075Sobrien ccstr get_ccstr() const { return *((ccstr*) addr); } 24890075Sobrien void set_ccstr(ccstr value) { *((ccstr*) addr) = value; } 24990075Sobrien 25090075Sobrien bool is_unlocker() const; 25190075Sobrien bool is_unlocked() const; 25290075Sobrien bool is_writeable() const; 25350397Sobrien bool is_external() const; 25450397Sobrien 25550397Sobrien bool is_unlocker_ext() const; 25690075Sobrien bool is_unlocked_ext() const; 25790075Sobrien bool is_writeable_ext() const; 25890075Sobrien bool is_external_ext() const; 25950397Sobrien 26050397Sobrien void get_locked_message(char*, int) const; 26150397Sobrien void get_locked_message_ext(char*, int) const; 26250397Sobrien 26350397Sobrien void print_on(outputStream* st, bool withComments = false ); 264132718Skan void print_as_flag(outputStream* st); 265132718Skan}; 266132718Skan 267132718Skan// debug flags control various aspects of the VM and are global accessible 268132718Skan 269132718Skan// use FlagSetting to temporarily change some debug flag 270132718Skan// e.g. FlagSetting fs(DebugThisAndThat, true); 271132718Skan// restored to previous value upon leaving scope 272132718Skanclass FlagSetting { 273132718Skan bool val; 274132718Skan bool* flag; 275132718Skan public: 27650397Sobrien FlagSetting(bool& fl, bool newValue) { flag = &fl; val = fl; fl = newValue; } 27750397Sobrien ~FlagSetting() { *flag = val; } 27850397Sobrien}; 27950397Sobrien 28090075Sobrien 28150397Sobrienclass CounterSetting { 28250397Sobrien intx* counter; 28390075Sobrien public: 28450397Sobrien CounterSetting(intx* cnt) { counter = cnt; (*counter)++; } 28590075Sobrien ~CounterSetting() { (*counter)--; } 28650397Sobrien}; 28790075Sobrien 28850397Sobrien 28990075Sobrienclass IntFlagSetting { 29050397Sobrien intx val; 291169689Skan intx* flag; 292169689Skan public: 293169689Skan IntFlagSetting(intx& fl, intx newValue) { flag = &fl; val = fl; fl = newValue; } 294169689Skan ~IntFlagSetting() { *flag = val; } 295169689Skan}; 296169689Skan 297169689Skan 298169689Skanclass DoubleFlagSetting { 29950397Sobrien double val; 30050397Sobrien double* flag; 301132718Skan public: 30250397Sobrien DoubleFlagSetting(double& fl, double newValue) { flag = &fl; val = fl; fl = newValue; } 30350397Sobrien ~DoubleFlagSetting() { *flag = val; } 304132718Skan}; 30550397Sobrien 30650397Sobrien 307132718Skanclass CommandLineFlags { 30850397Sobrien public: 30950397Sobrien static bool boolAt(char* name, size_t len, bool* value); 31050397Sobrien static bool boolAt(char* name, bool* value) { return boolAt(name, strlen(name), value); } 31150397Sobrien static bool boolAtPut(char* name, size_t len, bool* value, FlagValueOrigin origin); 31250397Sobrien static bool boolAtPut(char* name, bool* value, FlagValueOrigin origin) { return boolAtPut(name, strlen(name), value, origin); } 31350397Sobrien 314132718Skan static bool intxAt(char* name, size_t len, intx* value); 31550397Sobrien static bool intxAt(char* name, intx* value) { return intxAt(name, strlen(name), value); } 316132718Skan static bool intxAtPut(char* name, size_t len, intx* value, FlagValueOrigin origin); 31750397Sobrien static bool intxAtPut(char* name, intx* value, FlagValueOrigin origin) { return intxAtPut(name, strlen(name), value, origin); } 31850397Sobrien 31990075Sobrien static bool uintxAt(char* name, size_t len, uintx* value); 32050397Sobrien static bool uintxAt(char* name, uintx* value) { return uintxAt(name, strlen(name), value); } 32150397Sobrien static bool uintxAtPut(char* name, size_t len, uintx* value, FlagValueOrigin origin); 322132718Skan static bool uintxAtPut(char* name, uintx* value, FlagValueOrigin origin) { return uintxAtPut(name, strlen(name), value, origin); } 32350397Sobrien 324132718Skan static bool uint64_tAt(char* name, size_t len, uint64_t* value); 32590075Sobrien static bool uint64_tAt(char* name, uint64_t* value) { return uint64_tAt(name, strlen(name), value); } 326132718Skan static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, FlagValueOrigin origin); 32790075Sobrien static bool uint64_tAtPut(char* name, uint64_t* value, FlagValueOrigin origin) { return uint64_tAtPut(name, strlen(name), value, origin); } 32890075Sobrien 32990075Sobrien static bool doubleAt(char* name, size_t len, double* value); 33090075Sobrien static bool doubleAt(char* name, double* value) { return doubleAt(name, strlen(name), value); } 33190075Sobrien static bool doubleAtPut(char* name, size_t len, double* value, FlagValueOrigin origin); 332132718Skan static bool doubleAtPut(char* name, double* value, FlagValueOrigin origin) { return doubleAtPut(name, strlen(name), value, origin); } 333132718Skan 334132718Skan static bool ccstrAt(char* name, size_t len, ccstr* value); 335132718Skan static bool ccstrAt(char* name, ccstr* value) { return ccstrAt(name, strlen(name), value); } 336132718Skan static bool ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin); 337132718Skan static bool ccstrAtPut(char* name, ccstr* value, FlagValueOrigin origin) { return ccstrAtPut(name, strlen(name), value, origin); } 338132718Skan 33950397Sobrien // Returns false if name is not a command line flag. 34050397Sobrien static bool wasSetOnCmdline(const char* name, bool* value); 341132718Skan static void printSetFlags(outputStream* out); 342132718Skan 343132718Skan static void printFlags(outputStream* out, bool withComments); 344132718Skan 345132718Skan static void verify() PRODUCT_RETURN; 346132718Skan}; 347132718Skan 348132718Skan// use this for flags that are true by default in the debug version but 349132718Skan// false in the optimized version, and vice versa 350132718Skan#ifdef ASSERT 351132718Skan#define trueInDebug true 352132718Skan#define falseInDebug false 353169689Skan#else 354132718Skan#define trueInDebug false 355132718Skan#define falseInDebug true 356132718Skan#endif 35750397Sobrien 35890075Sobrien// use this for flags that are true per default in the product build 359132718Skan// but false in development builds, and vice versa 360132718Skan#ifdef PRODUCT 361132718Skan#define trueInProduct true 36290075Sobrien#define falseInProduct false 363169689Skan#else 364132718Skan#define trueInProduct false 36550397Sobrien#define falseInProduct true 36690075Sobrien#endif 36790075Sobrien 36890075Sobrien#ifdef JAVASE_EMBEDDED 36950397Sobrien#define falseInEmbedded false 37050397Sobrien#else 37150397Sobrien#define falseInEmbedded true 37250397Sobrien#endif 37350397Sobrien 37450397Sobrien// develop flags are settable / visible only during development and are constant in the PRODUCT version 37590075Sobrien// product flags are always settable / visible 37690075Sobrien// notproduct flags are settable / visible only during development and are not declared in the PRODUCT version 37750397Sobrien 37850397Sobrien// A flag must be declared with one of the following types: 37950397Sobrien// bool, intx, uintx, ccstr. 38050397Sobrien// The type "ccstr" is an alias for "const char*" and is used 38150397Sobrien// only in this file, because the macrology requires single-token type names. 38290075Sobrien 38350397Sobrien// Note: Diagnostic options not meant for VM tuning or for product modes. 38450397Sobrien// They are to be used for VM quality assurance or field diagnosis 38550397Sobrien// of VM bugs. They are hidden so that users will not be encouraged to 38690075Sobrien// try them as if they were VM ordinary execution options. However, they 387169689Skan// are available in the product version of the VM. Under instruction 38890075Sobrien// from support engineers, VM customers can turn them on to collect 389169689Skan// diagnostic information about VM problems. To use a VM diagnostic 39050397Sobrien// option, you must first specify +UnlockDiagnosticVMOptions. 39150397Sobrien// (This master switch also affects the behavior of -Xprintflags.) 39290075Sobrien// 39390075Sobrien// experimental flags are in support of features that are not 39450397Sobrien// part of the officially supported product, but are available 39590075Sobrien// for experimenting with. They could, for example, be performance 39690075Sobrien// features that may not have undergone full or rigorous QA, but which may 39790075Sobrien// help performance in some cases and released for experimentation 39890075Sobrien// by the community of users and developers. This flag also allows one to 39990075Sobrien// be able to build a fully supported product that nonetheless also 40050397Sobrien// ships with some unsupported, lightly tested, experimental features. 40150397Sobrien// Like the UnlockDiagnosticVMOptions flag above, there is a corresponding 40250397Sobrien// UnlockExperimentalVMOptions flag, which allows the control and 40350397Sobrien// modification of the experimental flags. 40450397Sobrien// 40550397Sobrien// Nota bene: neither diagnostic nor experimental options should be used casually, 406132718Skan// and they are not supported on production loads, except under explicit 40750397Sobrien// direction from support engineers. 408132718Skan// 40950397Sobrien// manageable flags are writeable external product flags. 41050397Sobrien// They are dynamically writeable through the JDK management interface 41150397Sobrien// (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole. 41250397Sobrien// These flags are external exported interface (see CCC). The list of 41350397Sobrien// manageable flags can be queried programmatically through the management 41450397Sobrien// interface. 41550397Sobrien// 41650397Sobrien// A flag can be made as "manageable" only if 41790075Sobrien// - the flag is defined in a CCC as an external exported interface. 41850397Sobrien// - the VM implementation supports dynamic setting of the flag. 41950397Sobrien// This implies that the VM must *always* query the flag variable 42050397Sobrien// and not reuse state related to the flag state at any given time. 421132718Skan// - you want the flag to be queried programmatically by the customers. 42250397Sobrien// 423169689Skan// product_rw flags are writeable internal product flags. 424169689Skan// They are like "manageable" flags but for internal/private use. 42550397Sobrien// The list of product_rw flags are internal/private flags which 42650397Sobrien// may be changed/removed in a future release. It can be set 42750397Sobrien// through the management interface to get/set value 42850397Sobrien// when the name of flag is supplied. 42950397Sobrien// 43050397Sobrien// A flag can be made as "product_rw" only if 431132718Skan// - the VM implementation supports dynamic setting of the flag. 43250397Sobrien// This implies that the VM must *always* query the flag variable 433169689Skan// and not reuse state related to the flag state at any given time. 43450397Sobrien// 43550397Sobrien// Note that when there is a need to support develop flags to be writeable, 43650397Sobrien// it can be done in the same way as product_rw. 43750397Sobrien 43850397Sobrien#define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \ 43950397Sobrien \ 44050397Sobrien lp64_product(bool, UseCompressedOops, false, \ 44150397Sobrien "Use 32-bit object references in 64-bit VM " \ 44250397Sobrien "lp64_product means flag is always constant in 32 bit VM") \ 44350397Sobrien \ 44450397Sobrien lp64_product(bool, UseCompressedKlassPointers, false, \ 44590075Sobrien "Use 32-bit klass pointers in 64-bit VM " \ 44650397Sobrien "lp64_product means flag is always constant in 32 bit VM") \ 44790075Sobrien \ 448132718Skan notproduct(bool, CheckCompressedOops, true, \ 44950397Sobrien "generate checks in encoding/decoding code in debug VM") \ 450169689Skan \ 45190075Sobrien product_pd(uintx, HeapBaseMinAddress, \ 452169689Skan "OS specific low limit for heap base address") \ 45390075Sobrien \ 454132718Skan diagnostic(bool, PrintCompressedOopsMode, false, \ 45550397Sobrien "Print compressed oops base address and encoding mode") \ 456102780Skan \ 457169689Skan lp64_product(intx, ObjectAlignmentInBytes, 8, \ 458169689Skan "Default object alignment in bytes, 8 is minimum") \ 459169689Skan \ 460169689Skan /* UseMembar is theoretically a temp flag used for memory barrier \ 461169689Skan * removal testing. It was supposed to be removed before FCS but has \ 462169689Skan * been re-added (see 6401008) */ \ 463169689Skan product_pd(bool, UseMembar, \ 464169689Skan "(Unstable) Issues membars on thread state transitions") \ 465169689Skan \ 466169689Skan /* Temp PPC Flag to allow disabling the use of lwsync on ppc platforms \ 467169689Skan * that don't support it. This will be replaced by processor detection \ 468169689Skan * logic. \ 469169689Skan */ \ 470169689Skan product(bool, UsePPCLWSYNC, true, \ 471169689Skan "Use lwsync instruction if true, else use slower sync") \ 472169689Skan \ 473169689Skan develop(bool, CleanChunkPoolAsync, falseInEmbedded, \ 474169689Skan "Whether to clean the chunk pool asynchronously") \ 475169689Skan \ 476169689Skan /* Temporary: See 6948537 */ \ 477169689Skan experimental(bool, UseMemSetInBOT, true, \ 478169689Skan "(Unstable) uses memset in BOT updates in GC code") \ 479169689Skan \ 480169689Skan diagnostic(bool, UnlockDiagnosticVMOptions, trueInDebug, \ 481169689Skan "Enable normal processing of flags relating to field diagnostics")\ 48250397Sobrien \ 483122180Skan experimental(bool, UnlockExperimentalVMOptions, false, \ 484169689Skan "Enable normal processing of flags relating to experimental features")\ 485132718Skan \ 486132718Skan product(bool, JavaMonitorsInStackTrace, true, \ 487132718Skan "Print info. about Java monitor locks when the stacks are dumped")\ 488132718Skan \ 489122180Skan product_pd(bool, UseLargePages, \ 490132718Skan "Use large page memory") \ 491132718Skan \ 492132718Skan product_pd(bool, UseLargePagesIndividualAllocation, \ 493132718Skan "Allocate large pages individually for better affinity") \ 494132718Skan \ 495132718Skan develop(bool, LargePagesIndividualAllocationInjectError, false, \ 496132718Skan "Fail large pages individual allocation") \ 497132718Skan \ 49850397Sobrien develop(bool, TracePageSizes, false, \ 49950397Sobrien "Trace page size selection and usage.") \ 50050397Sobrien \ 50150397Sobrien product(bool, UseNUMA, false, \ 50290075Sobrien "Use NUMA if available") \ 503132718Skan \ 50450397Sobrien product(bool, UseNUMAInterleaving, false, \ 50550397Sobrien "Interleave memory across NUMA nodes if available") \ 50650397Sobrien \ 50750397Sobrien product(uintx, NUMAInterleaveGranularity, 2*M, \ 50850397Sobrien "Granularity to use for NUMA interleaving on Windows OS") \ 50950397Sobrien \ 51050397Sobrien product(bool, ForceNUMA, false, \ 51150397Sobrien "Force NUMA optimizations on single-node/UMA systems") \ 51250397Sobrien \ 51350397Sobrien product(intx, NUMAChunkResizeWeight, 20, \ 51450397Sobrien "Percentage (0-100) used to weight the current sample when " \ 51550397Sobrien "computing exponentially decaying average for " \ 51650397Sobrien "AdaptiveNUMAChunkSizing") \ 51750397Sobrien \ 51850397Sobrien product(intx, NUMASpaceResizeRate, 1*G, \ 51950397Sobrien "Do not reallocate more that this amount per collection") \ 52050397Sobrien \ 52150397Sobrien product(bool, UseAdaptiveNUMAChunkSizing, true, \ 52250397Sobrien "Enable adaptive chunk sizing for NUMA") \ 52350397Sobrien \ 52450397Sobrien product(bool, NUMAStats, false, \ 52550397Sobrien "Print NUMA stats in detailed heap information") \ 52650397Sobrien \ 52750397Sobrien product(intx, NUMAPageScanRate, 256, \ 52850397Sobrien "Maximum number of pages to include in the page scan procedure") \ 52950397Sobrien \ 53050397Sobrien product_pd(bool, NeedsDeoptSuspend, \ 53150397Sobrien "True for register window machines (sparc/ia64)") \ 53250397Sobrien \ 53350397Sobrien product(intx, UseSSE, 99, \ 53450397Sobrien "Highest supported SSE instructions set on x86/x64") \ 53550397Sobrien \ 53650397Sobrien product(bool, UseAES, false, \ 53750397Sobrien "Control whether AES instructions can be used on x86/x64") \ 53850397Sobrien \ 53950397Sobrien product(uintx, LargePageSizeInBytes, 0, \ 54050397Sobrien "Large page size (0 to let VM choose the page size") \ 54150397Sobrien \ 54250397Sobrien product(uintx, LargePageHeapSizeThreshold, 128*M, \ 54350397Sobrien "Use large pages if max heap is at least this big") \ 54490075Sobrien \ 54590075Sobrien product(bool, ForceTimeHighResolution, false, \ 54690075Sobrien "Using high time resolution(For Win32 only)") \ 54790075Sobrien \ 54890075Sobrien develop(bool, TraceItables, false, \ 54990075Sobrien "Trace initialization and use of itables") \ 55090075Sobrien \ 55190075Sobrien develop(bool, TracePcPatching, false, \ 55290075Sobrien "Trace usage of frame::patch_pc") \ 55390075Sobrien \ 55490075Sobrien develop(bool, TraceJumps, false, \ 55590075Sobrien "Trace assembly jumps in thread ring buffer") \ 55650397Sobrien \ 55750397Sobrien develop(bool, TraceRelocator, false, \ 55850397Sobrien "Trace the bytecode relocator") \ 55950397Sobrien \ 56050397Sobrien develop(bool, TraceLongCompiles, false, \ 56150397Sobrien "Print out every time compilation is longer than " \ 56250397Sobrien "a given threashold") \ 56350397Sobrien \ 56450397Sobrien develop(bool, SafepointALot, false, \ 56570635Sobrien "Generates a lot of safepoints. Works with " \ 56670635Sobrien "GuaranteedSafepointInterval") \ 56750397Sobrien \ 56850397Sobrien product_pd(bool, BackgroundCompilation, \ 56950397Sobrien "A thread requesting compilation is not blocked during " \ 57050397Sobrien "compilation") \ 57150397Sobrien \ 57250397Sobrien product(bool, PrintVMQWaitTime, false, \ 57350397Sobrien "Prints out the waiting time in VM operation queue") \ 57450397Sobrien \ 57550397Sobrien develop(bool, NoYieldsInMicrolock, false, \ 576132718Skan "Disable yields in microlock") \ 57750397Sobrien \ 578132718Skan develop(bool, TraceOopMapGeneration, false, \ 57950397Sobrien "Shows oopmap generation") \ 58050397Sobrien \ 58150397Sobrien product(bool, MethodFlushing, true, \ 58250397Sobrien "Reclamation of zombie and not-entrant methods") \ 58350397Sobrien \ 58450397Sobrien develop(bool, VerifyStack, false, \ 58550397Sobrien "Verify stack of each thread when it is entering a runtime call") \ 58650397Sobrien \ 58750397Sobrien diagnostic(bool, ForceUnreachable, false, \ 58850397Sobrien "Make all non code cache addresses to be unreachable with forcing use of 64bit literal fixups") \ 58950397Sobrien \ 590132718Skan notproduct(bool, StressDerivedPointers, false, \ 59150397Sobrien "Force scavenge when a derived pointers is detected on stack " \ 59290075Sobrien "after rtm call") \ 59350397Sobrien \ 59450397Sobrien develop(bool, TraceDerivedPointers, false, \ 59550397Sobrien "Trace traversal of derived pointers on stack") \ 59650397Sobrien \ 59750397Sobrien notproduct(bool, TraceCodeBlobStacks, false, \ 59850397Sobrien "Trace stack-walk of codeblobs") \ 59950397Sobrien \ 60050397Sobrien product(bool, PrintJNIResolving, false, \ 60150397Sobrien "Used to implement -v:jni") \ 60250397Sobrien \ 60350397Sobrien notproduct(bool, PrintRewrites, false, \ 604132718Skan "Print methods that are being rewritten") \ 60550397Sobrien \ 60650397Sobrien product(bool, UseInlineCaches, true, \ 60790075Sobrien "Use Inline Caches for virtual calls ") \ 608132718Skan \ 60950397Sobrien develop(bool, InlineArrayCopy, true, \ 61050397Sobrien "inline arraycopy native that is known to be part of " \ 61150397Sobrien "base library DLL") \ 61250397Sobrien \ 61350397Sobrien develop(bool, InlineObjectHash, true, \ 61450397Sobrien "inline Object::hashCode() native that is known to be part " \ 61550397Sobrien "of base library DLL") \ 61650397Sobrien \ 617132718Skan develop(bool, InlineNatives, true, \ 61850397Sobrien "inline natives that are known to be part of base library DLL") \ 61950397Sobrien \ 62050397Sobrien develop(bool, InlineMathNatives, true, \ 62190075Sobrien "inline SinD, CosD, etc.") \ 62250397Sobrien \ 62350397Sobrien develop(bool, InlineClassNatives, true, \ 62450397Sobrien "inline Class.isInstance, etc") \ 62550397Sobrien \ 62650397Sobrien develop(bool, InlineThreadNatives, true, \ 62750397Sobrien "inline Thread.currentThread, etc") \ 62850397Sobrien \ 62990075Sobrien develop(bool, InlineUnsafeOps, true, \ 63050397Sobrien "inline memory ops (native methods) from sun.misc.Unsafe") \ 631169689Skan \ 63250397Sobrien product(bool, CriticalJNINatives, true, \ 63350397Sobrien "check for critical JNI entry points") \ 63450397Sobrien \ 635169689Skan notproduct(bool, StressCriticalJNINatives, false, \ 636169689Skan "Exercise register saving code in critical natives") \ 637169689Skan \ 638169689Skan product(bool, UseSSE42Intrinsics, false, \ 639169689Skan "SSE4.2 versions of intrinsics") \ 64050397Sobrien \ 64150397Sobrien product(bool, UseAESIntrinsics, false, \ 642169689Skan "use intrinsics for AES versions of crypto") \ 643169689Skan \ 64450397Sobrien develop(bool, TraceCallFixup, false, \ 64550397Sobrien "traces all call fixups") \ 64650397Sobrien \ 64750397Sobrien develop(bool, DeoptimizeALot, false, \ 64850397Sobrien "deoptimize at every exit from the runtime system") \ 64950397Sobrien \ 65050397Sobrien notproduct(ccstrlist, DeoptimizeOnlyAt, "", \ 65150397Sobrien "a comma separated list of bcis to deoptimize at") \ 65250397Sobrien \ 65350397Sobrien product(bool, DeoptimizeRandom, false, \ 65450397Sobrien "deoptimize random frames on random exit from the runtime system")\ 655169689Skan \ 656132718Skan notproduct(bool, ZombieALot, false, \ 65750397Sobrien "creates zombies (non-entrant) at exit from the runt. system") \ 65850397Sobrien \ 65950397Sobrien product(bool, UnlinkSymbolsALot, false, \ 66050397Sobrien "unlink unreferenced symbols from the symbol table at safepoints")\ 66190075Sobrien \ 66250397Sobrien notproduct(bool, WalkStackALot, false, \ 663169689Skan "trace stack (no print) at every exit from the runtime system") \ 664169689Skan \ 665169689Skan product(bool, Debugging, false, \ 666169689Skan "set when executing debug methods in debug.ccp " \ 66750397Sobrien "(to prevent triggering assertions)") \ 66890075Sobrien \ 66950397Sobrien notproduct(bool, StrictSafepointChecks, trueInDebug, \ 67050397Sobrien "Enable strict checks that safepoints cannot happen for threads " \ 67190075Sobrien "that used No_Safepoint_Verifier") \ 67290075Sobrien \ 67350397Sobrien notproduct(bool, VerifyLastFrame, false, \ 674169689Skan "Verify oops on last frame on entry to VM") \ 675169689Skan \ 676169689Skan develop(bool, TraceHandleAllocation, false, \ 677169689Skan "Prints out warnings when suspicious many handles are allocated") \ 678169689Skan \ 67990075Sobrien product(bool, UseCompilerSafepoints, true, \ 68090075Sobrien "Stop at safepoints in compiled code") \ 68190075Sobrien \ 68250397Sobrien product(bool, UseSplitVerifier, true, \ 68350397Sobrien "use split verifier with StackMapTable attributes") \ 68450397Sobrien \ 68550397Sobrien product(bool, FailOverToOldVerifier, true, \ 68650397Sobrien "fail over to old verifier when split verifier fails") \ 68750397Sobrien \ 68850397Sobrien develop(bool, ShowSafepointMsgs, false, \ 68950397Sobrien "Show msg. about safepoint synch.") \ 690132718Skan \ 69150397Sobrien product(bool, SafepointTimeout, false, \ 69290075Sobrien "Time out and warn or fail after SafepointTimeoutDelay " \ 69350397Sobrien "milliseconds if failed to reach safepoint") \ 694169689Skan \ 69590075Sobrien develop(bool, DieOnSafepointTimeout, false, \ 69690075Sobrien "Die upon failure to reach safepoint (see SafepointTimeout)") \ 69790075Sobrien \ 69850397Sobrien /* 50 retries * (5 * current_retry_count) millis = ~6.375 seconds */ \ 69950397Sobrien /* typically, at most a few retries are needed */ \ 70090075Sobrien product(intx, SuspendRetryCount, 50, \ 70150397Sobrien "Maximum retry count for an external suspend request") \ 70250397Sobrien \ 70350397Sobrien product(intx, SuspendRetryDelay, 5, \ 70490075Sobrien "Milliseconds to delay per retry (* current_retry_count)") \ 70550397Sobrien \ 70690075Sobrien product(bool, AssertOnSuspendWaitFailure, false, \ 70750397Sobrien "Assert/Guarantee on external suspend wait failure") \ 70850397Sobrien \ 70950397Sobrien product(bool, TraceSuspendWaitFailures, false, \ 71050397Sobrien "Trace external suspend wait failures") \ 71190075Sobrien \ 71250397Sobrien product(bool, MaxFDLimit, true, \ 71350397Sobrien "Bump the number of file descriptors to max in solaris.") \ 71450397Sobrien \ 71590075Sobrien diagnostic(bool, LogEvents, true, \ 71650397Sobrien "Enable the various ring buffer event logs") \ 71750397Sobrien \ 718132718Skan diagnostic(intx, LogEventsBufferEntries, 10, \ 71950397Sobrien "Enable the various ring buffer event logs") \ 72050397Sobrien \ 721132718Skan product(bool, BytecodeVerificationRemote, true, \ 72250397Sobrien "Enables the Java bytecode verifier for remote classes") \ 72350397Sobrien \ 72450397Sobrien product(bool, BytecodeVerificationLocal, false, \ 72550397Sobrien "Enables the Java bytecode verifier for local classes") \ 72650397Sobrien \ 72750397Sobrien develop(bool, ForceFloatExceptions, trueInDebug, \ 728132718Skan "Force exceptions on FP stack under/overflow") \ 72950397Sobrien \ 73090075Sobrien develop(bool, VerifyStackAtCalls, false, \ 73190075Sobrien "Verify that the stack pointer is unchanged after calls") \ 73290075Sobrien \ 73390075Sobrien develop(bool, TraceJavaAssertions, false, \ 73490075Sobrien "Trace java language assertions") \ 73590075Sobrien \ 73690075Sobrien notproduct(bool, CheckAssertionStatusDirectives, false, \ 73750397Sobrien "temporary - see javaClasses.cpp") \ 738169689Skan \ 739169689Skan notproduct(bool, PrintMallocFree, false, \ 740169689Skan "Trace calls to C heap malloc/free allocation") \ 741169689Skan \ 742169689Skan product(bool, PrintOopAddress, false, \ 743169689Skan "Always print the location of the oop") \ 744169689Skan \ 745169689Skan notproduct(bool, VerifyCodeCacheOften, false, \ 746169689Skan "Verify compiled-code cache often") \ 747169689Skan \ 748169689Skan develop(bool, ZapDeadCompiledLocals, false, \ 749169689Skan "Zap dead locals in compiler frames") \ 75090075Sobrien \ 75190075Sobrien notproduct(bool, ZapDeadLocalsOld, false, \ 75250397Sobrien "Zap dead locals (old version, zaps all frames when " \ 75390075Sobrien "entering the VM") \ 754132718Skan \ 75590075Sobrien notproduct(bool, CheckOopishValues, false, \ 75690075Sobrien "Warn if value contains oop ( requires ZapDeadLocals)") \ 75790075Sobrien \ 75850397Sobrien develop(bool, UseMallocOnly, false, \ 75990075Sobrien "use only malloc/free for allocation (no resource area/arena)") \ 76090075Sobrien \ 76190075Sobrien develop(bool, PrintMalloc, false, \ 76290075Sobrien "print all malloc/free calls") \ 76390075Sobrien \ 76490075Sobrien develop(bool, PrintMallocStatistics, false, \ 76590075Sobrien "print malloc/free statistics") \ 76690075Sobrien \ 76790075Sobrien develop(bool, ZapResourceArea, trueInDebug, \ 76890075Sobrien "Zap freed resource/arena space with 0xABABABAB") \ 769169689Skan \ 77050397Sobrien notproduct(bool, ZapVMHandleArea, trueInDebug, \ 77150397Sobrien "Zap freed VM handle space with 0xBCBCBCBC") \ 77250397Sobrien \ 77350397Sobrien develop(bool, ZapJNIHandleArea, trueInDebug, \ 77490075Sobrien "Zap freed JNI handle space with 0xFEFEFEFE") \ 77550397Sobrien \ 776169689Skan notproduct(bool, ZapStackSegments, trueInDebug, \ 777169689Skan "Zap allocated/freed Stack segments with 0xFADFADED") \ 778169689Skan \ 779169689Skan develop(bool, ZapUnusedHeapArea, trueInDebug, \ 780169689Skan "Zap unused heap space with 0xBAADBABE") \ 781169689Skan \ 782169689Skan develop(bool, TraceZapUnusedHeapArea, false, \ 783169689Skan "Trace zapping of unused heap space") \ 784169689Skan \ 785169689Skan develop(bool, CheckZapUnusedHeapArea, false, \ 786169689Skan "Check zapping of unused heap space") \ 787169689Skan \ 788169689Skan develop(bool, ZapFillerObjects, trueInDebug, \ 789169689Skan "Zap filler objects with 0xDEAFBABE") \ 790169689Skan \ 79150397Sobrien develop(bool, PrintVMMessages, true, \ 79250397Sobrien "Print vm messages on console") \ 79350397Sobrien \ 794169689Skan product(bool, PrintGCApplicationConcurrentTime, false, \ 795169689Skan "Print the time the application has been running") \ 79690075Sobrien \ 79750397Sobrien product(bool, PrintGCApplicationStoppedTime, false, \ 79890075Sobrien "Print the time the application has been stopped") \ 79990075Sobrien \ 80090075Sobrien diagnostic(bool, VerboseVerification, false, \ 80150397Sobrien "Display detailed verification details") \ 80290075Sobrien \ 80350397Sobrien notproduct(uintx, ErrorHandlerTest, 0, \ 80450397Sobrien "If > 0, provokes an error after VM initialization; the value" \ 80550397Sobrien "determines which error to provoke. See test_error_handler()" \ 80690075Sobrien "in debug.cpp.") \ 80750397Sobrien \ 80890075Sobrien develop(bool, Verbose, false, \ 80990075Sobrien "Prints additional debugging information from other modes") \ 81090075Sobrien \ 811169689Skan develop(bool, PrintMiscellaneous, false, \ 812169689Skan "Prints uncategorized debugging information (requires +Verbose)") \ 813169689Skan \ 814169689Skan develop(bool, WizardMode, false, \ 815169689Skan "Prints much more debugging information") \ 816169689Skan \ 817169689Skan product(bool, ShowMessageBoxOnError, false, \ 818169689Skan "Keep process alive on VM fatal error") \ 819169689Skan \ 820169689Skan product(bool, CreateMinidumpOnCrash, false, \ 821169689Skan "Create minidump on VM fatal error") \ 822169689Skan \ 823169689Skan product_pd(bool, UseOSErrorReporting, \ 824169689Skan "Let VM fatal error propagate to the OS (ie. WER on Windows)") \ 825169689Skan \ 82650397Sobrien product(bool, SuppressFatalErrorMessage, false, \ 82790075Sobrien "Do NO Fatal Error report [Avoid deadlock]") \ 82890075Sobrien \ 82990075Sobrien product(ccstrlist, OnError, "", \ 83090075Sobrien "Run user-defined commands on fatal error; see VMError.cpp " \ 83190075Sobrien "for examples") \ 83290075Sobrien \ 83350397Sobrien product(ccstrlist, OnOutOfMemoryError, "", \ 83490075Sobrien "Run user-defined commands on first java.lang.OutOfMemoryError") \ 835169689Skan \ 83690075Sobrien manageable(bool, HeapDumpBeforeFullGC, false, \ 83790075Sobrien "Dump heap to file before any major stop-world GC") \ 83890075Sobrien \ 83950397Sobrien manageable(bool, HeapDumpAfterFullGC, false, \ 84050397Sobrien "Dump heap to file after any major stop-world GC") \ 84150397Sobrien \ 84250397Sobrien manageable(bool, HeapDumpOnOutOfMemoryError, false, \ 84350397Sobrien "Dump heap to file when java.lang.OutOfMemoryError is thrown") \ 84450397Sobrien \ 84550397Sobrien manageable(ccstr, HeapDumpPath, NULL, \ 84650397Sobrien "When HeapDumpOnOutOfMemoryError is on, the path (filename or" \ 84750397Sobrien "directory) of the dump file (defaults to java_pid<pid>.hprof" \ 848132718Skan "in the working directory)") \ 84950397Sobrien \ 85090075Sobrien develop(uintx, SegmentedHeapDumpThreshold, 2*G, \ 85150397Sobrien "Generate a segmented heap dump (JAVA PROFILE 1.0.2 format) " \ 85250397Sobrien "when the heap usage is larger than this") \ 85350397Sobrien \ 854169689Skan develop(uintx, HeapDumpSegmentSize, 1*G, \ 85550397Sobrien "Approximate segment size when generating a segmented heap dump") \ 85650397Sobrien \ 85750397Sobrien develop(bool, BreakAtWarning, false, \ 85850397Sobrien "Execute breakpoint upon encountering VM warning") \ 85950397Sobrien \ 86050397Sobrien develop(bool, TraceVMOperation, false, \ 86150397Sobrien "Trace vm operations") \ 86250397Sobrien \ 86390075Sobrien develop(bool, UseFakeTimers, false, \ 86490075Sobrien "Tells whether the VM should use system time or a fake timer") \ 86590075Sobrien \ 86690075Sobrien product(ccstr, NativeMemoryTracking, "off", \ 86790075Sobrien "Native memory tracking options") \ 86890075Sobrien \ 869132718Skan diagnostic(bool, PrintNMTStatistics, false, \ 87090075Sobrien "Print native memory tracking summary data if it is on") \ 871169689Skan \ 87290075Sobrien diagnostic(bool, LogCompilation, false, \ 87390075Sobrien "Log compilation activity in detail to hotspot.log or LogFile") \ 87450397Sobrien \ 87550397Sobrien product(bool, PrintCompilation, false, \ 87690075Sobrien "Print compilations") \ 87790075Sobrien \ 87850397Sobrien diagnostic(bool, TraceNMethodInstalls, false, \ 87950397Sobrien "Trace nmethod intallation") \ 88090075Sobrien \ 881169689Skan diagnostic(intx, ScavengeRootsInCode, 2, \ 88250397Sobrien "0: do not allow scavengable oops in the code cache; " \ 88350397Sobrien "1: allow scavenging from the code cache; " \ 88450397Sobrien "2: emit as many constants as the compiler can see") \ 88550397Sobrien \ 88650397Sobrien product(bool, AlwaysRestoreFPU, false, \ 88750397Sobrien "Restore the FPU control word after every JNI call (expensive)") \ 88850397Sobrien \ 88950397Sobrien diagnostic(bool, PrintCompilation2, false, \ 89050397Sobrien "Print additional statistics per compilation") \ 89150397Sobrien \ 89250397Sobrien diagnostic(bool, PrintAdapterHandlers, false, \ 89350397Sobrien "Print code generated for i2c/c2i adapters") \ 89490075Sobrien \ 89550397Sobrien diagnostic(bool, VerifyAdapterCalls, trueInDebug, \ 89650397Sobrien "Verify that i2c/c2i adapters are called properly") \ 89750397Sobrien \ 89850397Sobrien develop(bool, VerifyAdapterSharing, false, \ 899132718Skan "Verify that the code for shared adapters is the equivalent") \ 90050397Sobrien \ 90190075Sobrien diagnostic(bool, PrintAssembly, false, \ 90290075Sobrien "Print assembly code (using external disassembler.so)") \ 90350397Sobrien \ 90450397Sobrien diagnostic(ccstr, PrintAssemblyOptions, NULL, \ 90550397Sobrien "Options string passed to disassembler.so") \ 90650397Sobrien \ 90750397Sobrien diagnostic(bool, PrintNMethods, false, \ 90850397Sobrien "Print assembly code for nmethods when generated") \ 90950397Sobrien \ 91050397Sobrien diagnostic(bool, PrintNativeNMethods, false, \ 911132718Skan "Print assembly code for native nmethods when generated") \ 91250397Sobrien \ 91390075Sobrien develop(bool, PrintDebugInfo, false, \ 91450397Sobrien "Print debug information for all nmethods when generated") \ 91550397Sobrien \ 91650397Sobrien develop(bool, PrintRelocations, false, \ 91790075Sobrien "Print relocation information for all nmethods when generated") \ 91850397Sobrien \ 91950397Sobrien develop(bool, PrintDependencies, false, \ 92050397Sobrien "Print dependency information for all nmethods when generated") \ 92150397Sobrien \ 92250397Sobrien develop(bool, PrintExceptionHandlers, false, \ 92350397Sobrien "Print exception handler tables for all nmethods when generated") \ 92450397Sobrien \ 92550397Sobrien develop(bool, StressCompiledExceptionHandlers, false, \ 92650397Sobrien "Exercise compiled exception handlers") \ 92750397Sobrien \ 92850397Sobrien develop(bool, InterceptOSException, false, \ 92950397Sobrien "Starts debugger when an implicit OS (e.g., NULL) " \ 930132718Skan "exception happens") \ 93150397Sobrien \ 932169689Skan product(bool, PrintCodeCache, false, \ 93350397Sobrien "Print the code cache memory usage when exiting") \ 93450397Sobrien \ 93550397Sobrien develop(bool, PrintCodeCache2, false, \ 93650397Sobrien "Print detailed usage info on the code cache when exiting") \ 93750397Sobrien \ 93850397Sobrien product(bool, PrintCodeCacheOnCompilation, false, \ 939132718Skan "Print the code cache memory usage each time a method is compiled") \ 94050397Sobrien \ 941169689Skan diagnostic(bool, PrintStubCode, false, \ 94250397Sobrien "Print generated stub code") \ 94350397Sobrien \ 94450397Sobrien product(bool, StackTraceInThrowable, true, \ 94550397Sobrien "Collect backtrace in throwable when exception happens") \ 94650397Sobrien \ 94750397Sobrien product(bool, OmitStackTraceInFastThrow, true, \ 948132718Skan "Omit backtraces for some 'hot' exceptions in optimized code") \ 94950397Sobrien \ 950169689Skan product(bool, ProfilerPrintByteCodeStatistics, false, \ 95150397Sobrien "Prints byte code statictics when dumping profiler output") \ 95250397Sobrien \ 95350397Sobrien product(bool, ProfilerRecordPC, false, \ 95450397Sobrien "Collects tick for each 16 byte interval of compiled code") \ 95550397Sobrien \ 95650397Sobrien product(bool, ProfileVM, false, \ 957132718Skan "Profiles ticks that fall within VM (either in the VM Thread " \ 95850397Sobrien "or VM code called through stubs)") \ 959169689Skan \ 96090075Sobrien product(bool, ProfileIntervals, false, \ 96150397Sobrien "Prints profiles for each interval (see ProfileIntervalsTicks)") \ 96250397Sobrien \ 96350397Sobrien notproduct(bool, ProfilerCheckIntervals, false, \ 96450397Sobrien "Collect and print info on spacing of profiler ticks") \ 96550397Sobrien \ 96690075Sobrien develop(bool, PrintJVMWarnings, false, \ 96750397Sobrien "Prints warnings for unimplemented JVM functions") \ 96890075Sobrien \ 96950397Sobrien product(bool, PrintWarnings, true, \ 97050397Sobrien "Prints JVM warnings to output stream") \ 97150397Sobrien \ 97250397Sobrien notproduct(uintx, WarnOnStalledSpinLock, 0, \ 97350397Sobrien "Prints warnings for stalled SpinLocks") \ 97450397Sobrien \ 975169689Skan product(bool, RegisterFinalizersAtInit, true, \ 97650397Sobrien "Register finalizable objects at end of Object.<init> or " \ 97750397Sobrien "after allocation") \ 97890075Sobrien \ 97950397Sobrien develop(bool, RegisterReferences, true, \ 980169689Skan "Tells whether the VM should register soft/weak/final/phantom " \ 98150397Sobrien "references") \ 98250397Sobrien \ 98390075Sobrien develop(bool, IgnoreRewrites, false, \ 98450397Sobrien "Supress rewrites of bytecodes in the oopmap generator. " \ 985169689Skan "This is unsafe!") \ 98650397Sobrien \ 98750397Sobrien develop(bool, PrintCodeCacheExtension, false, \ 98890075Sobrien "Print extension of code cache") \ 98950397Sobrien \ 990169689Skan develop(bool, UsePrivilegedStack, true, \ 99150397Sobrien "Enable the security JVM functions") \ 99290075Sobrien \ 99350397Sobrien develop(bool, ProtectionDomainVerification, true, \ 99490075Sobrien "Verifies protection domain before resolution in system " \ 99550397Sobrien "dictionary") \ 99650397Sobrien \ 99750397Sobrien product(bool, ClassUnloading, true, \ 99850397Sobrien "Do unloading of classes") \ 999169689Skan \ 100050397Sobrien develop(bool, DisableStartThread, false, \ 100150397Sobrien "Disable starting of additional Java threads " \ 100290075Sobrien "(for debugging only)") \ 100350397Sobrien \ 1004169689Skan develop(bool, MemProfiling, false, \ 100550397Sobrien "Write memory usage profiling to log file") \ 100650397Sobrien \ 1007169689Skan notproduct(bool, PrintSystemDictionaryAtExit, false, \ 1008169689Skan "Prints the system dictionary at exit") \ 100950397Sobrien \ 101050397Sobrien experimental(intx, PredictedLoadedClassCount, 0, \ 101190075Sobrien "Experimental: Tune loaded class cache starting size.") \ 101290075Sobrien \ 101390075Sobrien diagnostic(bool, UnsyncloadClass, false, \ 1014132718Skan "Unstable: VM calls loadClass unsynchronized. Custom " \ 1015132718Skan "class loader must call VM synchronized for findClass " \ 101690075Sobrien "and defineClass.") \ 101790075Sobrien \ 101890075Sobrien product(bool, AlwaysLockClassLoader, false, \ 101990075Sobrien "Require the VM to acquire the class loader lock before calling " \ 102090075Sobrien "loadClass() even for class loaders registering " \ 102190075Sobrien "as parallel capable") \ 102290075Sobrien \ 102390075Sobrien product(bool, AllowParallelDefineClass, false, \ 102490075Sobrien "Allow parallel defineClass requests for class loaders " \ 102590075Sobrien "registering as parallel capable") \ 102690075Sobrien \ 102790075Sobrien product(bool, MustCallLoadClassInternal, false, \ 102890075Sobrien "Call loadClassInternal() rather than loadClass()") \ 102990075Sobrien \ 103090075Sobrien product_pd(bool, DontYieldALot, \ 103190075Sobrien "Throw away obvious excess yield calls (for SOLARIS only)") \ 1032117395Skan \ 1033117395Skan product_pd(bool, ConvertSleepToYield, \ 103490075Sobrien "Converts sleep(0) to thread yield " \ 1035169689Skan "(may be off for SOLARIS to improve GUI)") \ 103690075Sobrien \ 103790075Sobrien product(bool, ConvertYieldToSleep, false, \ 103890075Sobrien "Converts yield to a sleep of MinSleepInterval to simulate Win32 "\ 103990075Sobrien "behavior (SOLARIS only)") \ 104090075Sobrien \ 1041117395Skan product(bool, UseBoundThreads, true, \ 104290075Sobrien "Bind user level threads to kernel threads (for SOLARIS only)") \ 1043117395Skan \ 1044117395Skan develop(bool, UseDetachedThreads, true, \ 1045117395Skan "Use detached threads that are recycled upon termination " \ 1046117395Skan "(for SOLARIS only)") \ 1047117395Skan \ 1048117395Skan product(bool, UseLWPSynchronization, true, \ 1049169689Skan "Use LWP-based instead of libthread-based synchronization " \ 1050169689Skan "(SPARC only)") \ 1051117395Skan \ 1052117395Skan product(ccstr, SyncKnobs, NULL, \ 1053117395Skan "(Unstable) Various monitor synchronization tunables") \ 1054117395Skan \ 105590075Sobrien product(intx, EmitSync, 0, \ 1056117395Skan "(Unsafe,Unstable) " \ 1057117395Skan " Controls emission of inline sync fast-path code") \ 1058117395Skan \ 1059117395Skan product(intx, MonitorBound, 0, "Bound Monitor population") \ 1060117395Skan \ 1061117395Skan product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \ 1062117395Skan \ 1063117395Skan product(intx, SyncFlags, 0, "(Unsafe,Unstable) Experimental Sync flags" ) \ 106490075Sobrien \ 1065117395Skan product(intx, SyncVerbose, 0, "(Unstable)" ) \ 1066117395Skan \ 1067117395Skan product(intx, ClearFPUAtPark, 0, "(Unsafe,Unstable)" ) \ 1068117395Skan \ 1069117395Skan product(intx, hashCode, 5, \ 1070117395Skan "(Unstable) select hashCode generation algorithm" ) \ 1071117395Skan \ 1072117395Skan product(intx, WorkAroundNPTLTimedWaitHang, 1, \ 1073117395Skan "(Unstable, Linux-specific)" \ 1074117395Skan " avoid NPTL-FUTEX hang pthread_cond_timedwait" ) \ 1075117395Skan \ 107690075Sobrien product(bool, FilterSpuriousWakeups, true, \ 107790075Sobrien "Prevent spurious or premature wakeups from object.wait " \ 107890075Sobrien "(Solaris only)") \ 107990075Sobrien \ 108090075Sobrien product(intx, NativeMonitorTimeout, -1, "(Unstable)" ) \ 108190075Sobrien product(intx, NativeMonitorFlags, 0, "(Unstable)" ) \ 108290075Sobrien product(intx, NativeMonitorSpinLimit, 20, "(Unstable)" ) \ 108390075Sobrien \ 108450397Sobrien develop(bool, UsePthreads, false, \ 108550397Sobrien "Use pthread-based instead of libthread-based synchronization " \ 108650397Sobrien "(SPARC only)") \ 108750397Sobrien \ 108850397Sobrien product(bool, AdjustConcurrency, false, \ 1089169689Skan "call thr_setconcurrency at thread create time to avoid " \ 109050397Sobrien "LWP starvation on MP systems (For Solaris Only)") \ 109190075Sobrien \ 109290075Sobrien product(bool, ReduceSignalUsage, false, \ 109390075Sobrien "Reduce the use of OS signals in Java and/or the VM") \ 109450397Sobrien \ 1095132718Skan develop_pd(bool, ShareVtableStubs, \ 1096132718Skan "Share vtable stubs (smaller code but worse branch prediction") \ 1097132718Skan \ 1098132718Skan develop(bool, LoadLineNumberTables, true, \ 1099132718Skan "Tells whether the class file parser loads line number tables") \ 1100132718Skan \ 1101132718Skan develop(bool, LoadLocalVariableTables, true, \ 1102169689Skan "Tells whether the class file parser loads local variable tables")\ 1103169689Skan \ 1104169689Skan develop(bool, LoadLocalVariableTypeTables, true, \ 110550397Sobrien "Tells whether the class file parser loads local variable type tables")\ 1106169689Skan \ 1107169689Skan product(bool, AllowUserSignalHandlers, false, \ 1108169689Skan "Do not complain if the application installs signal handlers " \ 1109169689Skan "(Solaris & Linux only)") \ 1110169689Skan \ 1111169689Skan product(bool, UseSignalChaining, true, \ 1112169689Skan "Use signal-chaining to invoke signal handlers installed " \ 1113169689Skan "by the application (Solaris & Linux only)") \ 1114169689Skan \ 1115169689Skan product(bool, UseAltSigs, false, \ 1116169689Skan "Use alternate signals instead of SIGUSR1 & SIGUSR2 for VM " \ 111750397Sobrien "internal signals (Solaris only)") \ 111850397Sobrien \ 111950397Sobrien product(bool, AllowJNIEnvProxy, false, \ 1120169689Skan "Allow JNIEnv proxies for jdbx") \ 112150397Sobrien \ 1122169689Skan product(bool, JNIDetachReleasesMonitors, true, \ 1123169689Skan "JNI DetachCurrentThread releases monitors owned by thread") \ 1124169689Skan \ 1125169689Skan product(bool, RestoreMXCSROnJNICalls, false, \ 1126169689Skan "Restore MXCSR when returning from JNI calls") \ 1127169689Skan \ 112850397Sobrien product(bool, CheckJNICalls, false, \ 112950397Sobrien "Verify all arguments to JNI calls") \ 113050397Sobrien \ 113150397Sobrien product(bool, UseFastJNIAccessors, true, \ 113250397Sobrien "Use optimized versions of Get<Primitive>Field") \ 113350397Sobrien \ 113450397Sobrien product(bool, EagerXrunInit, false, \ 113550397Sobrien "Eagerly initialize -Xrun libraries; allows startup profiling, " \ 113650397Sobrien " but not all -Xrun libraries may support the state of the VM at this time") \ 113750397Sobrien \ 113890075Sobrien product(bool, PreserveAllAnnotations, false, \ 113990075Sobrien "Preserve RuntimeInvisibleAnnotations as well as RuntimeVisibleAnnotations") \ 114090075Sobrien \ 114150397Sobrien develop(uintx, PreallocatedOutOfMemoryErrorCount, 4, \ 114290075Sobrien "Number of OutOfMemoryErrors preallocated with backtrace") \ 114390075Sobrien \ 114490075Sobrien product(bool, LazyBootClassLoader, true, \ 114590075Sobrien "Enable/disable lazy opening of boot class path entries") \ 114690075Sobrien \ 114750397Sobrien product(bool, UseXMMForArrayCopy, false, \ 114850397Sobrien "Use SSE2 MOVQ instruction for Arraycopy") \ 114950397Sobrien \ 115050397Sobrien product(intx, FieldsAllocationStyle, 1, \ 115150397Sobrien "0 - type based with oops first, 1 - with oops last, " \ 115250397Sobrien "2 - oops in super and sub classes are together") \ 115350397Sobrien \ 115490075Sobrien product(bool, CompactFields, true, \ 115590075Sobrien "Allocate nonstatic fields in gaps between previous fields") \ 115650397Sobrien \ 115750397Sobrien notproduct(bool, PrintCompactFieldsSavings, false, \ 115850397Sobrien "Print how many words were saved with CompactFields") \ 115950397Sobrien \ 116090075Sobrien notproduct(bool, PrintFieldLayout, false, \ 116150397Sobrien "Print field layout for each class") \ 116250397Sobrien \ 116350397Sobrien product(intx, ContendedPaddingWidth, 128, \ 116450397Sobrien "How many bytes to pad the fields/classes marked @Contended with")\ 116550397Sobrien \ 116690075Sobrien product(bool, EnableContended, true, \ 1167169689Skan "Enable @Contended annotation support") \ 1168169689Skan \ 116950397Sobrien product(bool, RestrictContended, true, \ 117050397Sobrien "Restrict @Contended to trusted classes") \ 1171132718Skan \ 1172132718Skan product(bool, UseBiasedLocking, true, \ 117390075Sobrien "Enable biased locking in JVM") \ 117490075Sobrien \ 117590075Sobrien product(intx, BiasedLockingStartupDelay, 4000, \ 117652284Sobrien "Number of milliseconds to wait before enabling biased locking") \ 1177132718Skan \ 117890075Sobrien diagnostic(bool, PrintBiasedLockingStatistics, false, \ 117990075Sobrien "Print statistics of biased locking in JVM") \ 118090075Sobrien \ 1181132718Skan product(intx, BiasedLockingBulkRebiasThreshold, 20, \ 1182169689Skan "Threshold of number of revocations per type to try to " \ 118390075Sobrien "rebias all objects in the heap of that type") \ 118452284Sobrien \ 1185132718Skan product(intx, BiasedLockingBulkRevokeThreshold, 40, \ 1186132718Skan "Threshold of number of revocations per type to permanently " \ 1187169689Skan "revoke biases of all objects in the heap of that type") \ 1188169689Skan \ 1189169689Skan product(intx, BiasedLockingDecayTime, 25000, \ 1190169689Skan "Decay time (in milliseconds) to re-enable bulk rebiasing of a " \ 1191169689Skan "type after previous bulk rebias") \ 1192169689Skan \ 1193169689Skan /* tracing */ \ 1194169689Skan \ 1195169689Skan notproduct(bool, TraceRuntimeCalls, false, \ 1196169689Skan "Trace run-time calls") \ 1197169689Skan \ 1198169689Skan develop(bool, TraceJNICalls, false, \ 1199169689Skan "Trace JNI calls") \ 1200132718Skan \ 120190075Sobrien notproduct(bool, TraceJVMCalls, false, \ 120250397Sobrien "Trace JVM calls") \ 1203169689Skan \ 1204169689Skan product(ccstr, TraceJVMTI, NULL, \ 1205169689Skan "Trace flags for JVMTI functions and events") \ 120652284Sobrien \ 1207169689Skan /* This option can change an EMCP method into an obsolete method. */ \ 120890075Sobrien /* This can affect tests that except specific methods to be EMCP. */ \ 1209169689Skan /* This option should be used with caution. */ \ 121090075Sobrien product(bool, StressLdcRewrite, false, \ 1211169689Skan "Force ldc -> ldc_w rewrite during RedefineClasses") \ 1212169689Skan \ 1213169689Skan product(intx, TraceRedefineClasses, 0, \ 1214169689Skan "Trace level for JVMTI RedefineClasses") \ 1215169689Skan \ 1216169689Skan develop(bool, StressMethodComparator, false, \ 1217169689Skan "run the MethodComparator on all loaded methods") \ 1218169689Skan \ 1219169689Skan /* change to false by default sometime after Mustang */ \ 1220169689Skan product(bool, VerifyMergedCPBytecodes, true, \ 1221169689Skan "Verify bytecodes after RedefineClasses constant pool merging") \ 1222169689Skan \ 1223169689Skan develop(bool, TraceJNIHandleAllocation, false, \ 1224169689Skan "Trace allocation/deallocation of JNI handle blocks") \ 122590075Sobrien \ 122690075Sobrien develop(bool, TraceThreadEvents, false, \ 1227169689Skan "Trace all thread events") \ 122890075Sobrien \ 122990075Sobrien develop(bool, TraceBytecodes, false, \ 123090075Sobrien "Trace bytecode execution") \ 123190075Sobrien \ 1232169689Skan develop(bool, TraceClassInitialization, false, \ 1233169689Skan "Trace class initialization") \ 123490075Sobrien \ 1235132718Skan develop(bool, TraceExceptions, false, \ 123690075Sobrien "Trace exceptions") \ 1237169689Skan \ 123890075Sobrien develop(bool, TraceICs, false, \ 1239169689Skan "Trace inline cache changes") \ 124090075Sobrien \ 1241169689Skan notproduct(bool, TraceInvocationCounterOverflow, false, \ 1242169689Skan "Trace method invocation counter overflow") \ 1243169689Skan \ 1244169689Skan develop(bool, TraceInlineCacheClearing, false, \ 1245169689Skan "Trace clearing of inline caches in nmethods") \ 1246169689Skan \ 1247169689Skan develop(bool, TraceDependencies, false, \ 1248169689Skan "Trace dependencies") \ 1249169689Skan \ 1250169689Skan develop(bool, VerifyDependencies, trueInDebug, \ 1251169689Skan "Exercise and verify the compilation dependency mechanism") \ 1252169689Skan \ 1253169689Skan develop(bool, TraceNewOopMapGeneration, false, \ 1254169689Skan "Trace OopMapGeneration") \ 1255169689Skan \ 1256169689Skan develop(bool, TraceNewOopMapGenerationDetailed, false, \ 1257169689Skan "Trace OopMapGeneration: print detailed cell states") \ 1258169689Skan \ 1259169689Skan develop(bool, TimeOopMap, false, \ 1260169689Skan "Time calls to GenerateOopMap::compute_map() in sum") \ 1261169689Skan \ 1262169689Skan develop(bool, TimeOopMap2, false, \ 1263169689Skan "Time calls to GenerateOopMap::compute_map() individually") \ 126490075Sobrien \ 126590075Sobrien develop(bool, TraceMonitorMismatch, false, \ 126690075Sobrien "Trace monitor matching failures during OopMapGeneration") \ 126790075Sobrien \ 126890075Sobrien develop(bool, TraceOopMapRewrites, false, \ 126990075Sobrien "Trace rewritting of method oops during oop map generation") \ 1270169689Skan \ 1271169689Skan develop(bool, TraceSafepoint, false, \ 1272169689Skan "Trace safepoint operations") \ 1273169689Skan \ 1274169689Skan develop(bool, TraceICBuffer, false, \ 127590075Sobrien "Trace usage of IC buffer") \ 1276132718Skan \ 127790075Sobrien develop(bool, TraceCompiledIC, false, \ 127890075Sobrien "Trace changes of compiled IC") \ 127990075Sobrien \ 1280117395Skan notproduct(bool, TraceZapDeadLocals, false, \ 1281169689Skan "Trace zapping dead locals") \ 1282169689Skan \ 1283169689Skan develop(bool, TraceStartupTime, false, \ 1284169689Skan "Trace setup time") \ 1285169689Skan \ 1286169689Skan develop(bool, TraceProtectionDomainVerification, false, \ 1287169689Skan "Trace protection domain verifcation") \ 1288169689Skan \ 1289169689Skan develop(bool, TraceClearedExceptions, false, \ 129090075Sobrien "Prints when an exception is forcibly cleared") \ 129190075Sobrien \ 129290075Sobrien product(bool, TraceClassResolution, false, \ 129390075Sobrien "Trace all constant pool resolutions (for debugging)") \ 1294169689Skan \ 1295117395Skan product(bool, TraceBiasedLocking, false, \ 1296169689Skan "Trace biased locking in JVM") \ 1297169689Skan \ 1298169689Skan product(bool, TraceMonitorInflation, false, \ 1299169689Skan "Trace monitor inflation in JVM") \ 1300169689Skan \ 1301169689Skan /* gc */ \ 1302169689Skan \ 1303169689Skan product(bool, UseSerialGC, false, \ 1304169689Skan "Use the serial garbage collector") \ 1305169689Skan \ 1306169689Skan product(bool, UseG1GC, false, \ 1307169689Skan "Use the Garbage-First garbage collector") \ 1308169689Skan \ 1309169689Skan product(bool, UseParallelGC, false, \ 1310169689Skan "Use the Parallel Scavenge garbage collector") \ 1311169689Skan \ 1312169689Skan product(bool, UseParallelOldGC, false, \ 1313169689Skan "Use the Parallel Old garbage collector") \ 1314169689Skan \ 1315169689Skan product(uintx, HeapMaximumCompactionInterval, 20, \ 1316169689Skan "How often should we maximally compact the heap (not allowing " \ 1317169689Skan "any dead space)") \ 1318169689Skan \ 1319169689Skan product(uintx, HeapFirstMaximumCompactionCount, 3, \ 1320169689Skan "The collection count for the first maximum compaction") \ 1321169689Skan \ 1322169689Skan product(bool, UseMaximumCompactionOnSystemGC, true, \ 1323169689Skan "In the Parallel Old garbage collector maximum compaction for " \ 1324169689Skan "a system GC") \ 1325169689Skan \ 1326169689Skan product(uintx, ParallelOldDeadWoodLimiterMean, 50, \ 1327169689Skan "The mean used by the par compact dead wood" \ 1328169689Skan "limiter (a number between 0-100).") \ 1329169689Skan \ 1330169689Skan product(uintx, ParallelOldDeadWoodLimiterStdDev, 80, \ 1331169689Skan "The standard deviation used by the par compact dead wood" \ 1332169689Skan "limiter (a number between 0-100).") \ 1333169689Skan \ 1334169689Skan product(uintx, ParallelGCThreads, 0, \ 1335169689Skan "Number of parallel threads parallel gc will use") \ 1336169689Skan \ 1337169689Skan product(bool, UseDynamicNumberOfGCThreads, false, \ 1338169689Skan "Dynamically choose the number of parallel threads " \ 1339169689Skan "parallel gc will use") \ 134090075Sobrien \ 134190075Sobrien diagnostic(bool, ForceDynamicNumberOfGCThreads, false, \ 134290075Sobrien "Force dynamic selection of the number of" \ 134390075Sobrien "parallel threads parallel gc will use to aid debugging") \ 134490075Sobrien \ 134590075Sobrien product(uintx, HeapSizePerGCThread, ScaleForWordSize(64*M), \ 134690075Sobrien "Size of heap (bytes) per GC thread used in calculating the " \ 1347169689Skan "number of GC threads") \ 1348169689Skan \ 134990075Sobrien product(bool, TraceDynamicGCThreads, false, \ 135090075Sobrien "Trace the dynamic GC thread usage") \ 135190075Sobrien \ 135290075Sobrien develop(bool, ParallelOldGCSplitALot, false, \ 135390075Sobrien "Provoke splitting (copying data from a young gen space to" \ 135490075Sobrien "multiple destination spaces)") \ 135590075Sobrien \ 135690075Sobrien develop(uintx, ParallelOldGCSplitInterval, 3, \ 135790075Sobrien "How often to provoke splitting a young gen space") \ 135890075Sobrien \ 135990075Sobrien product(uintx, ConcGCThreads, 0, \ 136090075Sobrien "Number of threads concurrent gc will use") \ 136190075Sobrien \ 136290075Sobrien product(uintx, YoungPLABSize, 4096, \ 136390075Sobrien "Size of young gen promotion labs (in HeapWords)") \ 136490075Sobrien \ 136590075Sobrien product(uintx, OldPLABSize, 1024, \ 136690075Sobrien "Size of old gen promotion labs (in HeapWords)") \ 136790075Sobrien \ 136890075Sobrien product(uintx, GCTaskTimeStampEntries, 200, \ 136990075Sobrien "Number of time stamp entries per gc worker thread") \ 137090075Sobrien \ 137190075Sobrien product(bool, AlwaysTenure, false, \ 1372169689Skan "Always tenure objects in eden. (ParallelGC only)") \ 1373169689Skan \ 1374169689Skan product(bool, NeverTenure, false, \ 1375169689Skan "Never tenure objects in eden, May tenure on overflow " \ 1376169689Skan "(ParallelGC only)") \ 137790075Sobrien \ 137890075Sobrien product(bool, ScavengeBeforeFullGC, true, \ 1379117395Skan "Scavenge youngest generation before each full GC, " \ 138090075Sobrien "used with UseParallelGC") \ 138190075Sobrien \ 138290075Sobrien develop(bool, ScavengeWithObjectsInToSpace, false, \ 1383169689Skan "Allow scavenges to occur when to_space contains objects.") \ 1384169689Skan \ 1385169689Skan product(bool, UseConcMarkSweepGC, false, \ 138690075Sobrien "Use Concurrent Mark-Sweep GC in the old generation") \ 138790075Sobrien \ 138890075Sobrien product(bool, ExplicitGCInvokesConcurrent, false, \ 138990075Sobrien "A System.gc() request invokes a concurrent collection;" \ 139090075Sobrien " (effective only when UseConcMarkSweepGC)") \ 139190075Sobrien \ 139290075Sobrien product(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false, \ 139390075Sobrien "A System.gc() request invokes a concurrent collection and " \ 139490075Sobrien "also unloads classes during such a concurrent gc cycle " \ 139590075Sobrien "(effective only when UseConcMarkSweepGC)") \ 139690075Sobrien \ 1397117395Skan product(bool, GCLockerInvokesConcurrent, false, \ 139890075Sobrien "The exit of a JNI CS necessitating a scavenge also" \ 1399132718Skan " kicks off a bkgrd concurrent collection") \ 140090075Sobrien \ 140190075Sobrien product(uintx, GCLockerEdenExpansionPercent, 5, \ 140290075Sobrien "How much the GC can expand the eden by while the GC locker " \ 140390075Sobrien "is active (as a percentage)") \ 140490075Sobrien \ 140590075Sobrien diagnostic(intx, GCLockerRetryAllocationCount, 2, \ 140690075Sobrien "Number of times to retry allocations when" \ 140790075Sobrien " blocked by the GC locker") \ 140890075Sobrien \ 140990075Sobrien develop(bool, UseCMSAdaptiveFreeLists, true, \ 141090075Sobrien "Use Adaptive Free Lists in the CMS generation") \ 141190075Sobrien \ 141290075Sobrien develop(bool, UseAsyncConcMarkSweepGC, true, \ 141390075Sobrien "Use Asynchronous Concurrent Mark-Sweep GC in the old generation")\ 141490075Sobrien \ 141590075Sobrien develop(bool, RotateCMSCollectionTypes, false, \ 141690075Sobrien "Rotate the CMS collections among concurrent and STW") \ 141790075Sobrien \ 141890075Sobrien product(bool, UseCMSBestFit, true, \ 141990075Sobrien "Use CMS best fit allocation strategy") \ 142090075Sobrien \ 142190075Sobrien product(bool, UseCMSCollectionPassing, true, \ 1422132718Skan "Use passing of collection from background to foreground") \ 142390075Sobrien \ 142490075Sobrien product(bool, UseParNewGC, false, \ 142590075Sobrien "Use parallel threads in the new generation.") \ 142690075Sobrien \ 142790075Sobrien product(bool, ParallelGCVerbose, false, \ 142890075Sobrien "Verbose output for parallel GC.") \ 142990075Sobrien \ 1430132718Skan product(intx, ParallelGCBufferWastePct, 10, \ 143190075Sobrien "wasted fraction of parallel allocation buffer.") \ 143290075Sobrien \ 143390075Sobrien diagnostic(bool, ParallelGCRetainPLAB, false, \ 143490075Sobrien "Retain parallel allocation buffers across scavenges; " \ 143590075Sobrien " -- disabled because this currently conflicts with " \ 143690075Sobrien " parallel card scanning under certain conditions ") \ 1437132718Skan \ 143890075Sobrien product(intx, TargetPLABWastePct, 10, \ 143990075Sobrien "target wasted space in last buffer as pct of overall allocation")\ 144090075Sobrien \ 144190075Sobrien product(uintx, PLABWeight, 75, \ 1442132718Skan "Percentage (0-100) used to weight the current sample when" \ 144390075Sobrien "computing exponentially decaying average for ResizePLAB.") \ 144490075Sobrien \ 144590075Sobrien product(bool, ResizePLAB, true, \ 144690075Sobrien "Dynamically resize (survivor space) promotion labs") \ 144790075Sobrien \ 144890075Sobrien product(bool, PrintPLAB, false, \ 144990075Sobrien "Print (survivor space) promotion labs sizing decisions") \ 1450132718Skan \ 145190075Sobrien product(intx, ParGCArrayScanChunk, 50, \ 1452132718Skan "Scan a subset and push remainder, if array is bigger than this") \ 145390075Sobrien \ 145490075Sobrien product(bool, ParGCUseLocalOverflow, false, \ 145590075Sobrien "Instead of a global overflow list, use local overflow stacks") \ 145690075Sobrien \ 1457132718Skan product(bool, ParGCTrimOverflow, true, \ 145890075Sobrien "Eagerly trim the local overflow lists (when ParGCUseLocalOverflow") \ 145990075Sobrien \ 146090075Sobrien notproduct(bool, ParGCWorkQueueOverflowALot, false, \ 146190075Sobrien "Whether we should simulate work queue overflow in ParNew") \ 146290075Sobrien \ 146390075Sobrien notproduct(uintx, ParGCWorkQueueOverflowInterval, 1000, \ 146490075Sobrien "An `interval' counter that determines how frequently " \ 146590075Sobrien "we simulate overflow; a smaller number increases frequency") \ 146690075Sobrien \ 146790075Sobrien product(uintx, ParGCDesiredObjsFromOverflowList, 20, \ 146890075Sobrien "The desired number of objects to claim from the overflow list") \ 146990075Sobrien \ 147090075Sobrien diagnostic(uintx, ParGCStridesPerThread, 2, \ 1471132718Skan "The number of strides per worker thread that we divide up the " \ 147290075Sobrien "card table scanning work into") \ 147390075Sobrien \ 147490075Sobrien diagnostic(intx, ParGCCardsPerStrideChunk, 256, \ 147590075Sobrien "The number of cards in each chunk of the parallel chunks used " \ 147690075Sobrien "during card table scanning") \ 147790075Sobrien \ 147890075Sobrien product(uintx, CMSParPromoteBlocksToClaim, 16, \ 147990075Sobrien "Number of blocks to attempt to claim when refilling CMS LAB for "\ 148090075Sobrien "parallel GC.") \ 148190075Sobrien \ 148290075Sobrien product(uintx, OldPLABWeight, 50, \ 148390075Sobrien "Percentage (0-100) used to weight the current sample when" \ 148490075Sobrien "computing exponentially decaying average for resizing CMSParPromoteBlocksToClaim.") \ 148590075Sobrien \ 148690075Sobrien product(bool, ResizeOldPLAB, true, \ 148790075Sobrien "Dynamically resize (old gen) promotion labs") \ 148890075Sobrien \ 148990075Sobrien product(bool, PrintOldPLAB, false, \ 149090075Sobrien "Print (old gen) promotion labs sizing decisions") \ 149190075Sobrien \ 149290075Sobrien product(uintx, CMSOldPLABMin, 16, \ 149390075Sobrien "Min size of CMS gen promotion lab caches per worker per blksize")\ 149490075Sobrien \ 149590075Sobrien product(uintx, CMSOldPLABMax, 1024, \ 149690075Sobrien "Max size of CMS gen promotion lab caches per worker per blksize")\ 149790075Sobrien \ 149890075Sobrien product(uintx, CMSOldPLABNumRefills, 4, \ 149990075Sobrien "Nominal number of refills of CMS gen promotion lab cache" \ 150090075Sobrien " per worker per block size") \ 150190075Sobrien \ 150290075Sobrien product(bool, CMSOldPLABResizeQuicker, false, \ 1503169689Skan "Whether to react on-the-fly during a scavenge to a sudden" \ 150490075Sobrien " change in block demand rate") \ 1505169689Skan \ 1506169689Skan product(uintx, CMSOldPLABToleranceFactor, 4, \ 1507169689Skan "The tolerance of the phase-change detector for on-the-fly" \ 1508169689Skan " PLAB resizing during a scavenge") \ 150990075Sobrien \ 1510132718Skan product(uintx, CMSOldPLABReactivityFactor, 2, \ 151150397Sobrien "The gain in the feedback loop for on-the-fly PLAB resizing" \ 151250397Sobrien " during a scavenge") \ 151390075Sobrien \ 151450397Sobrien product(bool, AlwaysPreTouch, false, \ 151590075Sobrien "It forces all freshly committed pages to be pre-touched.") \ 151690075Sobrien \ 151790075Sobrien product_pd(intx, CMSYoungGenPerWorker, \ 151890075Sobrien "The maximum size of young gen chosen by default per GC worker " \ 151990075Sobrien "thread available") \ 152090075Sobrien \ 152190075Sobrien product(bool, CMSIncrementalMode, false, \ 152252284Sobrien "Whether CMS GC should operate in \"incremental\" mode") \ 152352284Sobrien \ 152450397Sobrien product(uintx, CMSIncrementalDutyCycle, 10, \ 152552284Sobrien "CMS incremental mode duty cycle (a percentage, 0-100). If" \ 152690075Sobrien "CMSIncrementalPacing is enabled, then this is just the initial" \ 152790075Sobrien "value") \ 152890075Sobrien \ 152990075Sobrien product(bool, CMSIncrementalPacing, true, \ 153090075Sobrien "Whether the CMS incremental mode duty cycle should be " \ 153150397Sobrien "automatically adjusted") \ 153250397Sobrien \ 153390075Sobrien product(uintx, CMSIncrementalDutyCycleMin, 0, \ 1534169689Skan "Lower bound on the duty cycle when CMSIncrementalPacing is " \ 153550397Sobrien "enabled (a percentage, 0-100)") \ 153652284Sobrien \ 153752284Sobrien product(uintx, CMSIncrementalSafetyFactor, 10, \ 153850397Sobrien "Percentage (0-100) used to add conservatism when computing the " \ 1539169689Skan "duty cycle") \ 1540169689Skan \ 1541169689Skan product(uintx, CMSIncrementalOffset, 0, \ 1542169689Skan "Percentage (0-100) by which the CMS incremental mode duty cycle" \ 1543169689Skan " is shifted to the right within the period between young GCs") \ 1544169689Skan \ 1545169689Skan product(uintx, CMSExpAvgFactor, 50, \ 154650397Sobrien "Percentage (0-100) used to weight the current sample when" \ 154750397Sobrien "computing exponential averages for CMS statistics.") \ 154850397Sobrien \ 154950397Sobrien product(uintx, CMS_FLSWeight, 75, \ 155090075Sobrien "Percentage (0-100) used to weight the current sample when" \ 155190075Sobrien "computing exponentially decating averages for CMS FLS statistics.") \ 155290075Sobrien \ 155390075Sobrien product(uintx, CMS_FLSPadding, 1, \ 1554169689Skan "The multiple of deviation from mean to use for buffering" \ 1555169689Skan "against volatility in free list demand.") \ 1556169689Skan \ 1557169689Skan product(uintx, FLSCoalescePolicy, 2, \ 1558169689Skan "CMS: Aggression level for coalescing, increasing from 0 to 4") \ 1559169689Skan \ 1560169689Skan product(bool, FLSAlwaysCoalesceLarge, false, \ 1561169689Skan "CMS: Larger free blocks are always available for coalescing") \ 1562169689Skan \ 1563169689Skan product(double, FLSLargestBlockCoalesceProximity, 0.99, \ 1564169689Skan "CMS: the smaller the percentage the greater the coalition force")\ 1565169689Skan \ 1566169689Skan product(double, CMSSmallCoalSurplusPercent, 1.05, \ 156790075Sobrien "CMS: the factor by which to inflate estimated demand of small" \ 1568169689Skan " block sizes to prevent coalescing with an adjoining block") \ 1569169689Skan \ 1570169689Skan product(double, CMSLargeCoalSurplusPercent, 0.95, \ 1571169689Skan "CMS: the factor by which to inflate estimated demand of large" \ 1572169689Skan " block sizes to prevent coalescing with an adjoining block") \ 1573169689Skan \ 1574169689Skan product(double, CMSSmallSplitSurplusPercent, 1.10, \ 1575169689Skan "CMS: the factor by which to inflate estimated demand of small" \ 157690075Sobrien " block sizes to prevent splitting to supply demand for smaller" \ 157750397Sobrien " blocks") \ 157890075Sobrien \ 157990075Sobrien product(double, CMSLargeSplitSurplusPercent, 1.00, \ 158090075Sobrien "CMS: the factor by which to inflate estimated demand of large" \ 158190075Sobrien " block sizes to prevent splitting to supply demand for smaller" \ 158290075Sobrien " blocks") \ 158390075Sobrien \ 158490075Sobrien product(bool, CMSExtrapolateSweep, false, \ 158590075Sobrien "CMS: cushion for block demand during sweep") \ 158690075Sobrien \ 158790075Sobrien product(uintx, CMS_SweepWeight, 75, \ 158890075Sobrien "Percentage (0-100) used to weight the current sample when " \ 158990075Sobrien "computing exponentially decaying average for inter-sweep " \ 159090075Sobrien "duration") \ 1591169689Skan \ 1592169689Skan product(uintx, CMS_SweepPadding, 1, \ 159390075Sobrien "The multiple of deviation from mean to use for buffering " \ 159490075Sobrien "against volatility in inter-sweep duration.") \ 159590075Sobrien \ 1596169689Skan product(uintx, CMS_SweepTimerThresholdMillis, 10, \ 159790075Sobrien "Skip block flux-rate sampling for an epoch unless inter-sweep " \ 159850397Sobrien "duration exceeds this threhold in milliseconds") \ 159990075Sobrien \ 160090075Sobrien develop(bool, CMSTraceIncrementalMode, false, \ 160190075Sobrien "Trace CMS incremental mode") \ 1602169689Skan \ 160390075Sobrien develop(bool, CMSTraceIncrementalPacing, false, \ 160490075Sobrien "Trace CMS incremental mode pacing computation") \ 160590075Sobrien \ 160690075Sobrien develop(bool, CMSTraceThreadState, false, \ 160790075Sobrien "Trace the CMS thread state (enable the trace_state() method)") \ 1608169689Skan \ 1609169689Skan product(bool, CMSClassUnloadingEnabled, true, \ 161050397Sobrien "Whether class unloading enabled when using CMS GC") \ 161190075Sobrien \ 161290075Sobrien product(uintx, CMSClassUnloadingMaxInterval, 0, \ 161390075Sobrien "When CMS class unloading is enabled, the maximum CMS cycle count"\ 161490075Sobrien " for which classes may not be unloaded") \ 161590075Sobrien \ 161690075Sobrien product(bool, CMSCompactWhenClearAllSoftRefs, true, \ 161790075Sobrien "Compact when asked to collect CMS gen with clear_all_soft_refs") \ 161890075Sobrien \ 161990075Sobrien product(bool, UseCMSCompactAtFullCollection, true, \ 162090075Sobrien "Use mark sweep compact at full collections") \ 162190075Sobrien \ 162290075Sobrien product(uintx, CMSFullGCsBeforeCompaction, 0, \ 1623169689Skan "Number of CMS full collection done before compaction if > 0") \ 162450397Sobrien \ 1625169689Skan develop(intx, CMSDictionaryChoice, 0, \ 1626169689Skan "Use BinaryTreeDictionary as default in the CMS generation") \ 1627169689Skan \ 1628169689Skan product(uintx, CMSIndexedFreeListReplenish, 4, \ 1629169689Skan "Replenish an indexed free list with this number of chunks") \ 1630169689Skan \ 1631169689Skan product(bool, CMSReplenishIntermediate, true, \ 1632169689Skan "Replenish all intermediate free-list caches") \ 163390075Sobrien \ 163490075Sobrien product(bool, CMSSplitIndexedFreeListBlocks, true, \ 163590075Sobrien "When satisfying batched demand, split blocks from the " \ 1636169689Skan "IndexedFreeList whose size is a multiple of requested size") \ 163750397Sobrien \ 163890075Sobrien product(bool, CMSLoopWarn, false, \ 1639169689Skan "Warn in case of excessive CMS looping") \ 164090075Sobrien \ 164190075Sobrien develop(bool, CMSOverflowEarlyRestoration, false, \ 164290075Sobrien "Whether preserved marks should be restored early") \ 164390075Sobrien \ 164490075Sobrien product(uintx, MarkStackSize, NOT_LP64(32*K) LP64_ONLY(4*M), \ 164590075Sobrien "Size of marking stack") \ 164690075Sobrien \ 164790075Sobrien product(uintx, MarkStackSizeMax, NOT_LP64(4*M) LP64_ONLY(512*M), \ 164890075Sobrien "Max size of marking stack") \ 164990075Sobrien \ 165090075Sobrien notproduct(bool, CMSMarkStackOverflowALot, false, \ 165190075Sobrien "Whether we should simulate frequent marking stack / work queue" \ 165250397Sobrien " overflow") \ 165390075Sobrien \ 1654169689Skan notproduct(uintx, CMSMarkStackOverflowInterval, 1000, \ 165590075Sobrien "An `interval' counter that determines how frequently" \ 165690075Sobrien " we simulate overflow; a smaller number increases frequency") \ 165790075Sobrien \ 165890075Sobrien product(uintx, CMSMaxAbortablePrecleanLoops, 0, \ 165990075Sobrien "(Temporary, subject to experimentation)" \ 1660169689Skan "Maximum number of abortable preclean iterations, if > 0") \ 166190075Sobrien \ 166290075Sobrien product(intx, CMSMaxAbortablePrecleanTime, 5000, \ 166390075Sobrien "(Temporary, subject to experimentation)" \ 166450397Sobrien "Maximum time in abortable preclean in ms") \ 166590075Sobrien \ 166690075Sobrien product(uintx, CMSAbortablePrecleanMinWorkPerIteration, 100, \ 166790075Sobrien "(Temporary, subject to experimentation)" \ 166890075Sobrien "Nominal minimum work per abortable preclean iteration") \ 166990075Sobrien \ 167090075Sobrien manageable(intx, CMSAbortablePrecleanWaitMillis, 100, \ 167190075Sobrien "(Temporary, subject to experimentation)" \ 167290075Sobrien " Time that we sleep between iterations when not given" \ 1673169689Skan " enough work per iteration") \ 167490075Sobrien \ 167590075Sobrien product(uintx, CMSRescanMultiple, 32, \ 167650397Sobrien "Size (in cards) of CMS parallel rescan task") \ 167790075Sobrien \ 167890075Sobrien product(uintx, CMSConcMarkMultiple, 32, \ 167990075Sobrien "Size (in cards) of CMS concurrent MT marking task") \ 168090075Sobrien \ 168190075Sobrien product(bool, CMSAbortSemantics, false, \ 168250397Sobrien "Whether abort-on-overflow semantics is implemented") \ 168390075Sobrien \ 168490075Sobrien product(bool, CMSParallelRemarkEnabled, true, \ 1685169689Skan "Whether parallel remark enabled (only if ParNewGC)") \ 1686169689Skan \ 1687169689Skan product(bool, CMSParallelSurvivorRemarkEnabled, true, \ 168850397Sobrien "Whether parallel remark of survivor space" \ 168990075Sobrien " enabled (effective only if CMSParallelRemarkEnabled)") \ 169090075Sobrien \ 169190075Sobrien product(bool, CMSPLABRecordAlways, true, \ 169290075Sobrien "Whether to always record survivor space PLAB bdries" \ 169350397Sobrien " (effective only if CMSParallelSurvivorRemarkEnabled)") \ 169490075Sobrien \ 169590075Sobrien product(bool, CMSConcurrentMTEnabled, true, \ 169690075Sobrien "Whether multi-threaded concurrent work enabled (if ParNewGC)") \ 169790075Sobrien \ 169890075Sobrien product(bool, CMSPrecleaningEnabled, true, \ 169950397Sobrien "Whether concurrent precleaning enabled") \ 1700169689Skan \ 1701169689Skan product(uintx, CMSPrecleanIter, 3, \ 1702169689Skan "Maximum number of precleaning iteration passes") \ 1703169689Skan \ 1704169689Skan product(uintx, CMSPrecleanNumerator, 2, \ 1705169689Skan "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence" \ 1706169689Skan " ratio") \ 170790075Sobrien \ 1708169689Skan product(uintx, CMSPrecleanDenominator, 3, \ 170990075Sobrien "CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence" \ 171050397Sobrien " ratio") \ 171190075Sobrien \ 171290075Sobrien product(bool, CMSPrecleanRefLists1, true, \ 171350397Sobrien "Preclean ref lists during (initial) preclean phase") \ 171490075Sobrien \ 1715169689Skan product(bool, CMSPrecleanRefLists2, false, \ 171652284Sobrien "Preclean ref lists during abortable preclean phase") \ 171790075Sobrien \ 171890075Sobrien product(bool, CMSPrecleanSurvivors1, false, \ 171990075Sobrien "Preclean survivors during (initial) preclean phase") \ 172090075Sobrien \ 172190075Sobrien product(bool, CMSPrecleanSurvivors2, true, \ 172290075Sobrien "Preclean survivors during abortable preclean phase") \ 172390075Sobrien \ 172490075Sobrien product(uintx, CMSPrecleanThreshold, 1000, \ 1725169689Skan "Don't re-iterate if #dirty cards less than this") \ 1726169689Skan \ 172790075Sobrien product(bool, CMSCleanOnEnter, true, \ 172890075Sobrien "Clean-on-enter optimization for reducing number of dirty cards") \ 1729169689Skan \ 1730169689Skan product(uintx, CMSRemarkVerifyVariant, 1, \ 173190075Sobrien "Choose variant (1,2) of verification following remark") \ 173290075Sobrien \ 173390075Sobrien product(uintx, CMSScheduleRemarkEdenSizeThreshold, 2*M, \ 173490075Sobrien "If Eden used is below this value, don't try to schedule remark") \ 173590075Sobrien \ 173690075Sobrien product(uintx, CMSScheduleRemarkEdenPenetration, 50, \ 173790075Sobrien "The Eden occupancy % at which to try and schedule remark pause") \ 173890075Sobrien \ 173990075Sobrien product(uintx, CMSScheduleRemarkSamplingRatio, 5, \ 174090075Sobrien "Start sampling Eden top at least before yg occupancy reaches" \ 174190075Sobrien " 1/<ratio> of the size at which we plan to schedule remark") \ 174290075Sobrien \ 174390075Sobrien product(uintx, CMSSamplingGrain, 16*K, \ 174490075Sobrien "The minimum distance between eden samples for CMS (see above)") \ 174590075Sobrien \ 1746169689Skan product(bool, CMSScavengeBeforeRemark, false, \ 1747169689Skan "Attempt scavenge before the CMS remark step") \ 174890075Sobrien \ 174990075Sobrien develop(bool, CMSTraceSweeper, false, \ 175090075Sobrien "Trace some actions of the CMS sweeper") \ 175190075Sobrien \ 175290075Sobrien product(uintx, CMSWorkQueueDrainThreshold, 10, \ 175390075Sobrien "Don't drain below this size per parallel worker/thief") \ 175490075Sobrien \ 175590075Sobrien manageable(intx, CMSWaitDuration, 2000, \ 175690075Sobrien "Time in milliseconds that CMS thread waits for young GC") \ 175790075Sobrien \ 175890075Sobrien develop(uintx, CMSCheckInterval, 1000, \ 175990075Sobrien "Interval in milliseconds that CMS thread checks if it " \ 176090075Sobrien "should start a collection cycle") \ 1761169689Skan \ 1762169689Skan product(bool, CMSYield, true, \ 176390075Sobrien "Yield between steps of concurrent mark & sweep") \ 1764169689Skan \ 1765169689Skan product(uintx, CMSBitMapYieldQuantum, 10*M, \ 1766169689Skan "Bitmap operations should process at most this many bits" \ 1767169689Skan "between yields") \ 1768169689Skan \ 1769169689Skan product(bool, CMSDumpAtPromotionFailure, false, \ 1770169689Skan "Dump useful information about the state of the CMS old " \ 1771169689Skan " generation upon a promotion failure.") \ 1772169689Skan \ 1773169689Skan product(bool, CMSPrintChunksInDump, false, \ 1774169689Skan "In a dump enabled by CMSDumpAtPromotionFailure, include " \ 1775169689Skan " more detailed information about the free chunks.") \ 1776169689Skan \ 1777169689Skan product(bool, CMSPrintObjectsInDump, false, \ 1778169689Skan "In a dump enabled by CMSDumpAtPromotionFailure, include " \ 1779169689Skan " more detailed information about the allocated objects.") \ 178090075Sobrien \ 178190075Sobrien diagnostic(bool, FLSVerifyAllHeapReferences, false, \ 178290075Sobrien "Verify that all refs across the FLS boundary " \ 178390075Sobrien " are to valid objects") \ 178490075Sobrien \ 1785169689Skan diagnostic(bool, FLSVerifyLists, false, \ 1786169689Skan "Do lots of (expensive) FreeListSpace verification") \ 1787169689Skan \ 1788169689Skan diagnostic(bool, FLSVerifyIndexTable, false, \ 1789169689Skan "Do lots of (expensive) FLS index table verification") \ 1790169689Skan \ 1791169689Skan develop(bool, FLSVerifyDictionary, false, \ 1792169689Skan "Do lots of (expensive) FLS dictionary verification") \ 1793169689Skan \ 1794169689Skan develop(bool, VerifyBlockOffsetArray, false, \ 1795169689Skan "Do (expensive!) block offset array verification") \ 179690075Sobrien \ 179790075Sobrien diagnostic(bool, BlockOffsetArrayUseUnallocatedBlock, false, \ 179890075Sobrien "Maintain _unallocated_block in BlockOffsetArray" \ 179990075Sobrien " (currently applicable only to CMS collector)") \ 1800169689Skan \ 1801169689Skan develop(bool, TraceCMSState, false, \ 180290075Sobrien "Trace the state of the CMS collection") \ 180390075Sobrien \ 180490075Sobrien product(intx, RefDiscoveryPolicy, 0, \ 180590075Sobrien "Whether reference-based(0) or referent-based(1)") \ 180690075Sobrien \ 1807169689Skan product(bool, ParallelRefProcEnabled, false, \ 180890075Sobrien "Enable parallel reference processing whenever possible") \ 180990075Sobrien \ 181090075Sobrien product(bool, ParallelRefProcBalancingEnabled, true, \ 181190075Sobrien "Enable balancing of reference processing queues") \ 181290075Sobrien \ 181390075Sobrien product(uintx, CMSTriggerRatio, 80, \ 181490075Sobrien "Percentage of MinHeapFreeRatio in CMS generation that is " \ 181590075Sobrien "allocated before a CMS collection cycle commences") \ 181690075Sobrien \ 181790075Sobrien product(uintx, CMSBootstrapOccupancy, 50, \ 181890075Sobrien "Percentage CMS generation occupancy at which to " \ 181990075Sobrien "initiate CMS collection for bootstrapping collection stats") \ 182090075Sobrien \ 182190075Sobrien product(intx, CMSInitiatingOccupancyFraction, -1, \ 1822169689Skan "Percentage CMS generation occupancy to start a CMS collection " \ 182390075Sobrien "cycle. A negative value means that CMSTriggerRatio is used") \ 182490075Sobrien \ 182590075Sobrien product(uintx, InitiatingHeapOccupancyPercent, 45, \ 182690075Sobrien "Percentage of the (entire) heap occupancy to start a " \ 182790075Sobrien "concurrent GC cycle. It is used by GCs that trigger a " \ 1828132718Skan "concurrent GC cycle based on the occupancy of the entire heap, " \ 182990075Sobrien "not just one of the generations (e.g., G1). A value of 0 " \ 183090075Sobrien "denotes 'do constant GC cycles'.") \ 1831169689Skan \ 183290075Sobrien product(bool, UseCMSInitiatingOccupancyOnly, false, \ 1833169689Skan "Only use occupancy as a crierion for starting a CMS collection") \ 183490075Sobrien \ 183590075Sobrien product(intx, CMSIsTooFullPercentage, 98, \ 183690075Sobrien "An absolute ceiling above which CMS will always consider the " \ 183790075Sobrien "unloading of classes when class unloading is enabled") \ 183890075Sobrien \ 183990075Sobrien develop(bool, CMSTestInFreeList, false, \ 184090075Sobrien "Check if the coalesced range is already in the " \ 184190075Sobrien "free lists as claimed") \ 184290075Sobrien \ 184390075Sobrien notproduct(bool, CMSVerifyReturnedBytes, false, \ 1844169689Skan "Check that all the garbage collected was returned to the " \ 184590075Sobrien "free lists.") \ 184690075Sobrien \ 184790075Sobrien notproduct(bool, ScavengeALot, false, \ 1848169689Skan "Force scavenge at every Nth exit from the runtime system " \ 184990075Sobrien "(N=ScavengeALotInterval)") \ 185052284Sobrien \ 185152284Sobrien develop(bool, FullGCALot, false, \ 185252284Sobrien "Force full gc at every Nth exit from the runtime system " \ 185352284Sobrien "(N=FullGCALotInterval)") \ 1854169689Skan \ 185552284Sobrien notproduct(bool, GCALotAtAllSafepoints, false, \ 1856169689Skan "Enforce ScavengeALot/GCALot at all potential safepoints") \ 1857169689Skan \ 1858169689Skan product(bool, PrintPromotionFailure, false, \ 185952284Sobrien "Print additional diagnostic information following " \ 1860169689Skan " promotion failure") \ 186152284Sobrien \ 186290075Sobrien notproduct(bool, PromotionFailureALot, false, \ 186352284Sobrien "Use promotion failure handling on every youngest generation " \ 186452284Sobrien "collection") \ 186552284Sobrien \ 186652284Sobrien develop(uintx, PromotionFailureALotCount, 1000, \ 1867169689Skan "Number of promotion failures occurring at ParGCAllocBuffer" \ 1868169689Skan "refill attempts (ParNew) or promotion attempts " \ 186990075Sobrien "(other young collectors) ") \ 187090075Sobrien \ 187190075Sobrien develop(uintx, PromotionFailureALotInterval, 5, \ 187252284Sobrien "Total collections between promotion failures alot") \ 187390075Sobrien \ 1874169689Skan experimental(intx, WorkStealingSleepMillis, 1, \ 1875169689Skan "Sleep time when sleep is used for yields") \ 187690075Sobrien \ 187790075Sobrien experimental(uintx, WorkStealingYieldsBeforeSleep, 5000, \ 187890075Sobrien "Number of yields before a sleep is done during workstealing") \ 187990075Sobrien \ 188090075Sobrien experimental(uintx, WorkStealingHardSpins, 4096, \ 1881169689Skan "Number of iterations in a spin loop between checks on " \ 1882169689Skan "time out of hard spin") \ 1883169689Skan \ 1884169689Skan experimental(uintx, WorkStealingSpinToYieldRatio, 10, \ 1885169689Skan "Ratio of hard spins to calls to yield") \ 1886169689Skan \ 1887169689Skan develop(uintx, ObjArrayMarkingStride, 512, \ 188852284Sobrien "Number of ObjArray elements to push onto the marking stack" \ 188950397Sobrien "before pushing a continuation entry") \ 189052284Sobrien \ 1891169689Skan develop(bool, MetadataAllocationFailALot, false, \ 189290075Sobrien "Fail metadata allocations at intervals controlled by " \ 189390075Sobrien "MetadataAllocationFailALotInterval") \ 189452284Sobrien \ 189552284Sobrien develop(uintx, MetadataAllocationFailALotInterval, 1000, \ 189690075Sobrien "metadata allocation failure alot interval") \ 1897169689Skan \ 189852284Sobrien develop(bool, MetaDataDeallocateALot, false, \ 189952284Sobrien "Deallocation bunches of metadata at intervals controlled by " \ 190052284Sobrien "MetaDataAllocateALotInterval") \ 190152284Sobrien \ 190252284Sobrien develop(uintx, MetaDataDeallocateALotInterval, 100, \ 190352284Sobrien "Metadata deallocation alot interval") \ 190452284Sobrien \ 190590075Sobrien develop(bool, TraceMetadataChunkAllocation, false, \ 190652284Sobrien "Trace chunk metadata allocations") \ 190752284Sobrien \ 190852284Sobrien product(bool, TraceMetadataHumongousAllocation, false, \ 190950397Sobrien "Trace humongous metadata allocations") \ 191050397Sobrien \ 1911132718Skan develop(bool, TraceMetavirtualspaceAllocation, false, \ 1912132718Skan "Trace virtual space metadata allocations") \ 1913132718Skan \ 1914132718Skan notproduct(bool, ExecuteInternalVMTests, false, \ 1915132718Skan "Enable execution of internal VM tests.") \ 1916132718Skan \ 1917132718Skan product_pd(bool, UseTLAB, "Use thread-local object allocation") \ 1918132718Skan \ 1919132718Skan product_pd(bool, ResizeTLAB, \ 1920132718Skan "Dynamically resize tlab size for threads") \ 1921132718Skan \ 1922132718Skan product(bool, ZeroTLAB, false, \ 1923132718Skan "Zero out the newly created TLAB") \ 1924132718Skan \ 1925132718Skan product(bool, FastTLABRefill, true, \ 1926132718Skan "Use fast TLAB refill code") \ 1927132718Skan \ 1928132718Skan product(bool, PrintTLAB, false, \ 1929132718Skan "Print various TLAB related information") \ 1930132718Skan \ 1931132718Skan product(bool, TLABStats, true, \ 1932132718Skan "Print various TLAB related information") \ 1933132718Skan \ 1934132718Skan EMBEDDED_ONLY(product(bool, LowMemoryProtection, true, \ 1935132718Skan "Enable LowMemoryProtection")) \ 1936132718Skan \ 1937132718Skan product_pd(bool, NeverActAsServerClassMachine, \ 1938132718Skan "Never act like a server-class machine") \ 1939132718Skan \ 1940132718Skan product(bool, AlwaysActAsServerClassMachine, false, \ 1941132718Skan "Always act like a server-class machine") \ 1942132718Skan \ 1943132718Skan product_pd(uint64_t, MaxRAM, \ 1944132718Skan "Real memory size (in bytes) used to set maximum heap size") \ 1945132718Skan \ 1946132718Skan product(uintx, ErgoHeapSizeLimit, 0, \ 1947132718Skan "Maximum ergonomically set heap size (in bytes); zero means use " \ 1948132718Skan "MaxRAM / MaxRAMFraction") \ 1949132718Skan \ 1950132718Skan product(uintx, MaxRAMFraction, 4, \ 1951132718Skan "Maximum fraction (1/n) of real memory used for maximum heap " \ 1952132718Skan "size") \ 1953132718Skan \ 1954132718Skan product(uintx, DefaultMaxRAMFraction, 4, \ 1955169689Skan "Maximum fraction (1/n) of real memory used for maximum heap " \ 1956132718Skan "size; deprecated: to be renamed to MaxRAMFraction") \ 1957132718Skan \ 1958132718Skan product(uintx, MinRAMFraction, 2, \ 1959132718Skan "Minimum fraction (1/n) of real memory used for maxmimum heap " \ 1960132718Skan "size on systems with small physical memory size") \ 1961132718Skan \ 1962132718Skan product(uintx, InitialRAMFraction, 64, \ 1963132718Skan "Fraction (1/n) of real memory used for initial heap size") \ 1964132718Skan \ 1965132718Skan develop(uintx, MaxVirtMemFraction, 2, \ 1966132718Skan "Maximum fraction (1/n) of virtual memory used for ergonomically" \ 1967132718Skan "determining maximum heap size") \ 1968132718Skan \ 1969132718Skan product(bool, UseAutoGCSelectPolicy, false, \ 1970132718Skan "Use automatic collection selection policy") \ 1971132718Skan \ 1972132718Skan product(uintx, AutoGCSelectPauseMillis, 5000, \ 1973132718Skan "Automatic GC selection pause threshhold in ms") \ 1974132718Skan \ 1975132718Skan product(bool, UseAdaptiveSizePolicy, true, \ 1976132718Skan "Use adaptive generation sizing policies") \ 1977132718Skan \ 1978132718Skan product(bool, UsePSAdaptiveSurvivorSizePolicy, true, \ 1979132718Skan "Use adaptive survivor sizing policies") \ 1980132718Skan \ 1981132718Skan product(bool, UseAdaptiveGenerationSizePolicyAtMinorCollection, true, \ 1982132718Skan "Use adaptive young-old sizing policies at minor collections") \ 1983132718Skan \ 1984132718Skan product(bool, UseAdaptiveGenerationSizePolicyAtMajorCollection, true, \ 1985169689Skan "Use adaptive young-old sizing policies at major collections") \ 1986169689Skan \ 1987169689Skan product(bool, UseAdaptiveSizePolicyWithSystemGC, false, \ 1988169689Skan "Use statistics from System.GC for adaptive size policy") \ 1989169689Skan \ 1990169689Skan product(bool, UseAdaptiveGCBoundary, false, \ 1991169689Skan "Allow young-old boundary to move") \ 1992169689Skan \ 1993169689Skan develop(bool, TraceAdaptiveGCBoundary, false, \ 1994169689Skan "Trace young-old boundary moves") \ 1995169689Skan \ 1996169689Skan develop(intx, PSAdaptiveSizePolicyResizeVirtualSpaceAlot, -1, \ 1997169689Skan "Resize the virtual spaces of the young or old generations") \ 1998169689Skan \ 1999169689Skan product(uintx, AdaptiveSizeThroughPutPolicy, 0, \ 2000169689Skan "Policy for changeing generation size for throughput goals") \ 2001169689Skan \ 2002169689Skan product(uintx, AdaptiveSizePausePolicy, 0, \ 2003169689Skan "Policy for changing generation size for pause goals") \ 2004169689Skan \ 2005169689Skan develop(bool, PSAdjustTenuredGenForMinorPause, false, \ 2006169689Skan "Adjust tenured generation to achive a minor pause goal") \ 2007169689Skan \ 2008169689Skan develop(bool, PSAdjustYoungGenForMajorPause, false, \ 2009169689Skan "Adjust young generation to achive a major pause goal") \ 2010169689Skan \ 2011169689Skan product(uintx, AdaptiveSizePolicyInitializingSteps, 20, \ 2012169689Skan "Number of steps where heuristics is used before data is used") \ 2013169689Skan \ 2014169689Skan develop(uintx, AdaptiveSizePolicyReadyThreshold, 5, \ 2015169689Skan "Number of collections before the adaptive sizing is started") \ 2016169689Skan \ 2017169689Skan product(uintx, AdaptiveSizePolicyOutputInterval, 0, \ 2018169689Skan "Collecton interval for printing information; zero => never") \ 2019169689Skan \ 2020169689Skan product(bool, UseAdaptiveSizePolicyFootprintGoal, true, \ 2021169689Skan "Use adaptive minimum footprint as a goal") \ 2022169689Skan \ 2023169689Skan product(uintx, AdaptiveSizePolicyWeight, 10, \ 2024132718Skan "Weight given to exponential resizing, between 0 and 100") \ 2025132718Skan \ 2026169689Skan product(uintx, AdaptiveTimeWeight, 25, \ 2027169689Skan "Weight given to time in adaptive policy, between 0 and 100") \ 2028169689Skan \ 2029169689Skan product(uintx, PausePadding, 1, \ 2030169689Skan "How much buffer to keep for pause time") \ 2031169689Skan \ 2032169689Skan product(uintx, PromotedPadding, 3, \ 2033169689Skan "How much buffer to keep for promotion failure") \ 2034169689Skan \ 2035169689Skan product(uintx, SurvivorPadding, 3, \ 2036169689Skan "How much buffer to keep for survivor overflow") \ 2037169689Skan \ 2038169689Skan product(uintx, ThresholdTolerance, 10, \ 2039169689Skan "Allowed collection cost difference between generations") \ 2040169689Skan \ 204150397Sobrien product(uintx, AdaptiveSizePolicyCollectionCostMargin, 50, \ 204250397Sobrien "If collection costs are within margin, reduce both by full " \ 204350397Sobrien "delta") \ 2044132718Skan \ 204550397Sobrien product(uintx, YoungGenerationSizeIncrement, 20, \ 2046132718Skan "Adaptive size percentage change in young generation") \ 204750397Sobrien \ 204890075Sobrien product(uintx, YoungGenerationSizeSupplement, 80, \ 204990075Sobrien "Supplement to YoungedGenerationSizeIncrement used at startup") \ 2050132718Skan \ 205190075Sobrien product(uintx, YoungGenerationSizeSupplementDecay, 8, \ 205250397Sobrien "Decay factor to YoungedGenerationSizeSupplement") \ 205350397Sobrien \ 2054132718Skan product(uintx, TenuredGenerationSizeIncrement, 20, \ 2055132718Skan "Adaptive size percentage change in tenured generation") \ 2056132718Skan \ 205790075Sobrien product(uintx, TenuredGenerationSizeSupplement, 80, \ 205850397Sobrien "Supplement to TenuredGenerationSizeIncrement used at startup") \ 205950397Sobrien \ 2060132718Skan product(uintx, TenuredGenerationSizeSupplementDecay, 2, \ 2061132718Skan "Decay factor to TenuredGenerationSizeIncrement") \ 2062132718Skan \ 2063132718Skan product(uintx, MaxGCPauseMillis, max_uintx, \ 2064132718Skan "Adaptive size policy maximum GC pause time goal in msec, " \ 206550397Sobrien "or (G1 Only) the max. GC time per MMU time slice") \ 206650397Sobrien \ 206790075Sobrien product(uintx, GCPauseIntervalMillis, 0, \ 206890075Sobrien "Time slice for MMU specification") \ 206950397Sobrien \ 207050397Sobrien product(uintx, MaxGCMinorPauseMillis, max_uintx, \ 207150397Sobrien "Adaptive size policy maximum GC minor pause time goal in msec") \ 207250397Sobrien \ 207390075Sobrien product(uintx, GCTimeRatio, 99, \ 207490075Sobrien "Adaptive size policy application time to GC time ratio") \ 207590075Sobrien \ 207690075Sobrien product(uintx, AdaptiveSizeDecrementScaleFactor, 4, \ 2077169689Skan "Adaptive size scale down factor for shrinking") \ 207890075Sobrien \ 207990075Sobrien product(bool, UseAdaptiveSizeDecayMajorGCCost, true, \ 208090075Sobrien "Adaptive size decays the major cost for long major intervals") \ 2081169689Skan \ 208250397Sobrien product(uintx, AdaptiveSizeMajorGCDecayTimeScale, 10, \ 208390075Sobrien "Time scale over which major costs decay") \ 208450397Sobrien \ 208590075Sobrien product(uintx, MinSurvivorRatio, 3, \ 208690075Sobrien "Minimum ratio of young generation/survivor space size") \ 208750397Sobrien \ 208850397Sobrien product(uintx, InitialSurvivorRatio, 8, \ 208990075Sobrien "Initial ratio of eden/survivor space size") \ 209050397Sobrien \ 209190075Sobrien product(uintx, BaseFootPrintEstimate, 256*M, \ 209290075Sobrien "Estimate of footprint other than Java Heap") \ 209350397Sobrien \ 209450397Sobrien product(bool, UseGCOverheadLimit, true, \ 209590075Sobrien "Use policy to limit of proportion of time spent in GC " \ 209650397Sobrien "before an OutOfMemory error is thrown") \ 209790075Sobrien \ 209890075Sobrien product(uintx, GCTimeLimit, 98, \ 209950397Sobrien "Limit of proportion of time spent in GC before an OutOfMemory" \ 210050397Sobrien "error is thrown (used with GCHeapFreeLimit)") \ 210190075Sobrien \ 210250397Sobrien product(uintx, GCHeapFreeLimit, 2, \ 210390075Sobrien "Minimum percentage of free space after a full GC before an " \ 210490075Sobrien "OutOfMemoryError is thrown (used with GCTimeLimit)") \ 210590075Sobrien \ 210650397Sobrien develop(uintx, AdaptiveSizePolicyGCTimeLimitThreshold, 5, \ 210790075Sobrien "Number of consecutive collections before gc time limit fires") \ 210850397Sobrien \ 210950397Sobrien product(bool, PrintAdaptiveSizePolicy, false, \ 2110132718Skan "Print information about AdaptiveSizePolicy") \ 2111132718Skan \ 211290075Sobrien product(intx, PrefetchCopyIntervalInBytes, -1, \ 211350397Sobrien "How far ahead to prefetch destination area (<= 0 means off)") \ 211490075Sobrien \ 211590075Sobrien product(intx, PrefetchScanIntervalInBytes, -1, \ 211690075Sobrien "How far ahead to prefetch scan area (<= 0 means off)") \ 2117132718Skan \ 2118132718Skan product(intx, PrefetchFieldsAhead, -1, \ 211990075Sobrien "How many fields ahead to prefetch in oop scan (<= 0 means off)") \ 212090075Sobrien \ 212190075Sobrien diagnostic(bool, VerifyBeforeExit, trueInDebug, \ 212250397Sobrien "Verify system before exiting") \ 212350397Sobrien \ 212450397Sobrien diagnostic(bool, VerifyBeforeGC, false, \ 212550397Sobrien "Verify memory system before GC") \ 2126132718Skan \ 2127132718Skan diagnostic(bool, VerifyAfterGC, false, \ 212850397Sobrien "Verify memory system after GC") \ 212990075Sobrien \ 213050397Sobrien diagnostic(bool, VerifyDuringGC, false, \ 2131132718Skan "Verify memory system during GC (between phases)") \ 2132132718Skan \ 2133132718Skan diagnostic(bool, GCParallelVerificationEnabled, true, \ 2134132718Skan "Enable parallel memory system verification") \ 213550397Sobrien \ 213690075Sobrien diagnostic(bool, DeferInitialCardMark, false, \ 213750397Sobrien "When +ReduceInitialCardMarks, explicitly defer any that " \ 213890075Sobrien "may arise from new_pre_store_barrier") \ 213990075Sobrien \ 214050397Sobrien diagnostic(bool, VerifyRememberedSets, false, \ 214190075Sobrien "Verify GC remembered sets") \ 214290075Sobrien \ 214390075Sobrien diagnostic(bool, VerifyObjectStartArray, true, \ 214490075Sobrien "Verify GC object start array if verify before/after") \ 214590075Sobrien \ 214650397Sobrien product(bool, DisableExplicitGC, false, \ 214750397Sobrien "Tells whether calling System.gc() does a full GC") \ 214890075Sobrien \ 214990075Sobrien notproduct(bool, CheckMemoryInitialization, false, \ 215090075Sobrien "Checks memory initialization") \ 215190075Sobrien \ 215250397Sobrien product(bool, CollectGen0First, false, \ 215390075Sobrien "Collect youngest generation before each full GC") \ 215490075Sobrien \ 215590075Sobrien diagnostic(bool, BindCMSThreadToCPU, false, \ 2156169689Skan "Bind CMS Thread to CPU if possible") \ 215790075Sobrien \ 215850397Sobrien diagnostic(uintx, CPUForCMSThread, 0, \ 215950397Sobrien "When BindCMSThreadToCPU is true, the CPU to bind CMS thread to") \ 216050397Sobrien \ 216190075Sobrien product(bool, BindGCTaskThreadsToCPUs, false, \ 216250397Sobrien "Bind GCTaskThreads to CPUs if possible") \ 216350397Sobrien \ 2164132718Skan product(bool, UseGCTaskAffinity, false, \ 216550397Sobrien "Use worker affinity when asking for GCTasks") \ 216650397Sobrien \ 216750397Sobrien product(uintx, ProcessDistributionStride, 4, \ 216850397Sobrien "Stride through processors when distributing processes") \ 2169132718Skan \ 217050397Sobrien product(uintx, CMSCoordinatorYieldSleepCount, 10, \ 217190075Sobrien "number of times the coordinator GC thread will sleep while " \ 217290075Sobrien "yielding before giving up and resuming GC") \ 217390075Sobrien \ 217490075Sobrien product(uintx, CMSYieldSleepCount, 0, \ 2175117395Skan "number of times a GC thread (minus the coordinator) " \ 217690075Sobrien "will sleep while yielding before giving up and resuming GC") \ 217790075Sobrien \ 217890075Sobrien /* gc tracing */ \ 217990075Sobrien manageable(bool, PrintGC, false, \ 218090075Sobrien "Print message at garbage collect") \ 2181169689Skan \ 218250397Sobrien manageable(bool, PrintGCDetails, false, \ 2183117395Skan "Print more details at garbage collect") \ 2184117395Skan \ 2185117395Skan manageable(bool, PrintGCDateStamps, false, \ 2186117395Skan "Print date stamps at garbage collect") \ 2187169689Skan \ 2188169689Skan manageable(bool, PrintGCTimeStamps, false, \ 2189169689Skan "Print timestamps at garbage collect") \ 2190169689Skan \ 2191169689Skan product(bool, PrintGCTaskTimeStamps, false, \ 2192169689Skan "Print timestamps for individual gc worker thread tasks") \ 2193169689Skan \ 2194169689Skan develop(intx, ConcGCYieldTimeout, 0, \ 2195169689Skan "If non-zero, assert that GC threads yield within this # of ms.") \ 2196169689Skan \ 2197169689Skan notproduct(bool, TraceMarkSweep, false, \ 2198169689Skan "Trace mark sweep") \ 2199169689Skan \ 2200169689Skan product(bool, PrintReferenceGC, false, \ 2201169689Skan "Print times spent handling reference objects during GC " \ 2202169689Skan " (enabled only when PrintGCDetails)") \ 2203117395Skan \ 2204117395Skan develop(bool, TraceReferenceGC, false, \ 2205117395Skan "Trace handling of soft/weak/final/phantom references") \ 2206117395Skan \ 220790075Sobrien develop(bool, TraceFinalizerRegistration, false, \ 220890075Sobrien "Trace registration of final references") \ 2209117395Skan \ 221050397Sobrien notproduct(bool, TraceScavenge, false, \ 221190075Sobrien "Trace scavenge") \ 221290075Sobrien \ 2213117395Skan product_rw(bool, TraceClassLoading, false, \ 2214169689Skan "Trace all classes loaded") \ 2215169689Skan \ 2216132718Skan product(bool, TraceClassLoadingPreorder, false, \ 2217132718Skan "Trace all classes loaded in order referenced (not loaded)") \ 2218117395Skan \ 221950397Sobrien product_rw(bool, TraceClassUnloading, false, \ 222090075Sobrien "Trace unloading of classes") \ 222190075Sobrien \ 222290075Sobrien product_rw(bool, TraceLoaderConstraints, false, \ 222390075Sobrien "Trace loader constraints") \ 222450397Sobrien \ 222550397Sobrien develop(bool, TraceClassLoaderData, false, \ 222650397Sobrien "Trace class loader loader_data lifetime") \ 222750397Sobrien \ 222850397Sobrien product(uintx, InitialBootClassLoaderMetaspaceSize, \ 2229169689Skan NOT_LP64(2200*K) LP64_ONLY(4*M), \ 223050397Sobrien "Initial size of the boot class loader data metaspace") \ 2231169689Skan \ 2232169689Skan product(bool, TraceGen0Time, false, \ 2233169689Skan "Trace accumulated time for Gen 0 collection") \ 2234169689Skan \ 2235169689Skan product(bool, TraceGen1Time, false, \ 2236169689Skan "Trace accumulated time for Gen 1 collection") \ 223750397Sobrien \ 223890075Sobrien product(bool, PrintTenuringDistribution, false, \ 223990075Sobrien "Print tenuring age information") \ 224090075Sobrien \ 224190075Sobrien product_rw(bool, PrintHeapAtGC, false, \ 224250397Sobrien "Print heap layout before and after each GC") \ 224350397Sobrien \ 2244169689Skan product_rw(bool, PrintHeapAtGCExtended, false, \ 2245169689Skan "Prints extended information about the layout of the heap " \ 2246169689Skan "when -XX:+PrintHeapAtGC is set") \ 224790075Sobrien \ 224890075Sobrien product(bool, PrintHeapAtSIGBREAK, true, \ 224950397Sobrien "Print heap layout in response to SIGBREAK") \ 225050397Sobrien \ 225190075Sobrien manageable(bool, PrintClassHistogramBeforeFullGC, false, \ 225290075Sobrien "Print a class histogram before any major stop-world GC") \ 225390075Sobrien \ 2254169689Skan manageable(bool, PrintClassHistogramAfterFullGC, false, \ 225590075Sobrien "Print a class histogram after any major stop-world GC") \ 225650397Sobrien \ 225790075Sobrien manageable(bool, PrintClassHistogram, false, \ 225850397Sobrien "Print a histogram of class instances") \ 225990075Sobrien \ 226090075Sobrien develop(bool, TraceWorkGang, false, \ 226190075Sobrien "Trace activities of work gangs") \ 226250397Sobrien \ 226390075Sobrien product(bool, TraceParallelOldGCTasks, false, \ 226450397Sobrien "Trace multithreaded GC activity") \ 226590075Sobrien \ 226690075Sobrien develop(bool, TraceBlockOffsetTable, false, \ 2267132718Skan "Print BlockOffsetTable maps") \ 226890075Sobrien \ 226990075Sobrien develop(bool, TraceCardTableModRefBS, false, \ 227090075Sobrien "Print CardTableModRefBS maps") \ 227190075Sobrien \ 227290075Sobrien develop(bool, TraceGCTaskManager, false, \ 227390075Sobrien "Trace actions of the GC task manager") \ 227450397Sobrien \ 227590075Sobrien develop(bool, TraceGCTaskQueue, false, \ 227690075Sobrien "Trace actions of the GC task queues") \ 227790075Sobrien \ 227890075Sobrien diagnostic(bool, TraceGCTaskThread, false, \ 227990075Sobrien "Trace actions of the GC task threads") \ 228090075Sobrien \ 228150397Sobrien product(bool, PrintParallelOldGCPhaseTimes, false, \ 228290075Sobrien "Print the time taken by each parallel old gc phase." \ 228390075Sobrien "PrintGCDetails must also be enabled.") \ 228450397Sobrien \ 228590075Sobrien develop(bool, TraceParallelOldGCMarkingPhase, false, \ 228650397Sobrien "Trace parallel old gc marking phase") \ 228790075Sobrien \ 228890075Sobrien develop(bool, TraceParallelOldGCSummaryPhase, false, \ 228950397Sobrien "Trace parallel old gc summary phase") \ 229090075Sobrien \ 229190075Sobrien develop(bool, TraceParallelOldGCCompactionPhase, false, \ 229290075Sobrien "Trace parallel old gc compaction phase") \ 229390075Sobrien \ 229490075Sobrien develop(bool, TraceParallelOldGCDensePrefix, false, \ 229590075Sobrien "Trace parallel old gc dense prefix computation") \ 229690075Sobrien \ 229790075Sobrien develop(bool, IgnoreLibthreadGPFault, false, \ 2298117395Skan "Suppress workaround for libthread GP fault") \ 229990075Sobrien \ 230050397Sobrien product(bool, PrintJNIGCStalls, false, \ 230190075Sobrien "Print diagnostic message when GC is stalled" \ 230290075Sobrien "by JNI critical section") \ 230390075Sobrien \ 230490075Sobrien /* GC log rotation setting */ \ 230590075Sobrien \ 230690075Sobrien product(bool, UseGCLogFileRotation, false, \ 230790075Sobrien "Prevent large gclog file for long running app. " \ 230890075Sobrien "Requires -Xloggc:<filename>") \ 230990075Sobrien \ 231090075Sobrien product(uintx, NumberOfGCLogFiles, 0, \ 231190075Sobrien "Number of gclog files in rotation, " \ 231290075Sobrien "Default: 0, no rotation") \ 231390075Sobrien \ 231490075Sobrien product(uintx, GCLogFileSize, 0, \ 231590075Sobrien "GC log file size, Default: 0 bytes, no rotation " \ 231690075Sobrien "Only valid with UseGCLogFileRotation") \ 231790075Sobrien \ 231890075Sobrien /* JVMTI heap profiling */ \ 2319169689Skan \ 232090075Sobrien diagnostic(bool, TraceJVMTIObjectTagging, false, \ 232150397Sobrien "Trace JVMTI object tagging calls") \ 232250397Sobrien \ 232390075Sobrien diagnostic(bool, VerifyBeforeIteration, false, \ 232490075Sobrien "Verify memory system before JVMTI iteration") \ 232590075Sobrien \ 232690075Sobrien /* compiler interface */ \ 232750397Sobrien \ 2328169689Skan develop(bool, CIPrintCompilerName, false, \ 2329169689Skan "when CIPrint is active, print the name of the active compiler") \ 2330169689Skan \ 2331169689Skan develop(bool, CIPrintCompileQueue, false, \ 2332169689Skan "display the contents of the compile queue whenever a " \ 2333169689Skan "compilation is enqueued") \ 233490075Sobrien \ 233590075Sobrien develop(bool, CIPrintRequests, false, \ 233690075Sobrien "display every request for compilation") \ 233790075Sobrien \ 233890075Sobrien product(bool, CITime, false, \ 233990075Sobrien "collect timing information for compilation") \ 234090075Sobrien \ 234190075Sobrien develop(bool, CITimeEach, false, \ 2342169689Skan "display timing information after each successful compilation") \ 2343169689Skan \ 234490075Sobrien develop(bool, CICountOSR, false, \ 234550397Sobrien "use a separate counter when assigning ids to osr compilations") \ 234690075Sobrien \ 234790075Sobrien develop(bool, CICompileNatives, true, \ 234890075Sobrien "compile native methods if supported by the compiler") \ 234950397Sobrien \ 235090075Sobrien develop_pd(bool, CICompileOSR, \ 235190075Sobrien "compile on stack replacement methods if supported by the " \ 235290075Sobrien "compiler") \ 235390075Sobrien \ 235450397Sobrien develop(bool, CIPrintMethodCodes, false, \ 235550397Sobrien "print method bytecodes of the compiled code") \ 235690075Sobrien \ 235750397Sobrien develop(bool, CIPrintTypeFlow, false, \ 235850397Sobrien "print the results of ciTypeFlow analysis") \ 2359117395Skan \ 236090075Sobrien develop(bool, CITraceTypeFlow, false, \ 236150397Sobrien "detailed per-bytecode tracing of ciTypeFlow analysis") \ 236250397Sobrien \ 236350397Sobrien develop(intx, OSROnlyBCI, -1, \ 236490075Sobrien "OSR only at this bci. Negative values mean exclude that bci") \ 236550397Sobrien \ 236650397Sobrien /* compiler */ \ 236750397Sobrien \ 236890075Sobrien product(intx, CICompilerCount, CI_COMPILER_COUNT, \ 2369117395Skan "Number of compiler threads to run") \ 2370117395Skan \ 2371169689Skan product(intx, CompilationPolicyChoice, 0, \ 2372117395Skan "which compilation policy (0/1)") \ 237390075Sobrien \ 237490075Sobrien develop(bool, UseStackBanging, true, \ 2375169689Skan "use stack banging for stack overflow checks (required for " \ 2376169689Skan "proper StackOverflow handling; disable only to measure cost " \ 237790075Sobrien "of stackbanging)") \ 237890075Sobrien \ 2379169689Skan develop(bool, UseStrictFP, true, \ 2380169689Skan "use strict fp if modifier strictfp is set") \ 2381169689Skan \ 238290075Sobrien develop(bool, GenerateSynchronizationCode, true, \ 238390075Sobrien "generate locking/unlocking code for synchronized methods and " \ 238490075Sobrien "monitors") \ 238590075Sobrien \ 238650397Sobrien develop(bool, GenerateCompilerNullChecks, true, \ 238790075Sobrien "Generate explicit null checks for loads/stores/calls") \ 238850397Sobrien \ 238990075Sobrien develop(bool, GenerateRangeChecks, true, \ 2390169689Skan "Generate range checks for array accesses") \ 239150397Sobrien \ 239250397Sobrien develop_pd(bool, ImplicitNullChecks, \ 239390075Sobrien "generate code for implicit null checks") \ 2394169689Skan \ 2395169689Skan product(bool, PrintSafepointStatistics, false, \ 239690075Sobrien "print statistics about safepoint synchronization") \ 2397169689Skan \ 2398169689Skan product(intx, PrintSafepointStatisticsCount, 300, \ 2399169689Skan "total number of safepoint statistics collected " \ 2400169689Skan "before printing them out") \ 2401169689Skan \ 2402169689Skan product(intx, PrintSafepointStatisticsTimeout, -1, \ 2403169689Skan "print safepoint statistics only when safepoint takes" \ 2404169689Skan " more than PrintSafepointSatisticsTimeout in millis") \ 2405169689Skan \ 2406169689Skan product(bool, TraceSafepointCleanupTime, false, \ 2407169689Skan "print the break down of clean up tasks performed during" \ 2408169689Skan " safepoint") \ 2409169689Skan \ 2410169689Skan product(bool, Inline, true, \ 2411169689Skan "enable inlining") \ 2412169689Skan \ 2413169689Skan product(bool, ClipInlining, true, \ 2414169689Skan "clip inlining if aggregate method exceeds DesiredMethodLimit") \ 2415169689Skan \ 2416169689Skan develop(bool, UseCHA, true, \ 2417169689Skan "enable CHA") \ 2418169689Skan \ 2419169689Skan product(bool, UseTypeProfile, true, \ 2420169689Skan "Check interpreter profile for historically monomorphic calls") \ 2421169689Skan \ 2422169689Skan notproduct(bool, TimeCompiler, false, \ 2423169689Skan "time the compiler") \ 2424169689Skan \ 242590075Sobrien diagnostic(bool, PrintInlining, false, \ 242650397Sobrien "prints inlining optimizations") \ 242790075Sobrien \ 242890075Sobrien product(bool, UsePopCountInstruction, false, \ 242990075Sobrien "Use population count instruction") \ 2430169689Skan \ 2431169689Skan develop(bool, EagerInitialization, false, \ 2432169689Skan "Eagerly initialize classes if possible") \ 2433169689Skan \ 2434169689Skan develop(bool, TraceMethodReplacement, false, \ 2435169689Skan "Print when methods are replaced do to recompilation") \ 2436169689Skan \ 2437169689Skan develop(bool, PrintMethodFlushing, false, \ 2438169689Skan "print the nmethods being flushed") \ 2439169689Skan \ 2440169689Skan develop(bool, UseRelocIndex, false, \ 2441169689Skan "use an index to speed random access to relocations") \ 2442169689Skan \ 2443169689Skan develop(bool, StressCodeBuffers, false, \ 2444169689Skan "Exercise code buffer expansion and other rare state changes") \ 2445169689Skan \ 2446169689Skan diagnostic(bool, DebugNonSafepoints, trueInDebug, \ 2447169689Skan "Generate extra debugging info for non-safepoints in nmethods") \ 2448169689Skan \ 2449169689Skan product(bool, PrintVMOptions, false, \ 2450169689Skan "Print flags that appeared on the command line") \ 245190075Sobrien \ 245250397Sobrien product(bool, IgnoreUnrecognizedVMOptions, false, \ 245390075Sobrien "Ignore unrecognized VM options") \ 245490075Sobrien \ 245590075Sobrien product(bool, PrintCommandLineFlags, false, \ 245690075Sobrien "Print flags specified on command line or set by ergonomics") \ 245790075Sobrien \ 245850397Sobrien product(bool, PrintFlagsInitial, false, \ 245990075Sobrien "Print all VM flags before argument processing and exit VM") \ 246090075Sobrien \ 246190075Sobrien product(bool, PrintFlagsFinal, false, \ 246290075Sobrien "Print all VM flags after argument and ergonomic processing") \ 246390075Sobrien \ 246490075Sobrien notproduct(bool, PrintFlagsWithComments, false, \ 246590075Sobrien "Print all VM flags with default values and descriptions and exit")\ 246650397Sobrien \ 246790075Sobrien diagnostic(bool, SerializeVMOutput, true, \ 2468169689Skan "Use a mutex to serialize output to tty and hotspot.log") \ 246990075Sobrien \ 247050397Sobrien diagnostic(bool, DisplayVMOutput, true, \ 247190075Sobrien "Display all VM output on the tty, independently of LogVMOutput") \ 247290075Sobrien \ 247390075Sobrien diagnostic(bool, LogVMOutput, trueInDebug, \ 2474132718Skan "Save VM output to hotspot.log, or to LogFile") \ 2475132718Skan \ 247690075Sobrien diagnostic(ccstr, LogFile, NULL, \ 2477132718Skan "If LogVMOutput is on, save VM output to this file [hotspot.log]") \ 247890075Sobrien \ 2479169689Skan product(ccstr, ErrorFile, NULL, \ 2480132718Skan "If an error occurs, save the error data to this file " \ 248190075Sobrien "[default: ./hs_err_pid%p.log] (%p replaced with pid)") \ 248290075Sobrien \ 248390075Sobrien product(bool, DisplayVMOutputToStderr, false, \ 248490075Sobrien "If DisplayVMOutput is true, display all VM output to stderr") \ 248590075Sobrien \ 248690075Sobrien product(bool, DisplayVMOutputToStdout, false, \ 248790075Sobrien "If DisplayVMOutput is true, display all VM output to stdout") \ 248890075Sobrien \ 248990075Sobrien product(bool, UseHeavyMonitors, false, \ 249090075Sobrien "use heavyweight instead of lightweight Java monitors") \ 249190075Sobrien \ 249290075Sobrien product(bool, PrintStringTableStatistics, false, \ 249390075Sobrien "print statistics about the StringTable and SymbolTable") \ 249450397Sobrien \ 249550397Sobrien notproduct(bool, PrintSymbolTableSizeHistogram, false, \ 249650397Sobrien "print histogram of the symbol table") \ 249750397Sobrien \ 249890075Sobrien notproduct(bool, ExitVMOnVerifyError, false, \ 249950397Sobrien "standard exit from VM if bytecode verify error " \ 250050397Sobrien "(only in debug mode)") \ 2501117395Skan \ 2502132718Skan notproduct(ccstr, AbortVMOnException, NULL, \ 250350397Sobrien "Call fatal if this exception is thrown. Example: " \ 250450397Sobrien "java -XX:AbortVMOnException=java.lang.NullPointerException Foo") \ 250590075Sobrien \ 2506117395Skan notproduct(ccstr, AbortVMOnExceptionMessage, NULL, \ 250790075Sobrien "Call fatal if the exception pointed by AbortVMOnException " \ 250850397Sobrien "has this message.") \ 250950397Sobrien \ 251050397Sobrien develop(bool, DebugVtables, false, \ 251150397Sobrien "add debugging code to vtable dispatch") \ 251250397Sobrien \ 251350397Sobrien develop(bool, PrintVtables, false, \ 251450397Sobrien "print vtables when printing klass") \ 251550397Sobrien \ 251650397Sobrien notproduct(bool, PrintVtableStats, false, \ 251750397Sobrien "print vtables stats at end of run") \ 251850397Sobrien \ 251950397Sobrien develop(bool, TraceCreateZombies, false, \ 252050397Sobrien "trace creation of zombie nmethods") \ 252150397Sobrien \ 252250397Sobrien notproduct(bool, IgnoreLockingAssertions, false, \ 2523132718Skan "disable locking assertions (for speed)") \ 2524132718Skan \ 252550397Sobrien product(bool, RangeCheckElimination, true, \ 252650397Sobrien "Split loop iterations to eliminate range checks") \ 2527169689Skan \ 252890075Sobrien develop_pd(bool, UncommonNullCast, \ 252950397Sobrien "track occurrences of null in casts; adjust compiler tactics") \ 2530169689Skan \ 253150397Sobrien develop(bool, TypeProfileCasts, true, \ 2532169689Skan "treat casts like calls for purposes of type profiling") \ 253390075Sobrien \ 253490075Sobrien develop(bool, DelayCompilationDuringStartup, true, \ 253590075Sobrien "Delay invoking the compiler until main application class is " \ 253690075Sobrien "loaded") \ 253790075Sobrien \ 253890075Sobrien develop(bool, CompileTheWorld, false, \ 253990075Sobrien "Compile all methods in all classes in bootstrap class path " \ 254090075Sobrien "(stress test)") \ 254190075Sobrien \ 254290075Sobrien develop(bool, CompileTheWorldPreloadClasses, true, \ 254390075Sobrien "Preload all classes used by a class before start loading") \ 2544169689Skan \ 254550397Sobrien notproduct(intx, CompileTheWorldSafepointInterval, 100, \ 2546117395Skan "Force a safepoint every n compiles so sweeper can keep up") \ 254790075Sobrien \ 2548117395Skan develop(bool, FillDelaySlots, true, \ 2549169689Skan "Fill delay slots (on SPARC only)") \ 2550169689Skan \ 255150397Sobrien develop(bool, TimeLivenessAnalysis, false, \ 2552169689Skan "Time computation of bytecode liveness analysis") \ 255390075Sobrien \ 255490075Sobrien develop(bool, TraceLivenessGen, false, \ 255590075Sobrien "Trace the generation of liveness analysis information") \ 255690075Sobrien \ 255790075Sobrien notproduct(bool, TraceLivenessQuery, false, \ 255850397Sobrien "Trace queries of liveness analysis information") \ 255950397Sobrien \ 256050397Sobrien notproduct(bool, CollectIndexSetStatistics, false, \ 256150397Sobrien "Collect information about IndexSets") \ 2562132718Skan \ 2563132718Skan develop(bool, UseLoopSafepoints, true, \ 2564132718Skan "Generate Safepoint nodes in every loop") \ 2565132718Skan \ 256650397Sobrien develop(intx, FastAllocateSizeLimit, 128*K, \ 256750397Sobrien /* Note: This value is zero mod 1<<13 for a cheap sparc set. */ \ 256850397Sobrien "Inline allocations larger than this in doublewords must go slow")\ 256950397Sobrien \ 257050397Sobrien product(bool, AggressiveOpts, false, \ 257150397Sobrien "Enable aggressive optimizations - see arguments.cpp") \ 257250397Sobrien \ 2573169689Skan product(bool, UseStringCache, false, \ 2574169689Skan "Enable String cache capabilities on String.java") \ 2575169689Skan \ 2576169689Skan /* statistics */ \ 2577169689Skan develop(bool, CountCompiledCalls, false, \ 2578169689Skan "counts method invocations") \ 2579169689Skan \ 2580169689Skan notproduct(bool, CountRuntimeCalls, false, \ 258150397Sobrien "counts VM runtime calls") \ 258250397Sobrien \ 2583117395Skan develop(bool, CountJNICalls, false, \ 2584169689Skan "counts jni method invocations") \ 258590075Sobrien \ 2586117395Skan notproduct(bool, CountJVMCalls, false, \ 258750397Sobrien "counts jvm method invocations") \ 258850397Sobrien \ 258990075Sobrien notproduct(bool, CountRemovableExceptions, false, \ 259090075Sobrien "count exceptions that could be replaced by branches due to " \ 259190075Sobrien "inlining") \ 259290075Sobrien \ 259390075Sobrien notproduct(bool, ICMissHistogram, false, \ 259490075Sobrien "produce histogram of IC misses") \ 259590075Sobrien \ 259650397Sobrien notproduct(bool, PrintClassStatistics, false, \ 259750397Sobrien "prints class statistics at end of run") \ 259850397Sobrien \ 259950397Sobrien notproduct(bool, PrintMethodStatistics, false, \ 260050397Sobrien "prints method statistics at end of run") \ 260150397Sobrien \ 260250397Sobrien /* interpreter */ \ 2603132718Skan develop(bool, ClearInterpreterLocals, false, \ 2604132718Skan "Always clear local variables of interpreter activations upon " \ 260550397Sobrien "entry") \ 260650397Sobrien \ 260750397Sobrien product_pd(bool, RewriteBytecodes, \ 260850397Sobrien "Allow rewriting of bytecodes (bytecodes are not immutable)") \ 260950397Sobrien \ 261090075Sobrien product_pd(bool, RewriteFrequentPairs, \ 2611117395Skan "Rewrite frequently used bytecode pairs into a single bytecode") \ 2612117395Skan \ 261350397Sobrien diagnostic(bool, PrintInterpreter, false, \ 261450397Sobrien "Prints the generated interpreter code") \ 261550397Sobrien \ 261650397Sobrien product(bool, UseInterpreter, true, \ 261750397Sobrien "Use interpreter for non-compiled methods") \ 261850397Sobrien \ 2619132718Skan develop(bool, UseFastSignatureHandlers, true, \ 262050397Sobrien "Use fast signature handlers for native calls") \ 262150397Sobrien \ 2622132718Skan product(bool, UseLoopCounter, true, \ 262350397Sobrien "Increment invocation counter on backward branch") \ 262450397Sobrien \ 262550397Sobrien product(bool, UseFastEmptyMethods, true, \ 262650397Sobrien "Use fast method entry code for empty methods") \ 262750397Sobrien \ 262850397Sobrien product(bool, UseFastAccessorMethods, true, \ 262950397Sobrien "Use fast method entry code for accessor methods") \ 263050397Sobrien \ 2631169689Skan product_pd(bool, UseOnStackReplacement, \ 2632169689Skan "Use on stack replacement, calls runtime if invoc. counter " \ 2633169689Skan "overflows in loop") \ 2634169689Skan \ 263550397Sobrien notproduct(bool, TraceOnStackReplacement, false, \ 263650397Sobrien "Trace on stack replacement") \ 263750397Sobrien \ 263850397Sobrien product_pd(bool, PreferInterpreterNativeStubs, \ 2639132718Skan "Use always interpreter stubs for native methods invoked via " \ 264050397Sobrien "interpreter") \ 264150397Sobrien \ 2642169689Skan develop(bool, CountBytecodes, false, \ 264350397Sobrien "Count number of bytecodes executed") \ 264490075Sobrien \ 2645169689Skan develop(bool, PrintBytecodeHistogram, false, \ 2646169689Skan "Print histogram of the executed bytecodes") \ 264790075Sobrien \ 264850397Sobrien develop(bool, PrintBytecodePairHistogram, false, \ 2649169689Skan "Print histogram of the executed bytecode pairs") \ 265090075Sobrien \ 2651132718Skan diagnostic(bool, PrintSignatureHandlers, false, \ 265290075Sobrien "Print code generated for native method signature handlers") \ 265390075Sobrien \ 265490075Sobrien develop(bool, VerifyOops, false, \ 265550397Sobrien "Do plausibility checks for oops") \ 2656169689Skan \ 2657169689Skan develop(bool, CheckUnhandledOops, false, \ 2658169689Skan "Check for unhandled oops in VM code") \ 2659169689Skan \ 2660169689Skan develop(bool, VerifyJNIFields, trueInDebug, \ 2661169689Skan "Verify jfieldIDs for instance fields") \ 2662169689Skan \ 2663117395Skan notproduct(bool, VerifyJNIEnvThread, false, \ 2664117395Skan "Verify JNIEnv.thread == Thread::current() when entering VM " \ 2665117395Skan "from JNI") \ 2666117395Skan \ 2667117395Skan develop(bool, VerifyFPU, false, \ 266890075Sobrien "Verify FPU state (check for NaN's, etc.)") \ 266990075Sobrien \ 267090075Sobrien develop(bool, VerifyThread, false, \ 267190075Sobrien "Watch the thread register for corruption (SPARC only)") \ 267250397Sobrien \ 267350397Sobrien develop(bool, VerifyActivationFrameSize, false, \ 267450397Sobrien "Verify that activation frame didn't become smaller than its " \ 267550397Sobrien "minimal size") \ 267650397Sobrien \ 2677132718Skan develop(bool, TraceFrequencyInlining, false, \ 267850397Sobrien "Trace frequency based inlining") \ 267950397Sobrien \ 268090075Sobrien develop_pd(bool, InlineIntrinsics, \ 268150397Sobrien "Inline intrinsics that can be statically resolved") \ 268290075Sobrien \ 268390075Sobrien product_pd(bool, ProfileInterpreter, \ 268450397Sobrien "Profile at the bytecode level during interpretation") \ 268550397Sobrien \ 268650397Sobrien develop_pd(bool, ProfileTraps, \ 2687132718Skan "Profile deoptimization traps at the bytecode level") \ 268850397Sobrien \ 268950397Sobrien product(intx, ProfileMaturityPercentage, 20, \ 269050397Sobrien "number of method invocations/branches (expressed as % of " \ 269150397Sobrien "CompileThreshold) before using the method's profile") \ 2692169689Skan \ 2693169689Skan develop(bool, PrintMethodData, false, \ 2694169689Skan "Print the results of +ProfileInterpreter at end of run") \ 2695169689Skan \ 2696132718Skan develop(bool, VerifyDataPointer, trueInDebug, \ 269750397Sobrien "Verify the method data pointer during interpreter profiling") \ 269850397Sobrien \ 269990075Sobrien develop(bool, VerifyCompiledCode, false, \ 270050397Sobrien "Include miscellaneous runtime verifications in nmethod code; " \ 2701132718Skan "default off because it disturbs nmethod size heuristics") \ 270250397Sobrien \ 270350397Sobrien notproduct(bool, CrashGCForDumpingJavaThread, false, \ 270450397Sobrien "Manually make GC thread crash then dump java stack trace; " \ 270550397Sobrien "Test only") \ 270650397Sobrien \ 270750397Sobrien /* compilation */ \ 2708132718Skan product(bool, UseCompiler, true, \ 270950397Sobrien "use compilation") \ 2710132718Skan \ 271150397Sobrien develop(bool, TraceCompilationPolicy, false, \ 2712132718Skan "Trace compilation policy") \ 271350397Sobrien \ 2714132718Skan develop(bool, TimeCompilationPolicy, false, \ 271550397Sobrien "Time the compilation policy") \ 2716132718Skan \ 271750397Sobrien product(bool, UseCounterDecay, true, \ 271850397Sobrien "adjust recompilation counters") \ 271950397Sobrien \ 272050397Sobrien develop(intx, CounterHalfLifeTime, 30, \ 2721132718Skan "half-life time of invocation counters (in secs)") \ 272250397Sobrien \ 2723132718Skan develop(intx, CounterDecayMinIntervalLength, 500, \ 2724132718Skan "Min. ms. between invocation of CounterDecay") \ 272550397Sobrien \ 2726132718Skan product(bool, AlwaysCompileLoopMethods, false, \ 2727132718Skan "when using recompilation, never interpret methods " \ 2728132718Skan "containing loops") \ 2729132718Skan \ 2730169689Skan product(bool, DontCompileHugeMethods, true, \ 2731132718Skan "don't compile methods > HugeMethodLimit") \ 2732132718Skan \ 2733132718Skan /* Bytecode escape analysis estimation. */ \ 2734132718Skan product(bool, EstimateArgEscape, true, \ 273590075Sobrien "Analyze bytecodes to estimate escape state of arguments") \ 273690075Sobrien \ 273790075Sobrien product(intx, BCEATraceLevel, 0, \ 2738132718Skan "How much tracing to do of bytecode escape analysis estimates") \ 2739132718Skan \ 2740132718Skan product(intx, MaxBCEAEstimateLevel, 5, \ 2741132718Skan "Maximum number of nested calls that are analyzed by BC EA.") \ 2742132718Skan \ 2743169689Skan product(intx, MaxBCEAEstimateSize, 150, \ 274450397Sobrien "Maximum bytecode size of a method to be analyzed by BC EA.") \ 2745132718Skan \ 274650397Sobrien product(intx, AllocatePrefetchStyle, 1, \ 274750397Sobrien "0 = no prefetch, " \ 274850397Sobrien "1 = prefetch instructions for each allocation, " \ 274950397Sobrien "2 = use TLAB watermark to gate allocation prefetch, " \ 275050397Sobrien "3 = use BIS instruction on Sparc for allocation prefetch") \ 275150397Sobrien \ 2752132718Skan product(intx, AllocatePrefetchDistance, -1, \ 275350397Sobrien "Distance to prefetch ahead of allocation pointer") \ 275450397Sobrien \ 275550397Sobrien product(intx, AllocatePrefetchLines, 3, \ 275650397Sobrien "Number of lines to prefetch ahead of array allocation pointer") \ 275750397Sobrien \ 275890075Sobrien product(intx, AllocateInstancePrefetchLines, 1, \ 275950397Sobrien "Number of lines to prefetch ahead of instance allocation pointer") \ 276050397Sobrien \ 276150397Sobrien product(intx, AllocatePrefetchStepSize, 16, \ 276290075Sobrien "Step size in bytes of sequential prefetch instructions") \ 276390075Sobrien \ 276490075Sobrien product(intx, AllocatePrefetchInstr, 0, \ 2765132718Skan "Prefetch instruction to prefetch ahead of allocation pointer") \ 276690075Sobrien \ 276790075Sobrien /* deoptimization */ \ 276890075Sobrien develop(bool, TraceDeoptimization, false, \ 276990075Sobrien "Trace deoptimization") \ 277090075Sobrien \ 277190075Sobrien develop(bool, DebugDeoptimization, false, \ 277290075Sobrien "Tracing various information while debugging deoptimization") \ 277390075Sobrien \ 277490075Sobrien product(intx, SelfDestructTimer, 0, \ 277590075Sobrien "Will cause VM to terminate after a given time (in minutes) " \ 2776132718Skan "(0 means off)") \ 277790075Sobrien \ 2778132718Skan product(intx, MaxJavaStackTraceDepth, 1024, \ 2779132718Skan "Max. no. of lines in the stack trace for Java exceptions " \ 2780132718Skan "(0 means all)") \ 2781132718Skan \ 2782132718Skan NOT_EMBEDDED(diagnostic(intx, GuaranteedSafepointInterval, 1000, \ 2783132718Skan "Guarantee a safepoint (at least) every so many milliseconds " \ 2784132718Skan "(0 means none)")) \ 2785132718Skan \ 2786132718Skan EMBEDDED_ONLY(product(intx, GuaranteedSafepointInterval, 0, \ 278790075Sobrien "Guarantee a safepoint (at least) every so many milliseconds " \ 278890075Sobrien "(0 means none)")) \ 278990075Sobrien \ 2790132718Skan product(intx, SafepointTimeoutDelay, 10000, \ 279190075Sobrien "Delay in milliseconds for option SafepointTimeout") \ 279290075Sobrien \ 279390075Sobrien product(intx, NmethodSweepFraction, 16, \ 279490075Sobrien "Number of invocations of sweeper to cover all nmethods") \ 2795117395Skan \ 279690075Sobrien product(intx, NmethodSweepCheckInterval, 5, \ 279790075Sobrien "Compilers wake up every n seconds to possibly sweep nmethods") \ 279890075Sobrien \ 279990075Sobrien notproduct(bool, LogSweeper, false, \ 280090075Sobrien "Keep a ring buffer of sweeper activity") \ 280190075Sobrien \ 280290075Sobrien notproduct(intx, SweeperLogEntries, 1024, \ 280390075Sobrien "Number of records in the ring buffer of sweeper activity") \ 280490075Sobrien \ 280590075Sobrien notproduct(intx, MemProfilingInterval, 500, \ 280690075Sobrien "Time between each invocation of the MemProfiler") \ 280790075Sobrien \ 280890075Sobrien develop(intx, MallocCatchPtr, -1, \ 280990075Sobrien "Hit breakpoint when mallocing/freeing this pointer") \ 281090075Sobrien \ 281190075Sobrien notproduct(intx, AssertRepeat, 1, \ 281290075Sobrien "number of times to evaluate expression in assert " \ 281390075Sobrien "(to estimate overhead); only works with -DUSE_REPEATED_ASSERTS") \ 281490075Sobrien \ 281590075Sobrien notproduct(ccstrlist, SuppressErrorAt, "", \ 281690075Sobrien "List of assertions (file:line) to muzzle") \ 281790075Sobrien \ 281890075Sobrien notproduct(uintx, HandleAllocationLimit, 1024, \ 281990075Sobrien "Threshold for HandleMark allocation when +TraceHandleAllocation "\ 282090075Sobrien "is used") \ 282190075Sobrien \ 282290075Sobrien develop(uintx, TotalHandleAllocationLimit, 1024, \ 282390075Sobrien "Threshold for total handle allocation when " \ 282490075Sobrien "+TraceHandleAllocation is used") \ 282590075Sobrien \ 282690075Sobrien develop(intx, StackPrintLimit, 100, \ 282790075Sobrien "number of stack frames to print in VM-level stack dump") \ 282890075Sobrien \ 282990075Sobrien notproduct(intx, MaxElementPrintSize, 256, \ 283090075Sobrien "maximum number of elements to print") \ 283190075Sobrien \ 283290075Sobrien notproduct(intx, MaxSubklassPrintSize, 4, \ 283390075Sobrien "maximum number of subklasses to print when printing klass") \ 283490075Sobrien \ 283590075Sobrien product(intx, MaxInlineLevel, 9, \ 283690075Sobrien "maximum number of nested calls that are inlined") \ 283790075Sobrien \ 283890075Sobrien product(intx, MaxRecursiveInlineLevel, 1, \ 283990075Sobrien "maximum number of nested recursive calls that are inlined") \ 284090075Sobrien \ 284190075Sobrien product_pd(intx, InlineSmallCode, \ 284290075Sobrien "Only inline already compiled methods if their code size is " \ 284390075Sobrien "less than this") \ 284490075Sobrien \ 284590075Sobrien product(intx, MaxInlineSize, 35, \ 284690075Sobrien "maximum bytecode size of a method to be inlined") \ 284790075Sobrien \ 284890075Sobrien product_pd(intx, FreqInlineSize, \ 284990075Sobrien "maximum bytecode size of a frequent method to be inlined") \ 285090075Sobrien \ 285190075Sobrien product(intx, MaxTrivialSize, 6, \ 285290075Sobrien "maximum bytecode size of a trivial method to be inlined") \ 285390075Sobrien \ 285490075Sobrien product(intx, MinInliningThreshold, 250, \ 285590075Sobrien "min. invocation count a method needs to have to be inlined") \ 285690075Sobrien \ 285790075Sobrien develop(intx, MethodHistogramCutoff, 100, \ 285890075Sobrien "cutoff value for method invoc. histogram (+CountCalls)") \ 285990075Sobrien \ 286090075Sobrien develop(intx, ProfilerNumberOfInterpretedMethods, 25, \ 286190075Sobrien "# of interpreted methods to show in profile") \ 286290075Sobrien \ 286390075Sobrien develop(intx, ProfilerNumberOfCompiledMethods, 25, \ 286490075Sobrien "# of compiled methods to show in profile") \ 286590075Sobrien \ 286690075Sobrien develop(intx, ProfilerNumberOfStubMethods, 25, \ 286790075Sobrien "# of stub methods to show in profile") \ 286890075Sobrien \ 286990075Sobrien develop(intx, ProfilerNumberOfRuntimeStubNodes, 25, \ 287090075Sobrien "# of runtime stub nodes to show in profile") \ 287190075Sobrien \ 287290075Sobrien product(intx, ProfileIntervalsTicks, 100, \ 287390075Sobrien "# of ticks between printing of interval profile " \ 287490075Sobrien "(+ProfileIntervals)") \ 287590075Sobrien \ 287690075Sobrien notproduct(intx, ScavengeALotInterval, 1, \ 287790075Sobrien "Interval between which scavenge will occur with +ScavengeALot") \ 287890075Sobrien \ 287990075Sobrien notproduct(intx, FullGCALotInterval, 1, \ 288090075Sobrien "Interval between which full gc will occur with +FullGCALot") \ 288190075Sobrien \ 288290075Sobrien notproduct(intx, FullGCALotStart, 0, \ 288390075Sobrien "For which invocation to start FullGCAlot") \ 288490075Sobrien \ 288590075Sobrien notproduct(intx, FullGCALotDummies, 32*K, \ 288690075Sobrien "Dummy object allocated with +FullGCALot, forcing all objects " \ 288790075Sobrien "to move") \ 288890075Sobrien \ 288990075Sobrien develop(intx, DontYieldALotInterval, 10, \ 289090075Sobrien "Interval between which yields will be dropped (milliseconds)") \ 289190075Sobrien \ 289290075Sobrien develop(intx, MinSleepInterval, 1, \ 289390075Sobrien "Minimum sleep() interval (milliseconds) when " \ 289490075Sobrien "ConvertSleepToYield is off (used for SOLARIS)") \ 289590075Sobrien \ 289690075Sobrien develop(intx, ProfilerPCTickThreshold, 15, \ 289790075Sobrien "Number of ticks in a PC buckets to be a hotspot") \ 289890075Sobrien \ 289990075Sobrien notproduct(intx, DeoptimizeALotInterval, 5, \ 290090075Sobrien "Number of exits until DeoptimizeALot kicks in") \ 290190075Sobrien \ 290290075Sobrien notproduct(intx, ZombieALotInterval, 5, \ 290390075Sobrien "Number of exits until ZombieALot kicks in") \ 290490075Sobrien \ 290590075Sobrien develop(bool, StressNonEntrant, false, \ 290690075Sobrien "Mark nmethods non-entrant at registration") \ 290790075Sobrien \ 290890075Sobrien diagnostic(intx, MallocVerifyInterval, 0, \ 290990075Sobrien "if non-zero, verify C heap after every N calls to " \ 291090075Sobrien "malloc/realloc/free") \ 291190075Sobrien \ 291290075Sobrien diagnostic(intx, MallocVerifyStart, 0, \ 291390075Sobrien "if non-zero, start verifying C heap after Nth call to " \ 291490075Sobrien "malloc/realloc/free") \ 291590075Sobrien \ 291690075Sobrien product(intx, TypeProfileWidth, 2, \ 291790075Sobrien "number of receiver types to record in call/cast profile") \ 291890075Sobrien \ 291990075Sobrien develop(intx, BciProfileWidth, 2, \ 292090075Sobrien "number of return bci's to record in ret profile") \ 292190075Sobrien \ 292290075Sobrien product(intx, PerMethodRecompilationCutoff, 400, \ 292390075Sobrien "After recompiling N times, stay in the interpreter (-1=>'Inf')") \ 292490075Sobrien \ 292590075Sobrien product(intx, PerBytecodeRecompilationCutoff, 200, \ 292690075Sobrien "Per-BCI limit on repeated recompilation (-1=>'Inf')") \ 292790075Sobrien \ 292890075Sobrien product(intx, PerMethodTrapLimit, 100, \ 292990075Sobrien "Limit on traps (of one kind) in a method (includes inlines)") \ 293090075Sobrien \ 293190075Sobrien product(intx, PerBytecodeTrapLimit, 4, \ 293290075Sobrien "Limit on traps (of one kind) at a particular BCI") \ 293390075Sobrien \ 293490075Sobrien develop(intx, InlineFrequencyRatio, 20, \ 293590075Sobrien "Ratio of call site execution to caller method invocation") \ 293690075Sobrien \ 293790075Sobrien develop_pd(intx, InlineFrequencyCount, \ 293890075Sobrien "Count of call site execution necessary to trigger frequent " \ 293990075Sobrien "inlining") \ 294090075Sobrien \ 294190075Sobrien develop(intx, InlineThrowCount, 50, \ 294290075Sobrien "Force inlining of interpreted methods that throw this often") \ 294390075Sobrien \ 294490075Sobrien develop(intx, InlineThrowMaxSize, 200, \ 294590075Sobrien "Force inlining of throwing methods smaller than this") \ 294690075Sobrien \ 294790075Sobrien develop(intx, ProfilerNodeSize, 1024, \ 294890075Sobrien "Size in K to allocate for the Profile Nodes of each thread") \ 294990075Sobrien \ 295090075Sobrien product_pd(intx, PreInflateSpin, \ 295190075Sobrien "Number of times to spin wait before inflation") \ 295290075Sobrien \ 295390075Sobrien /* gc parameters */ \ 295490075Sobrien product(uintx, InitialHeapSize, 0, \ 295590075Sobrien "Initial heap size (in bytes); zero means OldSize + NewSize") \ 295690075Sobrien \ 295790075Sobrien product(uintx, MaxHeapSize, ScaleForWordSize(96*M), \ 295890075Sobrien "Maximum heap size (in bytes)") \ 295990075Sobrien \ 296090075Sobrien product(uintx, OldSize, ScaleForWordSize(4*M), \ 296190075Sobrien "Initial tenured generation size (in bytes)") \ 296290075Sobrien \ 296390075Sobrien product(uintx, NewSize, ScaleForWordSize(1*M), \ 296490075Sobrien "Initial new generation size (in bytes)") \ 296590075Sobrien \ 296690075Sobrien product(uintx, MaxNewSize, max_uintx, \ 296790075Sobrien "Maximum new generation size (in bytes), max_uintx means set " \ 296890075Sobrien "ergonomically") \ 296990075Sobrien \ 297090075Sobrien product(uintx, PretenureSizeThreshold, 0, \ 297190075Sobrien "Maximum size in bytes of objects allocated in DefNew " \ 297290075Sobrien "generation; zero means no maximum") \ 297390075Sobrien \ 297490075Sobrien product(uintx, TLABSize, 0, \ 297590075Sobrien "Starting TLAB size (in bytes); zero means set ergonomically") \ 297690075Sobrien \ 297790075Sobrien product(uintx, MinTLABSize, 2*K, \ 297890075Sobrien "Minimum allowed TLAB size (in bytes)") \ 297990075Sobrien \ 298090075Sobrien product(uintx, TLABAllocationWeight, 35, \ 298190075Sobrien "Allocation averaging weight") \ 298290075Sobrien \ 298390075Sobrien product(uintx, TLABWasteTargetPercent, 1, \ 298490075Sobrien "Percentage of Eden that can be wasted") \ 298590075Sobrien \ 298690075Sobrien product(uintx, TLABRefillWasteFraction, 64, \ 298790075Sobrien "Max TLAB waste at a refill (internal fragmentation)") \ 298890075Sobrien \ 298990075Sobrien product(uintx, TLABWasteIncrement, 4, \ 299090075Sobrien "Increment allowed waste at slow allocation") \ 299190075Sobrien \ 299290075Sobrien product(uintx, SurvivorRatio, 8, \ 299390075Sobrien "Ratio of eden/survivor space size") \ 299490075Sobrien \ 299590075Sobrien product(uintx, NewRatio, 2, \ 299690075Sobrien "Ratio of new/old generation sizes") \ 299790075Sobrien \ 299890075Sobrien product_pd(uintx, NewSizeThreadIncrease, \ 299990075Sobrien "Additional size added to desired new generation size per " \ 300090075Sobrien "non-daemon thread (in bytes)") \ 300190075Sobrien \ 300290075Sobrien product_pd(uintx, MetaspaceSize, \ 300390075Sobrien "Initial size of Metaspaces (in bytes)") \ 300490075Sobrien \ 300590075Sobrien product(uintx, MaxMetaspaceSize, max_uintx, \ 300690075Sobrien "Maximum size of Metaspaces (in bytes)") \ 300790075Sobrien \ 300890075Sobrien product(uintx, ClassMetaspaceSize, 2*M, \ 300990075Sobrien "Maximum size of InstanceKlass area in Metaspace used for " \ 301090075Sobrien "UseCompressedKlassPointers") \ 301190075Sobrien \ 301290075Sobrien product(uintx, MinHeapFreeRatio, 40, \ 301390075Sobrien "Min percentage of heap free after GC to avoid expansion") \ 301490075Sobrien \ 301590075Sobrien product(uintx, MaxHeapFreeRatio, 70, \ 301690075Sobrien "Max percentage of heap free after GC to avoid shrinking") \ 301790075Sobrien \ 301890075Sobrien product(intx, SoftRefLRUPolicyMSPerMB, 1000, \ 301990075Sobrien "Number of milliseconds per MB of free space in the heap") \ 302090075Sobrien \ 302190075Sobrien product(uintx, MinHeapDeltaBytes, ScaleForWordSize(128*K), \ 302290075Sobrien "Min change in heap space due to GC (in bytes)") \ 302390075Sobrien \ 302490075Sobrien product(uintx, MinMetaspaceExpansion, ScaleForWordSize(256*K), \ 302590075Sobrien "Min expansion of Metaspace (in bytes)") \ 302690075Sobrien \ 302790075Sobrien product(uintx, MinMetaspaceFreeRatio, 40, \ 302890075Sobrien "Min percentage of Metaspace free after GC to avoid expansion") \ 302990075Sobrien \ 303090075Sobrien product(uintx, MaxMetaspaceFreeRatio, 70, \ 303190075Sobrien "Max percentage of Metaspace free after GC to avoid shrinking") \ 303290075Sobrien \ 303390075Sobrien product(uintx, MaxMetaspaceExpansion, ScaleForWordSize(4*M), \ 303490075Sobrien "Max expansion of Metaspace without full GC (in bytes)") \ 303590075Sobrien \ 303690075Sobrien product(intx, QueuedAllocationWarningCount, 0, \ 303790075Sobrien "Number of times an allocation that queues behind a GC " \ 303890075Sobrien "will retry before printing a warning") \ 303990075Sobrien \ 304090075Sobrien diagnostic(uintx, VerifyGCStartAt, 0, \ 304190075Sobrien "GC invoke count where +VerifyBefore/AfterGC kicks in") \ 304290075Sobrien \ 304390075Sobrien diagnostic(intx, VerifyGCLevel, 0, \ 304490075Sobrien "Generation level at which to start +VerifyBefore/AfterGC") \ 304590075Sobrien \ 304690075Sobrien product(uintx, MaxTenuringThreshold, 15, \ 304790075Sobrien "Maximum value for tenuring threshold") \ 304890075Sobrien \ 304990075Sobrien product(uintx, InitialTenuringThreshold, 7, \ 305090075Sobrien "Initial value for tenuring threshold") \ 305190075Sobrien \ 305290075Sobrien product(uintx, TargetSurvivorRatio, 50, \ 305390075Sobrien "Desired percentage of survivor space used after scavenge") \ 305490075Sobrien \ 305590075Sobrien product(uintx, MarkSweepDeadRatio, 5, \ 305690075Sobrien "Percentage (0-100) of the old gen allowed as dead wood." \ 305790075Sobrien "Serial mark sweep treats this as both the min and max value." \ 305890075Sobrien "CMS uses this value only if it falls back to mark sweep." \ 305990075Sobrien "Par compact uses a variable scale based on the density of the" \ 306090075Sobrien "generation and treats this as the max value when the heap is" \ 306190075Sobrien "either completely full or completely empty. Par compact also" \ 306290075Sobrien "has a smaller default value; see arguments.cpp.") \ 306390075Sobrien \ 306490075Sobrien product(intx, MarkSweepAlwaysCompactCount, 4, \ 306590075Sobrien "How often should we fully compact the heap (ignoring the dead " \ 306690075Sobrien "space parameters)") \ 306790075Sobrien \ 306890075Sobrien product(intx, PrintCMSStatistics, 0, \ 306990075Sobrien "Statistics for CMS") \ 307090075Sobrien \ 307190075Sobrien product(bool, PrintCMSInitiationStatistics, false, \ 307290075Sobrien "Statistics for initiating a CMS collection") \ 307390075Sobrien \ 307490075Sobrien product(intx, PrintFLSStatistics, 0, \ 307590075Sobrien "Statistics for CMS' FreeListSpace") \ 307690075Sobrien \ 307790075Sobrien product(intx, PrintFLSCensus, 0, \ 307890075Sobrien "Census for CMS' FreeListSpace") \ 307990075Sobrien \ 308090075Sobrien develop(uintx, GCExpandToAllocateDelayMillis, 0, \ 308190075Sobrien "Delay in ms between expansion and allocation") \ 308290075Sobrien \ 308390075Sobrien develop(uintx, GCWorkerDelayMillis, 0, \ 308490075Sobrien "Delay in ms in scheduling GC workers") \ 3085117395Skan \ 3086117395Skan product(intx, DeferThrSuspendLoopCount, 4000, \ 3087117395Skan "(Unstable) Number of times to iterate in safepoint loop " \ 3088117395Skan " before blocking VM threads ") \ 3089117395Skan \ 3090117395Skan product(intx, DeferPollingPageLoopCount, -1, \ 3091117395Skan "(Unsafe,Unstable) Number of iterations in safepoint loop " \ 3092117395Skan "before changing safepoint polling page to RO ") \ 3093117395Skan \ 3094117395Skan product(intx, SafepointSpinBeforeYield, 2000, "(Unstable)") \ 309590075Sobrien \ 309690075Sobrien product(bool, PSChunkLargeArrays, true, \ 309790075Sobrien "true: process large arrays in chunks") \ 309890075Sobrien \ 309990075Sobrien product(uintx, GCDrainStackTargetSize, 64, \ 310090075Sobrien "how many entries we'll try to leave on the stack during " \ 310190075Sobrien "parallel GC") \ 310290075Sobrien \ 310390075Sobrien /* stack parameters */ \ 310490075Sobrien product_pd(intx, StackYellowPages, \ 3105132718Skan "Number of yellow zone (recoverable overflows) pages") \ 3106132718Skan \ 310790075Sobrien product_pd(intx, StackRedPages, \ 3108132718Skan "Number of red zone (unrecoverable overflows) pages") \ 310990075Sobrien \ 311090075Sobrien product_pd(intx, StackShadowPages, \ 311190075Sobrien "Number of shadow zone (for overflow checking) pages" \ 311290075Sobrien " this should exceed the depth of the VM and native call stack") \ 311390075Sobrien \ 311490075Sobrien product_pd(intx, ThreadStackSize, \ 311590075Sobrien "Thread Stack Size (in Kbytes)") \ 311690075Sobrien \ 311790075Sobrien product_pd(intx, VMThreadStackSize, \ 311890075Sobrien "Non-Java Thread Stack Size (in Kbytes)") \ 311990075Sobrien \ 312090075Sobrien product_pd(intx, CompilerThreadStackSize, \ 312190075Sobrien "Compiler Thread Stack Size (in Kbytes)") \ 3122132718Skan \ 312390075Sobrien develop_pd(uintx, JVMInvokeMethodSlack, \ 312490075Sobrien "Stack space (bytes) required for JVM_InvokeMethod to complete") \ 312590075Sobrien \ 312690075Sobrien product(uintx, ThreadSafetyMargin, 50*M, \ 312790075Sobrien "Thread safety margin is used on fixed-stack LinuxThreads (on " \ 312890075Sobrien "Linux/x86 only) to prevent heap-stack collision. Set to 0 to " \ 312990075Sobrien "disable this feature") \ 313090075Sobrien \ 313190075Sobrien /* code cache parameters */ \ 313290075Sobrien develop(uintx, CodeCacheSegmentSize, 64, \ 313390075Sobrien "Code cache segment size (in bytes) - smallest unit of " \ 313490075Sobrien "allocation") \ 313590075Sobrien \ 3136132718Skan develop_pd(intx, CodeEntryAlignment, \ 313790075Sobrien "Code entry alignment for generated code (in bytes)") \ 313890075Sobrien \ 313990075Sobrien product_pd(intx, OptoLoopAlignment, \ 314090075Sobrien "Align inner loops to zero relative to this modulus") \ 314190075Sobrien \ 314290075Sobrien product_pd(uintx, InitialCodeCacheSize, \ 3143117395Skan "Initial code cache size (in bytes)") \ 314490075Sobrien \ 314590075Sobrien product_pd(uintx, ReservedCodeCacheSize, \ 314690075Sobrien "Reserved code cache size (in bytes) - maximum code cache size") \ 314790075Sobrien \ 314890075Sobrien product(uintx, CodeCacheMinimumFreeSpace, 500*K, \ 314990075Sobrien "When less than X space left, we stop compiling.") \ 315090075Sobrien \ 315190075Sobrien product_pd(uintx, CodeCacheExpansionSize, \ 315290075Sobrien "Code cache expansion size (in bytes)") \ 315390075Sobrien \ 315490075Sobrien develop_pd(uintx, CodeCacheMinBlockLength, \ 315590075Sobrien "Minimum number of segments in a code cache block.") \ 315690075Sobrien \ 315790075Sobrien notproduct(bool, ExitOnFullCodeCache, false, \ 315890075Sobrien "Exit the VM if we fill the code cache.") \ 315990075Sobrien \ 316090075Sobrien product(bool, UseCodeCacheFlushing, true, \ 316190075Sobrien "Attempt to clean the code cache before shutting off compiler") \ 316290075Sobrien \ 316390075Sobrien product(intx, MinCodeCacheFlushingInterval, 30, \ 316490075Sobrien "Min number of seconds between code cache cleaning sessions") \ 316590075Sobrien \ 316690075Sobrien product(uintx, CodeCacheFlushingMinimumFreeSpace, 1500*K, \ 316790075Sobrien "When less than X space left, start code cache cleaning") \ 316890075Sobrien \ 316990075Sobrien /* interpreter debugging */ \ 317090075Sobrien develop(intx, BinarySwitchThreshold, 5, \ 317190075Sobrien "Minimal number of lookupswitch entries for rewriting to binary " \ 317290075Sobrien "switch") \ 317390075Sobrien \ 317490075Sobrien develop(intx, StopInterpreterAt, 0, \ 317590075Sobrien "Stops interpreter execution at specified bytecode number") \ 317690075Sobrien \ 317790075Sobrien develop(intx, TraceBytecodesAt, 0, \ 317890075Sobrien "Traces bytecodes starting with specified bytecode number") \ 317990075Sobrien \ 318090075Sobrien /* compiler interface */ \ 318190075Sobrien develop(intx, CIStart, 0, \ 318290075Sobrien "the id of the first compilation to permit") \ 318390075Sobrien \ 318490075Sobrien develop(intx, CIStop, -1, \ 318590075Sobrien "the id of the last compilation to permit") \ 318690075Sobrien \ 318790075Sobrien develop(intx, CIStartOSR, 0, \ 318890075Sobrien "the id of the first osr compilation to permit " \ 318990075Sobrien "(CICountOSR must be on)") \ 319090075Sobrien \ 319190075Sobrien develop(intx, CIStopOSR, -1, \ 319290075Sobrien "the id of the last osr compilation to permit " \ 319390075Sobrien "(CICountOSR must be on)") \ 319490075Sobrien \ 319590075Sobrien develop(intx, CIBreakAtOSR, -1, \ 319690075Sobrien "id of osr compilation to break at") \ 319790075Sobrien \ 319890075Sobrien develop(intx, CIBreakAt, -1, \ 319990075Sobrien "id of compilation to break at") \ 320090075Sobrien \ 320190075Sobrien product(ccstrlist, CompileOnly, "", \ 320290075Sobrien "List of methods (pkg/class.name) to restrict compilation to") \ 320390075Sobrien \ 320490075Sobrien product(ccstr, CompileCommandFile, NULL, \ 320590075Sobrien "Read compiler commands from this file [.hotspot_compiler]") \ 320690075Sobrien \ 320790075Sobrien product(ccstrlist, CompileCommand, "", \ 320890075Sobrien "Prepend to .hotspot_compiler; e.g. log,java/lang/String.<init>") \ 320990075Sobrien \ 321090075Sobrien develop(bool, ReplayCompiles, false, \ 321190075Sobrien "Enable replay of compilations from ReplayDataFile") \ 321290075Sobrien \ 321390075Sobrien develop(ccstr, ReplayDataFile, "replay.txt", \ 321490075Sobrien "file containing compilation replay information") \ 321590075Sobrien \ 321690075Sobrien develop(intx, ReplaySuppressInitializers, 2, \ 321790075Sobrien "Controls handling of class initialization during replay" \ 321890075Sobrien "0 - don't do anything special" \ 321990075Sobrien "1 - treat all class initializers as empty" \ 322090075Sobrien "2 - treat class initializers for application classes as empty" \ 322190075Sobrien "3 - allow all class initializers to run during bootstrap but" \ 322290075Sobrien " pretend they are empty after starting replay") \ 322390075Sobrien \ 322490075Sobrien develop(bool, ReplayIgnoreInitErrors, false, \ 322590075Sobrien "Ignore exceptions thrown during initialization for replay") \ 322690075Sobrien \ 322790075Sobrien develop(bool, DumpReplayDataOnError, true, \ 322890075Sobrien "record replay data for crashing compiler threads") \ 3229117395Skan \ 3230117395Skan product(bool, CICompilerCountPerCPU, false, \ 3231117395Skan "1 compiler thread for log(N CPUs)") \ 3232117395Skan \ 3233117395Skan develop(intx, CIFireOOMAt, -1, \ 3234117395Skan "Fire OutOfMemoryErrors throughout CI for testing the compiler " \ 3235117395Skan "(non-negative value throws OOM after this many CI accesses " \ 3236117395Skan "in each compile)") \ 3237117395Skan \ 323890075Sobrien notproduct(bool, CIObjectFactoryVerify, false, \ 323990075Sobrien "enable potentially expensive verification in ciObjectFactory") \ 324090075Sobrien \ 324190075Sobrien /* Priorities */ \ 324290075Sobrien product_pd(bool, UseThreadPriorities, "Use native thread priorities") \ 324390075Sobrien \ 324490075Sobrien product(intx, ThreadPriorityPolicy, 0, \ 324590075Sobrien "0 : Normal. "\ 324690075Sobrien " VM chooses priorities that are appropriate for normal "\ 324790075Sobrien " applications. On Solaris NORM_PRIORITY and above are mapped "\ 3248132718Skan " to normal native priority. Java priorities below NORM_PRIORITY"\ 324990075Sobrien " map to lower native priority values. On Windows applications"\ 3250169689Skan " are allowed to use higher native priorities. However, with "\ 325190075Sobrien " ThreadPriorityPolicy=0, VM will not use the highest possible"\ 325290075Sobrien " native priority, THREAD_PRIORITY_TIME_CRITICAL, as it may "\ 3253169689Skan " interfere with system threads. On Linux thread priorities "\ 3254169689Skan " are ignored because the OS does not support static priority "\ 3255169689Skan " in SCHED_OTHER scheduling class which is the only choice for"\ 325690075Sobrien " non-root, non-realtime applications. "\ 3257169689Skan "1 : Aggressive. "\ 3258169689Skan " Java thread priorities map over to the entire range of "\ 3259169689Skan " native thread priorities. Higher Java thread priorities map "\ 326090075Sobrien " to higher native thread priorities. This policy should be "\ 3261169689Skan " used with care, as sometimes it can cause performance "\ 3262169689Skan " degradation in the application and/or the entire system. On "\ 326390075Sobrien " Linux this policy requires root privilege.") \ 3264169689Skan \ 3265169689Skan product(bool, ThreadPriorityVerbose, false, \ 3266169689Skan "Print priority changes") \ 3267169689Skan \ 3268169689Skan product(intx, DefaultThreadPriority, -1, \ 3269169689Skan "The native priority at which threads run if not elsewhere " \ 327090075Sobrien "specified (-1 means no change)") \ 327190075Sobrien \ 327290075Sobrien product(intx, CompilerThreadPriority, -1, \ 327390075Sobrien "The native priority at which compiler threads should run " \ 327490075Sobrien "(-1 means no change)") \ 327590075Sobrien \ 3276132718Skan product(intx, VMThreadPriority, -1, \ 327790075Sobrien "The native priority at which the VM thread should run " \ 327890075Sobrien "(-1 means no change)") \ 327990075Sobrien \ 328090075Sobrien product(bool, CompilerThreadHintNoPreempt, true, \ 328190075Sobrien "(Solaris only) Give compiler threads an extra quanta") \ 328290075Sobrien \ 328390075Sobrien product(bool, VMThreadHintNoPreempt, false, \ 328490075Sobrien "(Solaris only) Give VM thread an extra quanta") \ 328590075Sobrien \ 328690075Sobrien product(intx, JavaPriority1_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 328790075Sobrien product(intx, JavaPriority2_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 328890075Sobrien product(intx, JavaPriority3_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 328990075Sobrien product(intx, JavaPriority4_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329090075Sobrien product(intx, JavaPriority5_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329190075Sobrien product(intx, JavaPriority6_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329290075Sobrien product(intx, JavaPriority7_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329390075Sobrien product(intx, JavaPriority8_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329490075Sobrien product(intx, JavaPriority9_To_OSPriority, -1, "Map Java priorities to OS priorities") \ 329590075Sobrien product(intx, JavaPriority10_To_OSPriority,-1, "Map Java priorities to OS priorities") \ 329690075Sobrien \ 3297169689Skan experimental(bool, UseCriticalJavaThreadPriority, false, \ 329890075Sobrien "Java thread priority 10 maps to critical scheduling priority") \ 329990075Sobrien \ 330090075Sobrien experimental(bool, UseCriticalCompilerThreadPriority, false, \ 330190075Sobrien "Compiler thread(s) run at critical scheduling priority") \ 330290075Sobrien \ 330390075Sobrien experimental(bool, UseCriticalCMSThreadPriority, false, \ 330490075Sobrien "ConcurrentMarkSweep thread runs at critical scheduling priority")\ 3305169689Skan \ 3306169689Skan /* compiler debugging */ \ 330790075Sobrien notproduct(intx, CompileTheWorldStartAt, 1, \ 330890075Sobrien "First class to consider when using +CompileTheWorld") \ 330990075Sobrien \ 331090075Sobrien notproduct(intx, CompileTheWorldStopAt, max_jint, \ 331190075Sobrien "Last class to consider when using +CompileTheWorld") \ 331290075Sobrien \ 331390075Sobrien develop(intx, NewCodeParameter, 0, \ 331490075Sobrien "Testing Only: Create a dedicated integer parameter before " \ 331590075Sobrien "putback") \ 331690075Sobrien \ 331790075Sobrien /* new oopmap storage allocation */ \ 331890075Sobrien develop(intx, MinOopMapAllocation, 8, \ 331990075Sobrien "Minimum number of OopMap entries in an OopMapSet") \ 332090075Sobrien \ 332190075Sobrien /* Background Compilation */ \ 3322132718Skan develop(intx, LongCompileThreshold, 50, \ 3323132718Skan "Used with +TraceLongCompiles") \ 3324132718Skan \ 3325169689Skan product(intx, StarvationMonitorInterval, 200, \ 332690075Sobrien "Pause between each check in ms") \ 332790075Sobrien \ 332890075Sobrien /* recompilation */ \ 332990075Sobrien product_pd(intx, CompileThreshold, \ 333090075Sobrien "number of interpreted method invocations before (re-)compiling") \ 333190075Sobrien \ 333290075Sobrien product_pd(intx, BackEdgeThreshold, \ 333390075Sobrien "Interpreter Back edge threshold at which an OSR compilation is invoked")\ 333490075Sobrien \ 333590075Sobrien product(intx, Tier0InvokeNotifyFreqLog, 7, \ 333690075Sobrien "Interpreter (tier 0) invocation notification frequency.") \ 333790075Sobrien \ 333890075Sobrien product(intx, Tier2InvokeNotifyFreqLog, 11, \ 333990075Sobrien "C1 without MDO (tier 2) invocation notification frequency.") \ 334090075Sobrien \ 334190075Sobrien product(intx, Tier3InvokeNotifyFreqLog, 10, \ 334290075Sobrien "C1 with MDO profiling (tier 3) invocation notification " \ 334390075Sobrien "frequency.") \ 334490075Sobrien \ 334590075Sobrien product(intx, Tier23InlineeNotifyFreqLog, 20, \ 334690075Sobrien "Inlinee invocation (tiers 2 and 3) notification frequency") \ 334790075Sobrien \ 334890075Sobrien product(intx, Tier0BackedgeNotifyFreqLog, 10, \ 334990075Sobrien "Interpreter (tier 0) invocation notification frequency.") \ 335090075Sobrien \ 335190075Sobrien product(intx, Tier2BackedgeNotifyFreqLog, 14, \ 335290075Sobrien "C1 without MDO (tier 2) invocation notification frequency.") \ 335390075Sobrien \ 335490075Sobrien product(intx, Tier3BackedgeNotifyFreqLog, 13, \ 335590075Sobrien "C1 with MDO profiling (tier 3) invocation notification " \ 335690075Sobrien "frequency.") \ 335790075Sobrien \ 335890075Sobrien product(intx, Tier2CompileThreshold, 0, \ 335990075Sobrien "threshold at which tier 2 compilation is invoked") \ 336090075Sobrien \ 336190075Sobrien product(intx, Tier2BackEdgeThreshold, 0, \ 336290075Sobrien "Back edge threshold at which tier 2 compilation is invoked") \ 336390075Sobrien \ 336490075Sobrien product(intx, Tier3InvocationThreshold, 200, \ 336590075Sobrien "Compile if number of method invocations crosses this " \ 336690075Sobrien "threshold") \ 336790075Sobrien \ 336890075Sobrien product(intx, Tier3MinInvocationThreshold, 100, \ 336990075Sobrien "Minimum invocation to compile at tier 3") \ 337090075Sobrien \ 337190075Sobrien product(intx, Tier3CompileThreshold, 2000, \ 337290075Sobrien "Threshold at which tier 3 compilation is invoked (invocation " \ 337390075Sobrien "minimum must be satisfied.") \ 337490075Sobrien \ 337590075Sobrien product(intx, Tier3BackEdgeThreshold, 60000, \ 337690075Sobrien "Back edge threshold at which tier 3 OSR compilation is invoked") \ 337790075Sobrien \ 337890075Sobrien product(intx, Tier4InvocationThreshold, 5000, \ 337990075Sobrien "Compile if number of method invocations crosses this " \ 338090075Sobrien "threshold") \ 338190075Sobrien \ 338290075Sobrien product(intx, Tier4MinInvocationThreshold, 600, \ 338390075Sobrien "Minimum invocation to compile at tier 4") \ 338490075Sobrien \ 338590075Sobrien product(intx, Tier4CompileThreshold, 15000, \ 338690075Sobrien "Threshold at which tier 4 compilation is invoked (invocation " \ 338790075Sobrien "minimum must be satisfied.") \ 338890075Sobrien \ 338990075Sobrien product(intx, Tier4BackEdgeThreshold, 40000, \ 339090075Sobrien "Back edge threshold at which tier 4 OSR compilation is invoked") \ 339190075Sobrien \ 339290075Sobrien product(intx, Tier3DelayOn, 5, \ 339390075Sobrien "If C2 queue size grows over this amount per compiler thread " \ 3394117395Skan "stop compiling at tier 3 and start compiling at tier 2") \ 3395117395Skan \ 3396169689Skan product(intx, Tier3DelayOff, 2, \ 3397169689Skan "If C2 queue size is less than this amount per compiler thread " \ 3398169689Skan "allow methods compiled at tier 2 transition to tier 3") \ 3399169689Skan \ 3400169689Skan product(intx, Tier3LoadFeedback, 5, \ 3401169689Skan "Tier 3 thresholds will increase twofold when C1 queue size " \ 3402169689Skan "reaches this amount per compiler thread") \ 3403169689Skan \ 3404169689Skan product(intx, Tier4LoadFeedback, 3, \ 3405117395Skan "Tier 4 thresholds will increase twofold when C2 queue size " \ 3406117395Skan "reaches this amount per compiler thread") \ 340790075Sobrien \ 340890075Sobrien product(intx, TieredCompileTaskTimeout, 50, \ 340990075Sobrien "Kill compile task if method was not used within " \ 341090075Sobrien "given timeout in milliseconds") \ 341190075Sobrien \ 341290075Sobrien product(intx, TieredStopAtLevel, 4, \ 341390075Sobrien "Stop at given compilation level") \ 341490075Sobrien \ 341590075Sobrien product(intx, Tier0ProfilingStartPercentage, 200, \ 3416132718Skan "Start profiling in interpreter if the counters exceed tier 3" \ 341790075Sobrien "thresholds by the specified percentage") \ 341890075Sobrien \ 341990075Sobrien product(intx, TieredRateUpdateMinTime, 1, \ 342090075Sobrien "Minimum rate sampling interval (in milliseconds)") \ 342190075Sobrien \ 342290075Sobrien product(intx, TieredRateUpdateMaxTime, 25, \ 342390075Sobrien "Maximum rate sampling interval (in milliseconds)") \ 342490075Sobrien \ 342590075Sobrien product_pd(bool, TieredCompilation, \ 342690075Sobrien "Enable tiered compilation") \ 342790075Sobrien \ 342890075Sobrien product(bool, PrintTieredEvents, false, \ 342990075Sobrien "Print tiered events notifications") \ 343090075Sobrien \ 343190075Sobrien product_pd(intx, OnStackReplacePercentage, \ 343290075Sobrien "NON_TIERED number of method invocations/branches (expressed as %"\ 3433132718Skan "of CompileThreshold) before (re-)compiling OSR code") \ 343490075Sobrien \ 343590075Sobrien product(intx, InterpreterProfilePercentage, 33, \ 343690075Sobrien "NON_TIERED number of method invocations/branches (expressed as %"\ 343790075Sobrien "of CompileThreshold) before profiling in the interpreter") \ 343890075Sobrien \ 343990075Sobrien develop(intx, MaxRecompilationSearchLength, 10, \ 344090075Sobrien "max. # frames to inspect searching for recompilee") \ 344190075Sobrien \ 344290075Sobrien develop(intx, MaxInterpretedSearchLength, 3, \ 344390075Sobrien "max. # interp. frames to skip when searching for recompilee") \ 344490075Sobrien \ 344590075Sobrien develop(intx, DesiredMethodLimit, 8000, \ 344690075Sobrien "desired max. method size (in bytecodes) after inlining") \ 3447169689Skan \ 3448169689Skan develop(intx, HugeMethodLimit, 8000, \ 3449169689Skan "don't compile methods larger than this if " \ 345090075Sobrien "+DontCompileHugeMethods") \ 345190075Sobrien \ 3452169689Skan /* New JDK 1.4 reflection implementation */ \ 345390075Sobrien \ 345490075Sobrien develop(bool, UseNewReflection, true, \ 345590075Sobrien "Temporary flag for transition to reflection based on dynamic " \ 3456169689Skan "bytecode generation in 1.4; can no longer be turned off in 1.4 " \ 345790075Sobrien "JDK, and is unneeded in 1.3 JDK, but marks most places VM " \ 3458169689Skan "changes were needed") \ 345990075Sobrien \ 3460169689Skan develop(bool, VerifyReflectionBytecodes, false, \ 3461169689Skan "Force verification of 1.4 reflection bytecodes. Does not work " \ 3462169689Skan "in situations like that described in 4486457 or for " \ 3463169689Skan "constructors generated for serialization, so can not be enabled "\ 3464169689Skan "in product.") \ 3465169689Skan \ 3466169689Skan product(bool, ReflectionWrapResolutionErrors, true, \ 3467169689Skan "Temporary flag for transition to AbstractMethodError wrapped " \ 3468169689Skan "in InvocationTargetException. See 6531596") \ 346990075Sobrien \ 3470169689Skan \ 3471169689Skan develop(intx, FastSuperclassLimit, 8, \ 3472169689Skan "Depth of hardwired instanceof accelerator array") \ 3473169689Skan \ 3474169689Skan /* Properties for Java libraries */ \ 3475169689Skan \ 3476169689Skan product(uintx, MaxDirectMemorySize, 0, \ 3477169689Skan "Maximum total size of NIO direct-buffer allocations") \ 3478169689Skan \ 3479169689Skan /* temporary developer defined flags */ \ 348090075Sobrien \ 348190075Sobrien diagnostic(bool, UseNewCode, false, \ 348290075Sobrien "Testing Only: Use the new version while testing") \ 3483169689Skan \ 3484169689Skan diagnostic(bool, UseNewCode2, false, \ 3485169689Skan "Testing Only: Use the new version while testing") \ 3486169689Skan \ 3487169689Skan diagnostic(bool, UseNewCode3, false, \ 3488169689Skan "Testing Only: Use the new version while testing") \ 3489169689Skan \ 3490169689Skan /* flags for performance data collection */ \ 3491169689Skan \ 349290075Sobrien product(bool, UsePerfData, falseInEmbedded, \ 349390075Sobrien "Flag to disable jvmstat instrumentation for performance testing" \ 349490075Sobrien "and problem isolation purposes.") \ 349590075Sobrien \ 349690075Sobrien product(bool, PerfDataSaveToFile, false, \ 349790075Sobrien "Save PerfData memory to hsperfdata_<pid> file on exit") \ 349890075Sobrien \ 349990075Sobrien product(ccstr, PerfDataSaveFile, NULL, \ 350090075Sobrien "Save PerfData memory to the specified absolute pathname," \ 3501132718Skan "%p in the file name if present will be replaced by pid") \ 350290075Sobrien \ 350390075Sobrien product(intx, PerfDataSamplingInterval, 50 /*ms*/, \ 350490075Sobrien "Data sampling interval in milliseconds") \ 350590075Sobrien \ 350690075Sobrien develop(bool, PerfTraceDataCreation, false, \ 350790075Sobrien "Trace creation of Performance Data Entries") \ 350890075Sobrien \ 350990075Sobrien develop(bool, PerfTraceMemOps, false, \ 351090075Sobrien "Trace PerfMemory create/attach/detach calls") \ 351190075Sobrien \ 351290075Sobrien product(bool, PerfDisableSharedMem, false, \ 351390075Sobrien "Store performance data in standard memory") \ 351490075Sobrien \ 351590075Sobrien product(intx, PerfDataMemorySize, 32*K, \ 351690075Sobrien "Size of performance data memory region. Will be rounded " \ 351790075Sobrien "up to a multiple of the native os page size.") \ 351890075Sobrien \ 351990075Sobrien product(intx, PerfMaxStringConstLength, 1024, \ 352090075Sobrien "Maximum PerfStringConstant string length before truncation") \ 352190075Sobrien \ 352290075Sobrien product(bool, PerfAllowAtExitRegistration, false, \ 352390075Sobrien "Allow registration of atexit() methods") \ 352490075Sobrien \ 352590075Sobrien product(bool, PerfBypassFileSystemCheck, false, \ 352690075Sobrien "Bypass Win32 file system criteria checks (Windows Only)") \ 352790075Sobrien \ 352890075Sobrien product(intx, UnguardOnExecutionViolation, 0, \ 352990075Sobrien "Unguard page and retry on no-execute fault (Win32 only)" \ 353090075Sobrien "0=off, 1=conservative, 2=aggressive") \ 353190075Sobrien \ 353290075Sobrien /* Serviceability Support */ \ 353390075Sobrien \ 353490075Sobrien product(bool, ManagementServer, false, \ 353590075Sobrien "Create JMX Management Server") \ 353690075Sobrien \ 353790075Sobrien product(bool, DisableAttachMechanism, false, \ 353890075Sobrien "Disable mechanism that allows tools to attach to this VM") \ 353990075Sobrien \ 354090075Sobrien product(bool, StartAttachListener, false, \ 354190075Sobrien "Always start Attach Listener at VM startup") \ 354290075Sobrien \ 354390075Sobrien manageable(bool, PrintConcurrentLocks, false, \ 354490075Sobrien "Print java.util.concurrent locks in thread dump") \ 354590075Sobrien \ 354690075Sobrien product(bool, TransmitErrorReport, false, \ 354790075Sobrien "Enable error report transmission on erroneous termination") \ 354890075Sobrien \ 354990075Sobrien product(ccstr, ErrorReportServer, NULL, \ 355090075Sobrien "Override built-in error report server address") \ 355190075Sobrien \ 355290075Sobrien /* Shared spaces */ \ 355390075Sobrien \ 355490075Sobrien product(bool, UseSharedSpaces, true, \ 355590075Sobrien "Use shared spaces for metadata") \ 355690075Sobrien \ 355790075Sobrien product(bool, RequireSharedSpaces, false, \ 355890075Sobrien "Require shared spaces for metadata") \ 355990075Sobrien \ 356090075Sobrien product(bool, DumpSharedSpaces, false, \ 356190075Sobrien "Special mode: JVM reads a class list, loads classes, builds " \ 356290075Sobrien "shared spaces, and dumps the shared spaces to a file to be " \ 356390075Sobrien "used in future JVM runs.") \ 356490075Sobrien \ 356590075Sobrien product(bool, PrintSharedSpaces, false, \ 356690075Sobrien "Print usage of shared spaces") \ 356790075Sobrien \ 356890075Sobrien product(uintx, SharedReadWriteSize, NOT_LP64(12*M) LP64_ONLY(16*M), \ 356990075Sobrien "Size of read-write space for metadata (in bytes)") \ 357090075Sobrien \ 357190075Sobrien product(uintx, SharedReadOnlySize, NOT_LP64(12*M) LP64_ONLY(16*M), \ 357290075Sobrien "Size of read-only space for metadata (in bytes)") \ 357390075Sobrien \ 357490075Sobrien product(uintx, SharedMiscDataSize, NOT_LP64(2*M) LP64_ONLY(4*M), \ 357590075Sobrien "Size of the shared miscellaneous data area (in bytes)") \ 357690075Sobrien \ 357790075Sobrien product(uintx, SharedMiscCodeSize, 120*K, \ 357890075Sobrien "Size of the shared miscellaneous code area (in bytes)") \ 357990075Sobrien \ 358090075Sobrien product(uintx, SharedDummyBlockSize, 0, \ 358190075Sobrien "Size of dummy block used to shift heap addresses (in bytes)") \ 358290075Sobrien \ 358390075Sobrien diagnostic(bool, EnableInvokeDynamic, true, \ 358490075Sobrien "support JSR 292 (method handles, invokedynamic, " \ 358590075Sobrien "anonymous classes") \ 358690075Sobrien \ 358790075Sobrien diagnostic(bool, PrintMethodHandleStubs, false, \ 358890075Sobrien "Print generated stub code for method handles") \ 358990075Sobrien \ 359090075Sobrien develop(bool, TraceMethodHandles, false, \ 359190075Sobrien "trace internal method handle operations") \ 359290075Sobrien \ 359390075Sobrien diagnostic(bool, VerifyMethodHandles, trueInDebug, \ 359490075Sobrien "perform extra checks when constructing method handles") \ 359590075Sobrien \ 359690075Sobrien diagnostic(bool, ShowHiddenFrames, false, \ 359790075Sobrien "show method handle implementation frames (usually hidden)") \ 3598169689Skan \ 359990075Sobrien experimental(bool, TrustFinalNonStaticFields, false, \ 360090075Sobrien "trust final non-static declarations for constant folding") \ 360190075Sobrien \ 360290075Sobrien develop(bool, TraceInvokeDynamic, false, \ 360390075Sobrien "trace internal invoke dynamic operations") \ 360490075Sobrien \ 360590075Sobrien diagnostic(bool, PauseAtStartup, false, \ 360690075Sobrien "Causes the VM to pause at startup time and wait for the pause " \ 360790075Sobrien "file to be removed (default: ./vm.paused.<pid>)") \ 360890075Sobrien \ 3609132718Skan diagnostic(ccstr, PauseAtStartupFile, NULL, \ 361090075Sobrien "The file to create and for whose removal to await when pausing " \ 3611132718Skan "at startup. (default: ./vm.paused.<pid>)") \ 3612132718Skan \ 3613132718Skan diagnostic(bool, PauseAtExit, false, \ 3614132718Skan "Pause and wait for keypress on exit if a debugger is attached") \ 3615132718Skan \ 3616132718Skan product(bool, ExtendedDTraceProbes, false, \ 3617132718Skan "Enable performance-impacting dtrace probes") \ 3618132718Skan \ 3619132718Skan product(bool, DTraceMethodProbes, false, \ 3620132718Skan "Enable dtrace probes for method-entry and method-exit") \ 3621169689Skan \ 3622169689Skan product(bool, DTraceAllocProbes, false, \ 3623132718Skan "Enable dtrace probes for object allocation") \ 3624169689Skan \ 3625169689Skan product(bool, DTraceMonitorProbes, false, \ 3626169689Skan "Enable dtrace probes for monitor events") \ 362790075Sobrien \ 362890075Sobrien product(bool, RelaxAccessControlCheck, false, \ 362990075Sobrien "Relax the access control checks in the verifier") \ 3630117395Skan \ 363190075Sobrien diagnostic(bool, PrintDTraceDOF, false, \ 363290075Sobrien "Print the DTrace DOF passed to the system for JSDT probes") \ 363390075Sobrien \ 363490075Sobrien product(uintx, StringTableSize, defaultStringTableSize, \ 363590075Sobrien "Number of buckets in the interned String table") \ 363690075Sobrien \ 363790075Sobrien develop(bool, TraceDefaultMethods, false, \ 363890075Sobrien "Trace the default method processing steps") \ 363990075Sobrien \ 364090075Sobrien develop(bool, ParseAllGenericSignatures, false, \ 364190075Sobrien "Parse all generic signatures while classloading") \ 364290075Sobrien \ 3643117395Skan develop(bool, VerifyGenericSignatures, false, \ 364490075Sobrien "Abort VM on erroneous or inconsistent generic signatures") \ 3645169689Skan \ 364690075Sobrien product(bool, UseVMInterruptibleIO, false, \ 364790075Sobrien "(Unstable, Solaris-specific) Thread interrupt before or with " \ 364890075Sobrien "EINTR for I/O operations results in OS_INTRPT. The default value"\ 3649169689Skan " of this flag is true for JDK 6 and earlier") \ 3650169689Skan \ 365190075Sobrien diagnostic(bool, WhiteBoxAPI, false, \ 365290075Sobrien "Enable internal testing APIs") \ 365390075Sobrien \ 365490075Sobrien product(bool, PrintGCCause, true, \ 365590075Sobrien "Include GC cause in GC logging") \ 3656132718Skan \ 3657169689Skan product(bool, AllowNonVirtualCalls, false, \ 3658169689Skan "Obey the ACC_SUPER flag and allow invokenonvirtual calls") 3659169689Skan 3660169689Skan/* 366190075Sobrien * Macros for factoring of globals 3662132718Skan */ 366390075Sobrien 366490075Sobrien// Interface macros 366590075Sobrien#define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 366690075Sobrien#define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name; 366790075Sobrien#define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name; 366890075Sobrien#define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name; 366990075Sobrien#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name; 367090075Sobrien#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name; 367190075Sobrien#ifdef PRODUCT 367290075Sobrien#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value; 367390075Sobrien#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name; 367490075Sobrien#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) 367590075Sobrien#else 367690075Sobrien#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name; 367790075Sobrien#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name; 367890075Sobrien#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name; 367990075Sobrien#endif 368090075Sobrien// Special LP64 flags, product only needed for now. 368190075Sobrien#ifdef _LP64 368290075Sobrien#define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) extern "C" type name; 368390075Sobrien#else 368490075Sobrien#define DECLARE_LP64_PRODUCT_FLAG(type, name, value, doc) const type name = value; 368590075Sobrien#endif // _LP64 368690075Sobrien 368790075Sobrien// Implementation macros 368890075Sobrien#define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value; 368990075Sobrien#define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name; 369090075Sobrien#define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value; 3691132718Skan#define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value; 369290075Sobrien#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value; 369390075Sobrien#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value; 369490075Sobrien#ifdef PRODUCT 369590075Sobrien#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */ 369690075Sobrien#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) /* flag name is constant */ 369790075Sobrien#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) 369890075Sobrien#else 369990075Sobrien#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value; 3700132718Skan#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name; 370190075Sobrien#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value; 370290075Sobrien#endif 370390075Sobrien#ifdef _LP64 370490075Sobrien#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value; 370590075Sobrien#else 370690075Sobrien#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */ 370790075Sobrien#endif // _LP64 370850397Sobrien 370950397SobrienRUNTIME_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) 371050397Sobrien 371150397SobrienRUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG) 3712132718Skan 371350397SobrienARCH_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG) 371450397Sobrien 371550397Sobrien// Extensions 371650397Sobrien 371750397Sobrien#include "runtime/globals_ext.hpp" 371850397Sobrien 3719169689Skan#endif // SHARE_VM_RUNTIME_GLOBALS_HPP 3720169689Skan