hotspot/src/share/vm/runtime/arguments.cpp
author tschatzl
Wed, 11 Sep 2013 16:25:02 +0200
changeset 19986 33d188c66ed9
parent 19979 ebe1dbb6e1aa
child 20005 6fb8070af25d
permissions -rw-r--r--
8010722: assert: failed: heap size is too big for compressed oops Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation. Reviewed-by: stefank, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
15228
e92acc84ade3 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 15101
diff changeset
     2
 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5419
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5419
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5419
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    25
#include "precompiled.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    26
#include "classfile/javaAssertions.hpp"
14487
9a40ad461ee9 7122219: Passed StringTableSize value not verified
hseigel
parents: 14296
diff changeset
    27
#include "classfile/symbolTable.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    28
#include "compiler/compilerOracle.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    29
#include "memory/allocation.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    30
#include "memory/cardTableRS.hpp"
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
    31
#include "memory/genCollectedHeap.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    32
#include "memory/referenceProcessor.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    33
#include "memory/universe.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    34
#include "oops/oop.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    35
#include "prims/jvmtiExport.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    36
#include "runtime/arguments.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    37
#include "runtime/globals_extension.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    38
#include "runtime/java.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    39
#include "services/management.hpp"
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
    40
#include "services/memTracker.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    41
#include "utilities/defaultStream.hpp"
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
    42
#include "utilities/macros.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    43
#include "utilities/taskqueue.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    44
#ifdef TARGET_OS_FAMILY_linux
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    45
# include "os_linux.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    46
#endif
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    47
#ifdef TARGET_OS_FAMILY_solaris
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    48
# include "os_solaris.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    49
#endif
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    50
#ifdef TARGET_OS_FAMILY_windows
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    51
# include "os_windows.inline.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    52
#endif
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 10543
diff changeset
    53
#ifdef TARGET_OS_FAMILY_bsd
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 10543
diff changeset
    54
# include "os_bsd.inline.hpp"
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 10543
diff changeset
    55
#endif
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
    56
#if INCLUDE_ALL_GCS
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7391
diff changeset
    57
#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp"
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
    58
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
    59
#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
    60
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
9130
7d6aa04b56c1 7019210: Fix misc references to /bugreport websites
ohair
parents: 8727
diff changeset
    62
// Note: This is a special bug reporting site for the JVM
7d6aa04b56c1 7019210: Fix misc references to /bugreport websites
ohair
parents: 8727
diff changeset
    63
#define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
#define DEFAULT_JAVA_LAUNCHER  "generic"
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
19155
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    66
// Disable options not supported in this release, with a warning if they
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    67
// were explicitly requested on the command-line
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    68
#define UNSUPPORTED_OPTION(opt, description)                    \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    69
do {                                                            \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    70
  if (opt) {                                                    \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    71
    if (FLAG_IS_CMDLINE(opt)) {                                 \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    72
      warning(description " is disabled in this release.");     \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    73
    }                                                           \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    74
    FLAG_SET_DEFAULT(opt, false);                               \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    75
  }                                                             \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    76
} while(0)
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    77
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    78
#define UNSUPPORTED_GC_OPTION(gc)                                     \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    79
do {                                                                  \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    80
  if (gc) {                                                           \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    81
    if (FLAG_IS_CMDLINE(gc)) {                                        \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    82
      warning(#gc " is not supported in this VM.  Using Serial GC."); \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    83
    }                                                                 \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    84
    FLAG_SET_DEFAULT(gc, false);                                      \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    85
  }                                                                   \
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    86
} while(0)
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
    87
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
char**  Arguments::_jvm_flags_array             = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
int     Arguments::_num_jvm_flags               = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
char**  Arguments::_jvm_args_array              = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
int     Arguments::_num_jvm_args                = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
char*  Arguments::_java_command                 = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
SystemProperty* Arguments::_system_properties   = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
const char*  Arguments::_gc_log_filename        = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
bool   Arguments::_has_profile                  = false;
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
    96
size_t Arguments::_conservative_max_heap_alignment = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
uintx  Arguments::_min_heap_size                = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
Arguments::Mode Arguments::_mode                = _mixed;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
bool   Arguments::_java_compiler                = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
bool   Arguments::_xdebug_mode                  = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
const char*  Arguments::_java_vendor_url_bug    = DEFAULT_VENDOR_URL_BUG;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
const char*  Arguments::_sun_java_launcher      = DEFAULT_JAVA_LAUNCHER;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
int    Arguments::_sun_java_launcher_pid        = -1;
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
   104
bool   Arguments::_created_by_gamma_launcher    = false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
// These parameters are reset in method parse_vm_init_args(JavaVMInitArgs*)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
bool   Arguments::_AlwaysCompileLoopMethods     = AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
bool   Arguments::_UseOnStackReplacement        = UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
bool   Arguments::_BackgroundCompilation        = BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
bool   Arguments::_ClipInlining                 = ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
char*  Arguments::SharedArchivePath             = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
AgentLibraryList Arguments::_libraryList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
AgentLibraryList Arguments::_agentList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
abort_hook_t     Arguments::_abort_hook         = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
exit_hook_t      Arguments::_exit_hook          = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
vfprintf_hook_t  Arguments::_vfprintf_hook      = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
SystemProperty *Arguments::_java_ext_dirs = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
SystemProperty *Arguments::_java_endorsed_dirs = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
SystemProperty *Arguments::_sun_boot_library_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
SystemProperty *Arguments::_java_library_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
SystemProperty *Arguments::_java_home = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
SystemProperty *Arguments::_java_class_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
SystemProperty *Arguments::_sun_boot_class_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
char* Arguments::_meta_index_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
char* Arguments::_meta_index_dir = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
// Check if head of 'option' matches 'name', and sets 'tail' remaining part of option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
static bool match_option(const JavaVMOption *option, const char* name,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
                         const char** tail) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
  int len = (int)strlen(name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  if (strncmp(option->optionString, name, len) == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
    *tail = option->optionString + len;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
static void logOption(const char* opt) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  if (PrintVMOptions) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
    jio_fprintf(defaultStream::output_stream(), "VM option '%s'\n", opt);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
// Process java launcher properties.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
void Arguments::process_sun_java_launcher_properties(JavaVMInitArgs* args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  // See if sun.java.launcher or sun.java.launcher.pid is defined.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  // Must do this before setting up other system properties,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  // as some of them may depend on launcher type.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  for (int index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
    const JavaVMOption* option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
    const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
    if (match_option(option, "-Dsun.java.launcher=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
      process_java_launcher_argument(tail, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
      continue;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
    if (match_option(option, "-Dsun.java.launcher.pid=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
      _sun_java_launcher_pid = atoi(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
      continue;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
// Initialize system properties key and value.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
void Arguments::init_system_properties() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.name",
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
                                                                 "Java Virtual Machine Specification",  false));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  PropertyList_add(&_system_properties, new SystemProperty("java.vm.version", VM_Version::vm_release(),  false));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  PropertyList_add(&_system_properties, new SystemProperty("java.vm.name", VM_Version::vm_name(),  false));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  PropertyList_add(&_system_properties, new SystemProperty("java.vm.info", VM_Version::vm_info_string(),  true));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  // following are JVMTI agent writeable properties.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
  // Properties values are set to NULL and they are
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  // os specific they are initialized in os::init_system_properties_values().
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
  _java_ext_dirs = new SystemProperty("java.ext.dirs", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
  _java_endorsed_dirs = new SystemProperty("java.endorsed.dirs", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  _sun_boot_library_path = new SystemProperty("sun.boot.library.path", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  _java_library_path = new SystemProperty("java.library.path", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
  _java_home =  new SystemProperty("java.home", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  _sun_boot_class_path = new SystemProperty("sun.boot.class.path", NULL,  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  _java_class_path = new SystemProperty("java.class.path", "",  true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  // Add to System Property list.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
  PropertyList_add(&_system_properties, _java_ext_dirs);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  PropertyList_add(&_system_properties, _java_endorsed_dirs);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  PropertyList_add(&_system_properties, _sun_boot_library_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
  PropertyList_add(&_system_properties, _java_library_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  PropertyList_add(&_system_properties, _java_home);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  PropertyList_add(&_system_properties, _java_class_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
  PropertyList_add(&_system_properties, _sun_boot_class_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  // Set OS specific system properties values
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
  os::init_system_properties_values();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
6961
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6475
diff changeset
   206
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6475
diff changeset
   207
  // Update/Initialize System properties after JDK version number is known
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6475
diff changeset
   208
void Arguments::init_version_specific_system_properties() {
7381
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   209
  enum { bufsz = 16 };
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   210
  char buffer[bufsz];
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   211
  const char* spec_vendor = "Sun Microsystems Inc.";
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   212
  uint32_t spec_version = 0;
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   213
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   214
  if (JDK_Version::is_gte_jdk17x_version()) {
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   215
    spec_vendor = "Oracle Corporation";
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   216
    spec_version = JDK_Version::current().major_version();
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   217
  }
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   218
  jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version);
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   219
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   220
  PropertyList_add(&_system_properties,
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   221
      new SystemProperty("java.vm.specification.vendor",  spec_vendor, false));
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   222
  PropertyList_add(&_system_properties,
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   223
      new SystemProperty("java.vm.specification.version", buffer, false));
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   224
  PropertyList_add(&_system_properties,
5d924959cd81 6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents: 6972
diff changeset
   225
      new SystemProperty("java.vm.vendor", VM_Version::vm_vendor(),  false));
6961
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6475
diff changeset
   226
}
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6475
diff changeset
   227
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   228
/**
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   229
 * Provide a slightly more user-friendly way of eliminating -XX flags.
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   230
 * When a flag is eliminated, it can be added to this list in order to
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   231
 * continue accepting this flag on the command-line, while issuing a warning
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   232
 * and ignoring the value.  Once the JDK version reaches the 'accept_until'
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   233
 * limit, we flatly refuse to admit the existence of the flag.  This allows
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   234
 * a flag to die correctly over JDK releases using HSX.
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   235
 */
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   236
typedef struct {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   237
  const char* name;
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   238
  JDK_Version obsoleted_in; // when the flag went away
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   239
  JDK_Version accept_until; // which version to start denying the existence
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   240
} ObsoleteFlag;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   242
static ObsoleteFlag obsolete_jvm_flags[] = {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   243
  { "UseTrainGC",                    JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   244
  { "UseSpecialLargeObjectHandling", JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   245
  { "UseOversizedCarHandling",       JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   246
  { "TraceCarAllocation",            JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   247
  { "PrintTrainGCProcessingStats",   JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   248
  { "LogOfCarSpaceSize",             JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   249
  { "OversizedCarThreshold",         JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   250
  { "MinTickInterval",               JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   251
  { "DefaultTickInterval",           JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   252
  { "MaxTickInterval",               JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   253
  { "DelayTickAdjustment",           JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   254
  { "ProcessingToTenuringRatio",     JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   255
  { "MinTrainLength",                JDK_Version::jdk(5), JDK_Version::jdk(7) },
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   256
  { "AppendRatio",         JDK_Version::jdk_update(6,10), JDK_Version::jdk(7) },
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   257
  { "DefaultMaxRAM",       JDK_Version::jdk_update(6,18), JDK_Version::jdk(7) },
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   258
  { "DefaultInitialRAMFraction",
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   259
                           JDK_Version::jdk_update(6,18), JDK_Version::jdk(7) },
6248
2e661807cef0 6962589: remove breadth first scanning code from parallel gc
tonyp
parents: 5908
diff changeset
   260
  { "UseDepthFirstScavengeOrder",
2e661807cef0 6962589: remove breadth first scanning code from parallel gc
tonyp
parents: 5908
diff changeset
   261
                           JDK_Version::jdk_update(6,22), JDK_Version::jdk(7) },
6985
e9364ec299ac 6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents: 6758
diff changeset
   262
  { "HandlePromotionFailure",
e9364ec299ac 6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents: 6758
diff changeset
   263
                           JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) },
e9364ec299ac 6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents: 6758
diff changeset
   264
  { "MaxLiveObjectEvacuationRatio",
e9364ec299ac 6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents: 6758
diff changeset
   265
                           JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) },
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
   266
  { "ForceSharedSpaces",   JDK_Version::jdk_update(6,25), JDK_Version::jdk(8) },
9178
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   267
  { "UseParallelOldGCCompacting",
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   268
                           JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) },
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   269
  { "UseParallelDensePrefixUpdate",
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   270
                           JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) },
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   271
  { "UseParallelOldGCDensePrefix",
1a022d4f1bc3 6841742: par compact - remove unused/unsupported options
jcoomes
parents: 9177
diff changeset
   272
                           JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) },
9116
9bc44be338d6 6981791: remove experimental code for JSR 292
jrose
parents: 9114
diff changeset
   273
  { "AllowTransitionalJSR292",       JDK_Version::jdk(7), JDK_Version::jdk(8) },
10020
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
   274
  { "UseCompressedStrings",          JDK_Version::jdk(7), JDK_Version::jdk(8) },
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   275
  { "CMSPermGenPrecleaningEnabled", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   276
  { "CMSTriggerPermRatio", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   277
  { "CMSInitiatingPermOccupancyFraction", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   278
  { "AdaptivePermSizeWeight", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   279
  { "PermGenPadding", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   280
  { "PermMarkSweepDeadRatio", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   281
  { "PermSize", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   282
  { "MaxPermSize", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   283
  { "MinPermHeapExpansion", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   284
  { "MaxPermHeapExpansion", JDK_Version::jdk(8),  JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   285
  { "CMSRevisitStackSize",           JDK_Version::jdk(8), JDK_Version::jdk(9) },
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
   286
  { "PrintRevisitStats",             JDK_Version::jdk(8), JDK_Version::jdk(9) },
14284
ceb386367065 7188234: Deprecate VM command line options
coleenp
parents: 14117
diff changeset
   287
  { "UseVectoredExceptions",         JDK_Version::jdk(8), JDK_Version::jdk(9) },
16445
cb44d5b3ad89 8009595: The UseSplitVerifier option needs to be deprecated.
hseigel
parents: 15962
diff changeset
   288
  { "UseSplitVerifier",              JDK_Version::jdk(8), JDK_Version::jdk(9) },
18702
e6fa43c6d215 8016749: -XX:+UseISM fails an assert(obj->is_oop()) when running SPECjbb2005
anoll
parents: 18700
diff changeset
   289
  { "UseISM",                        JDK_Version::jdk(8), JDK_Version::jdk(9) },
e6fa43c6d215 8016749: -XX:+UseISM fails an assert(obj->is_oop()) when running SPECjbb2005
anoll
parents: 18700
diff changeset
   290
  { "UsePermISM",                    JDK_Version::jdk(8), JDK_Version::jdk(9) },
e6fa43c6d215 8016749: -XX:+UseISM fails an assert(obj->is_oop()) when running SPECjbb2005
anoll
parents: 18700
diff changeset
   291
  { "UseMPSS",                       JDK_Version::jdk(8), JDK_Version::jdk(9) },
18946
65a870954fd7 8004872: Early loading of HashMap and StringValue under -XX:+AggressiveOpts can be removed
ccheung
parents: 18703
diff changeset
   292
  { "UseStringCache",                JDK_Version::jdk(8), JDK_Version::jdk(9) },
10020
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
   293
#ifdef PRODUCT
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
   294
  { "DesiredMethodLimit",
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
   295
                           JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) },
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
   296
#endif // PRODUCT
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   297
  { NULL, JDK_Version(0), JDK_Version(0) }
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   298
};
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   299
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   300
// Returns true if the flag is obsolete and fits into the range specified
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   301
// for being ignored.  In the case that the flag is ignored, the 'version'
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   302
// value is filled in with the version number when the flag became
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   303
// obsolete so that that value can be displayed to the user.
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   304
bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  int i = 0;
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   306
  assert(version != NULL, "Must provide a version buffer");
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   307
  while (obsolete_jvm_flags[i].name != NULL) {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   308
    const ObsoleteFlag& flag_status = obsolete_jvm_flags[i];
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
    // <flag>=xxx form
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
    // [-|+]<flag> form
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   311
    if ((strncmp(flag_status.name, s, strlen(flag_status.name)) == 0) ||
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   312
        ((s[0] == '+' || s[0] == '-') &&
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   313
        (strncmp(flag_status.name, &s[1], strlen(flag_status.name)) == 0))) {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   314
      if (JDK_Version::current().compare(flag_status.accept_until) == -1) {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   315
          *version = flag_status.obsoleted_in;
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   316
          return true;
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   317
      }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
    i++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   323
489c9b5090e2 Initial load
duke
parents:
diff changeset
   324
// Constructs the system class path (aka boot class path) from the following
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
// components, in order:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
//     prefix           // from -Xbootclasspath/p:...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
//     endorsed         // the expansion of -Djava.endorsed.dirs=...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
//     base             // from os::get_system_properties() or -Xbootclasspath=
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
//     suffix           // from -Xbootclasspath/a:...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
// java.endorsed.dirs is a list of directories; any jar or zip files in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
// directories are added to the sysclasspath just before the base.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   334
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
// This could be AllStatic, but it isn't needed after argument processing is
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
// complete.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
class SysClassPath: public StackObj {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   338
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
  SysClassPath(const char* base);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
  ~SysClassPath();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   341
489c9b5090e2 Initial load
duke
parents:
diff changeset
   342
  inline void set_base(const char* base);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  inline void add_prefix(const char* prefix);
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
   344
  inline void add_suffix_to_prefix(const char* suffix);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  inline void add_suffix(const char* suffix);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
  inline void reset_path(const char* base);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
  // Expand the jar/zip files in each directory listed by the java.endorsed.dirs
489c9b5090e2 Initial load
duke
parents:
diff changeset
   349
  // property.  Must be called after all command-line arguments have been
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
  // processed (in particular, -Djava.endorsed.dirs=...) and before calling
489c9b5090e2 Initial load
duke
parents:
diff changeset
   351
  // combined_path().
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
  void expand_endorsed();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
  inline const char* get_base()     const { return _items[_scp_base]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   355
  inline const char* get_prefix()   const { return _items[_scp_prefix]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   356
  inline const char* get_suffix()   const { return _items[_scp_suffix]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   357
  inline const char* get_endorsed() const { return _items[_scp_endorsed]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
  // Combine all the components into a single c-heap-allocated string; caller
489c9b5090e2 Initial load
duke
parents:
diff changeset
   360
  // must free the string if/when no longer needed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   361
  char* combined_path();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   362
489c9b5090e2 Initial load
duke
parents:
diff changeset
   363
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   364
  // Utility routines.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   365
  static char* add_to_path(const char* path, const char* str, bool prepend);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   366
  static char* add_jars_to_path(char* path, const char* directory);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   367
489c9b5090e2 Initial load
duke
parents:
diff changeset
   368
  inline void reset_item_at(int index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   369
489c9b5090e2 Initial load
duke
parents:
diff changeset
   370
  // Array indices for the items that make up the sysclasspath.  All except the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   371
  // base are allocated in the C heap and freed by this class.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   372
  enum {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   373
    _scp_prefix,        // from -Xbootclasspath/p:...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
    _scp_endorsed,      // the expansion of -Djava.endorsed.dirs=...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   375
    _scp_base,          // the default sysclasspath
489c9b5090e2 Initial load
duke
parents:
diff changeset
   376
    _scp_suffix,        // from -Xbootclasspath/a:...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
    _scp_nitems         // the number of items, must be last.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
489c9b5090e2 Initial load
duke
parents:
diff changeset
   380
  const char* _items[_scp_nitems];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
  DEBUG_ONLY(bool _expansion_done;)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
SysClassPath::SysClassPath(const char* base) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
  memset(_items, 0, sizeof(_items));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
  _items[_scp_base] = base;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
  DEBUG_ONLY(_expansion_done = false;)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   388
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   389
489c9b5090e2 Initial load
duke
parents:
diff changeset
   390
SysClassPath::~SysClassPath() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   391
  // Free everything except the base.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   392
  for (int i = 0; i < _scp_nitems; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
    if (i != _scp_base) reset_item_at(i);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
  DEBUG_ONLY(_expansion_done = false;)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
inline void SysClassPath::set_base(const char* base) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  _items[_scp_base] = base;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
inline void SysClassPath::add_prefix(const char* prefix) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
  _items[_scp_prefix] = add_to_path(_items[_scp_prefix], prefix, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
   406
inline void SysClassPath::add_suffix_to_prefix(const char* suffix) {
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
   407
  _items[_scp_prefix] = add_to_path(_items[_scp_prefix], suffix, false);
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
   408
}
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
   409
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
inline void SysClassPath::add_suffix(const char* suffix) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   411
  _items[_scp_suffix] = add_to_path(_items[_scp_suffix], suffix, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   412
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   413
489c9b5090e2 Initial load
duke
parents:
diff changeset
   414
inline void SysClassPath::reset_item_at(int index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   415
  assert(index < _scp_nitems && index != _scp_base, "just checking");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   416
  if (_items[index] != NULL) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   417
    FREE_C_HEAP_ARRAY(char, _items[index], mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   418
    _items[index] = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   419
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   420
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   421
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
inline void SysClassPath::reset_path(const char* base) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
  // Clear the prefix and suffix.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   424
  reset_item_at(_scp_prefix);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   425
  reset_item_at(_scp_suffix);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
  set_base(base);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
//------------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
void SysClassPath::expand_endorsed() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
  assert(_items[_scp_endorsed] == NULL, "can only be called once.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
  const char* path = Arguments::get_property("java.endorsed.dirs");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
  if (path == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
    path = Arguments::get_endorsed_dir();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   437
    assert(path != NULL, "no default for java.endorsed.dirs");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   439
489c9b5090e2 Initial load
duke
parents:
diff changeset
   440
  char* expanded_path = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   441
  const char separator = *os::path_separator();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   442
  const char* const end = path + strlen(path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   443
  while (path < end) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   444
    const char* tmp_end = strchr(path, separator);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   445
    if (tmp_end == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   446
      expanded_path = add_jars_to_path(expanded_path, path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
      path = end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   449
      char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   450
      memcpy(dirpath, path, tmp_end - path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
      dirpath[tmp_end - path] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
      expanded_path = add_jars_to_path(expanded_path, dirpath);
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   453
      FREE_C_HEAP_ARRAY(char, dirpath, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   454
      path = tmp_end + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   457
  _items[_scp_endorsed] = expanded_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   458
  DEBUG_ONLY(_expansion_done = true;)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
// Combine the bootclasspath elements, some of which may be null, into a single
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
// c-heap-allocated string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   463
char* SysClassPath::combined_path() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   464
  assert(_items[_scp_base] != NULL, "empty default sysclasspath");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   465
  assert(_expansion_done, "must call expand_endorsed() first.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   466
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
  size_t lengths[_scp_nitems];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
  size_t total_len = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   469
489c9b5090e2 Initial load
duke
parents:
diff changeset
   470
  const char separator = *os::path_separator();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   471
489c9b5090e2 Initial load
duke
parents:
diff changeset
   472
  // Get the lengths.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   473
  int i;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   474
  for (i = 0; i < _scp_nitems; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   475
    if (_items[i] != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   476
      lengths[i] = strlen(_items[i]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   477
      // Include space for the separator char (or a NULL for the last item).
489c9b5090e2 Initial load
duke
parents:
diff changeset
   478
      total_len += lengths[i] + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   479
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   480
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   481
  assert(total_len > 0, "empty sysclasspath not allowed");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   482
489c9b5090e2 Initial load
duke
parents:
diff changeset
   483
  // Copy the _items to a single string.
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   484
  char* cp = NEW_C_HEAP_ARRAY(char, total_len, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   485
  char* cp_tmp = cp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   486
  for (i = 0; i < _scp_nitems; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   487
    if (_items[i] != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   488
      memcpy(cp_tmp, _items[i], lengths[i]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   489
      cp_tmp += lengths[i];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   490
      *cp_tmp++ = separator;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   491
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   492
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   493
  *--cp_tmp = '\0';     // Replace the extra separator.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   494
  return cp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   495
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   496
489c9b5090e2 Initial load
duke
parents:
diff changeset
   497
// Note:  path must be c-heap-allocated (or NULL); it is freed if non-null.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   498
char*
489c9b5090e2 Initial load
duke
parents:
diff changeset
   499
SysClassPath::add_to_path(const char* path, const char* str, bool prepend) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   500
  char *cp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   501
489c9b5090e2 Initial load
duke
parents:
diff changeset
   502
  assert(str != NULL, "just checking");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   503
  if (path == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   504
    size_t len = strlen(str) + 1;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   505
    cp = NEW_C_HEAP_ARRAY(char, len, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   506
    memcpy(cp, str, len);                       // copy the trailing null
489c9b5090e2 Initial load
duke
parents:
diff changeset
   507
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   508
    const char separator = *os::path_separator();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   509
    size_t old_len = strlen(path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   510
    size_t str_len = strlen(str);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   511
    size_t len = old_len + str_len + 2;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   512
489c9b5090e2 Initial load
duke
parents:
diff changeset
   513
    if (prepend) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   514
      cp = NEW_C_HEAP_ARRAY(char, len, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   515
      char* cp_tmp = cp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   516
      memcpy(cp_tmp, str, str_len);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   517
      cp_tmp += str_len;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   518
      *cp_tmp = separator;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   519
      memcpy(++cp_tmp, path, old_len + 1);      // copy the trailing null
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   520
      FREE_C_HEAP_ARRAY(char, path, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   521
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   522
      cp = REALLOC_C_HEAP_ARRAY(char, path, len, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   523
      char* cp_tmp = cp + old_len;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   524
      *cp_tmp = separator;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   525
      memcpy(++cp_tmp, str, str_len + 1);       // copy the trailing null
489c9b5090e2 Initial load
duke
parents:
diff changeset
   526
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   527
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   528
  return cp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   529
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   530
489c9b5090e2 Initial load
duke
parents:
diff changeset
   531
// Scan the directory and append any jar or zip files found to path.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   532
// Note:  path must be c-heap-allocated (or NULL); it is freed if non-null.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   533
char* SysClassPath::add_jars_to_path(char* path, const char* directory) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   534
  DIR* dir = os::opendir(directory);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   535
  if (dir == NULL) return path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   536
489c9b5090e2 Initial load
duke
parents:
diff changeset
   537
  char dir_sep[2] = { '\0', '\0' };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   538
  size_t directory_len = strlen(directory);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   539
  const char fileSep = *os::file_separator();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   540
  if (directory[directory_len - 1] != fileSep) dir_sep[0] = fileSep;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   541
489c9b5090e2 Initial load
duke
parents:
diff changeset
   542
  /* Scan the directory for jars/zips, appending them to path. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   543
  struct dirent *entry;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   544
  char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory), mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   545
  while ((entry = os::readdir(dir, (dirent *) dbuf)) != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   546
    const char* name = entry->d_name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   547
    const char* ext = name + strlen(name) - 4;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   548
    bool isJarOrZip = ext > name &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
   549
      (os::file_name_strcmp(ext, ".jar") == 0 ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   550
       os::file_name_strcmp(ext, ".zip") == 0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   551
    if (isJarOrZip) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   552
      char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name), mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   553
      sprintf(jarpath, "%s%s%s", directory, dir_sep, name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   554
      path = add_to_path(path, jarpath, false);
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   555
      FREE_C_HEAP_ARRAY(char, jarpath, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   556
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   557
  }
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   558
  FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   559
  os::closedir(dir);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   560
  return path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   561
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   562
489c9b5090e2 Initial load
duke
parents:
diff changeset
   563
// Parses a memory size specification string.
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   564
static bool atomull(const char *s, julong* result) {
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   565
  julong n = 0;
15228
e92acc84ade3 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 15101
diff changeset
   566
  int args_read = sscanf(s, JULONG_FORMAT, &n);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   567
  if (args_read != 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   568
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   569
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   570
  while (*s != '\0' && isdigit(*s)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   571
    s++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   572
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   573
  // 4705540: illegal if more characters are found after the first non-digit
489c9b5090e2 Initial load
duke
parents:
diff changeset
   574
  if (strlen(s) > 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   575
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   576
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   577
  switch (*s) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   578
    case 'T': case 't':
489c9b5090e2 Initial load
duke
parents:
diff changeset
   579
      *result = n * G * K;
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   580
      // Check for overflow.
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   581
      if (*result/((julong)G * K) != n) return false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   582
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   583
    case 'G': case 'g':
489c9b5090e2 Initial load
duke
parents:
diff changeset
   584
      *result = n * G;
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   585
      if (*result/G != n) return false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   586
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   587
    case 'M': case 'm':
489c9b5090e2 Initial load
duke
parents:
diff changeset
   588
      *result = n * M;
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   589
      if (*result/M != n) return false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   590
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   591
    case 'K': case 'k':
489c9b5090e2 Initial load
duke
parents:
diff changeset
   592
      *result = n * K;
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   593
      if (*result/K != n) return false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   594
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   595
    case '\0':
489c9b5090e2 Initial load
duke
parents:
diff changeset
   596
      *result = n;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   597
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   598
    default:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   599
      return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   600
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   601
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   602
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   603
Arguments::ArgsRange Arguments::check_memory_size(julong size, julong min_size) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   604
  if (size < min_size) return arg_too_small;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   605
  // Check that size will fit in a size_t (only relevant on 32-bit)
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   606
  if (size > max_uintx) return arg_too_big;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   607
  return arg_in_range;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   608
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   609
489c9b5090e2 Initial load
duke
parents:
diff changeset
   610
// Describe an argument out of range error
489c9b5090e2 Initial load
duke
parents:
diff changeset
   611
void Arguments::describe_range_error(ArgsRange errcode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   612
  switch(errcode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   613
  case arg_too_big:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   614
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
   615
                "The specified size exceeds the maximum "
489c9b5090e2 Initial load
duke
parents:
diff changeset
   616
                "representable size.\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   617
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   618
  case arg_too_small:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   619
  case arg_unreadable:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   620
  case arg_in_range:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   621
    // do nothing for now
489c9b5090e2 Initial load
duke
parents:
diff changeset
   622
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   623
  default:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   624
    ShouldNotReachHere();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   625
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   626
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   627
489c9b5090e2 Initial load
duke
parents:
diff changeset
   628
static bool set_bool_flag(char* name, bool value, FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   629
  return CommandLineFlags::boolAtPut(name, &value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   630
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   631
489c9b5090e2 Initial load
duke
parents:
diff changeset
   632
static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   633
  double v;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   634
  if (sscanf(value, "%lf", &v) != 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   635
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   636
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   637
489c9b5090e2 Initial load
duke
parents:
diff changeset
   638
  if (CommandLineFlags::doubleAtPut(name, &v, origin)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   639
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   640
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   641
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   642
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   643
489c9b5090e2 Initial load
duke
parents:
diff changeset
   644
static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   645
  julong v;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   646
  intx intx_v;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   647
  bool is_neg = false;
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   648
  // Check the sign first since atomull() parses only unsigned values.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   649
  if (*value == '-') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   650
    if (!CommandLineFlags::intxAt(name, &intx_v)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   651
      return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   652
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   653
    value++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   654
    is_neg = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   655
  }
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
   656
  if (!atomull(value, &v)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   657
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   658
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   659
  intx_v = (intx) v;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   660
  if (is_neg) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   661
    intx_v = -intx_v;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   662
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   663
  if (CommandLineFlags::intxAtPut(name, &intx_v, origin)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   664
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   665
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   666
  uintx uintx_v = (uintx) v;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   667
  if (!is_neg && CommandLineFlags::uintxAtPut(name, &uintx_v, origin)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   668
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   669
  }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   670
  uint64_t uint64_t_v = (uint64_t) v;
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   671
  if (!is_neg && CommandLineFlags::uint64_tAtPut(name, &uint64_t_v, origin)) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   672
    return true;
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
   673
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   674
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   675
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   676
489c9b5090e2 Initial load
duke
parents:
diff changeset
   677
static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   678
  if (!CommandLineFlags::ccstrAtPut(name, &value, origin))  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   679
  // Contract:  CommandLineFlags always returns a pointer that needs freeing.
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   680
  FREE_C_HEAP_ARRAY(char, value, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   681
  return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   682
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   683
489c9b5090e2 Initial load
duke
parents:
diff changeset
   684
static bool append_to_string_flag(char* name, const char* new_value, FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   685
  const char* old_value = "";
489c9b5090e2 Initial load
duke
parents:
diff changeset
   686
  if (!CommandLineFlags::ccstrAt(name, &old_value))  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   687
  size_t old_len = old_value != NULL ? strlen(old_value) : 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   688
  size_t new_len = strlen(new_value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   689
  const char* value;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   690
  char* free_this_too = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   691
  if (old_len == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   692
    value = new_value;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   693
  } else if (new_len == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   694
    value = old_value;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   695
  } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   696
    char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   697
    // each new setting adds another LINE to the switch:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   698
    sprintf(buf, "%s\n%s", old_value, new_value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   699
    value = buf;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   700
    free_this_too = buf;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   701
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   702
  (void) CommandLineFlags::ccstrAtPut(name, &value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   703
  // CommandLineFlags always returns a pointer that needs freeing.
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   704
  FREE_C_HEAP_ARRAY(char, value, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   705
  if (free_this_too != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   706
    // CommandLineFlags made its own copy, so I must delete my own temp. buffer.
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   707
    FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   708
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   709
  return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   710
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   711
489c9b5090e2 Initial load
duke
parents:
diff changeset
   712
bool Arguments::parse_argument(const char* arg, FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   713
489c9b5090e2 Initial load
duke
parents:
diff changeset
   714
  // range of acceptable characters spelled out for portability reasons
489c9b5090e2 Initial load
duke
parents:
diff changeset
   715
#define NAME_RANGE  "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   716
#define BUFLEN 255
489c9b5090e2 Initial load
duke
parents:
diff changeset
   717
  char name[BUFLEN+1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   718
  char dummy;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   719
489c9b5090e2 Initial load
duke
parents:
diff changeset
   720
  if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   721
    return set_bool_flag(name, false, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   722
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   723
  if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   724
    return set_bool_flag(name, true, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   725
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   726
489c9b5090e2 Initial load
duke
parents:
diff changeset
   727
  char punct;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   728
  if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   729
    const char* value = strchr(arg, '=') + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   730
    Flag* flag = Flag::find_flag(name, strlen(name));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   731
    if (flag != NULL && flag->is_ccstr()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   732
      if (flag->ccstr_accumulates()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   733
        return append_to_string_flag(name, value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   734
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   735
        if (value[0] == '\0') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   736
          value = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   737
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   738
        return set_string_flag(name, value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   739
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   740
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   741
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   742
489c9b5090e2 Initial load
duke
parents:
diff changeset
   743
  if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE ":%c", name, &punct) == 2 && punct == '=') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   744
    const char* value = strchr(arg, '=') + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   745
    // -XX:Foo:=xxx will reset the string flag to the given value.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   746
    if (value[0] == '\0') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   747
      value = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   748
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   749
    return set_string_flag(name, value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   750
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   751
489c9b5090e2 Initial load
duke
parents:
diff changeset
   752
#define SIGNED_FP_NUMBER_RANGE "[-0123456789.]"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   753
#define SIGNED_NUMBER_RANGE    "[-0123456789]"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   754
#define        NUMBER_RANGE    "[0123456789]"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   755
  char value[BUFLEN + 1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   756
  char value2[BUFLEN + 1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   757
  if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_NUMBER_RANGE "." "%" XSTR(BUFLEN) NUMBER_RANGE "%c", name, value, value2, &dummy) == 3) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   758
    // Looks like a floating-point number -- try again with more lenient format string
489c9b5090e2 Initial load
duke
parents:
diff changeset
   759
    if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_FP_NUMBER_RANGE "%c", name, value, &dummy) == 2) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   760
      return set_fp_numeric_flag(name, value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   761
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   762
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   763
489c9b5090e2 Initial load
duke
parents:
diff changeset
   764
#define VALUE_RANGE "[-kmgtKMGT0123456789]"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   765
  if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) VALUE_RANGE "%c", name, value, &dummy) == 2) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   766
    return set_numeric_flag(name, value, origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   767
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   768
489c9b5090e2 Initial load
duke
parents:
diff changeset
   769
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   770
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   771
489c9b5090e2 Initial load
duke
parents:
diff changeset
   772
void Arguments::add_string(char*** bldarray, int* count, const char* arg) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   773
  assert(bldarray != NULL, "illegal argument");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   774
489c9b5090e2 Initial load
duke
parents:
diff changeset
   775
  if (arg == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   776
    return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   777
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   778
17319
7704ecd22af4 8013574: PrintMalloc conflicts with the command line parsing
brutisso
parents: 17022
diff changeset
   779
  int new_count = *count + 1;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   780
489c9b5090e2 Initial load
duke
parents:
diff changeset
   781
  // expand the array and add arg to the last element
489c9b5090e2 Initial load
duke
parents:
diff changeset
   782
  if (*bldarray == NULL) {
17319
7704ecd22af4 8013574: PrintMalloc conflicts with the command line parsing
brutisso
parents: 17022
diff changeset
   783
    *bldarray = NEW_C_HEAP_ARRAY(char*, new_count, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   784
  } else {
17319
7704ecd22af4 8013574: PrintMalloc conflicts with the command line parsing
brutisso
parents: 17022
diff changeset
   785
    *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, new_count, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   786
  }
17319
7704ecd22af4 8013574: PrintMalloc conflicts with the command line parsing
brutisso
parents: 17022
diff changeset
   787
  (*bldarray)[*count] = strdup(arg);
7704ecd22af4 8013574: PrintMalloc conflicts with the command line parsing
brutisso
parents: 17022
diff changeset
   788
  *count = new_count;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   789
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   790
489c9b5090e2 Initial load
duke
parents:
diff changeset
   791
void Arguments::build_jvm_args(const char* arg) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   792
  add_string(&_jvm_args_array, &_num_jvm_args, arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   793
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   794
489c9b5090e2 Initial load
duke
parents:
diff changeset
   795
void Arguments::build_jvm_flags(const char* arg) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   796
  add_string(&_jvm_flags_array, &_num_jvm_flags, arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   797
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   798
489c9b5090e2 Initial load
duke
parents:
diff changeset
   799
// utility function to return a string that concatenates all
489c9b5090e2 Initial load
duke
parents:
diff changeset
   800
// strings in a given char** array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   801
const char* Arguments::build_resource_string(char** args, int count) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   802
  if (args == NULL || count == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   803
    return NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   804
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   805
  size_t length = strlen(args[0]) + 1; // add 1 for the null terminator
489c9b5090e2 Initial load
duke
parents:
diff changeset
   806
  for (int i = 1; i < count; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   807
    length += strlen(args[i]) + 1; // add 1 for a space
489c9b5090e2 Initial load
duke
parents:
diff changeset
   808
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   809
  char* s = NEW_RESOURCE_ARRAY(char, length);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   810
  strcpy(s, args[0]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   811
  for (int j = 1; j < count; j++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   812
    strcat(s, " ");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   813
    strcat(s, args[j]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   814
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   815
  return (const char*) s;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   816
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   817
489c9b5090e2 Initial load
duke
parents:
diff changeset
   818
void Arguments::print_on(outputStream* st) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   819
  st->print_cr("VM Arguments:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   820
  if (num_jvm_flags() > 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   821
    st->print("jvm_flags: "); print_jvm_flags_on(st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   822
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   823
  if (num_jvm_args() > 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   824
    st->print("jvm_args: "); print_jvm_args_on(st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   825
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   826
  st->print_cr("java_command: %s", java_command() ? java_command() : "<unknown>");
14117
6e2e697e310f 7053130: hs_err file does not record specified CLASSPATH
coleenp
parents: 14116
diff changeset
   827
  if (_java_class_path != NULL) {
6e2e697e310f 7053130: hs_err file does not record specified CLASSPATH
coleenp
parents: 14116
diff changeset
   828
    char* path = _java_class_path->value();
6e2e697e310f 7053130: hs_err file does not record specified CLASSPATH
coleenp
parents: 14116
diff changeset
   829
    st->print_cr("java_class_path (initial): %s", strlen(path) == 0 ? "<not set>" : path );
6e2e697e310f 7053130: hs_err file does not record specified CLASSPATH
coleenp
parents: 14116
diff changeset
   830
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   831
  st->print_cr("Launcher Type: %s", _sun_java_launcher);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   832
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   833
489c9b5090e2 Initial load
duke
parents:
diff changeset
   834
void Arguments::print_jvm_flags_on(outputStream* st) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   835
  if (_num_jvm_flags > 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   836
    for (int i=0; i < _num_jvm_flags; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   837
      st->print("%s ", _jvm_flags_array[i]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   838
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   839
    st->print_cr("");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   840
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   841
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   842
489c9b5090e2 Initial load
duke
parents:
diff changeset
   843
void Arguments::print_jvm_args_on(outputStream* st) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   844
  if (_num_jvm_args > 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   845
    for (int i=0; i < _num_jvm_args; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   846
      st->print("%s ", _jvm_args_array[i]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   847
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   848
    st->print_cr("");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   849
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   850
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   851
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   852
bool Arguments::process_argument(const char* arg,
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   853
    jboolean ignore_unrecognized, FlagValueOrigin origin) {
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   854
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 823
diff changeset
   855
  JDK_Version since = JDK_Version();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   856
9177
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   857
  if (parse_argument(arg, origin) || ignore_unrecognized) {
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   858
    return true;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   859
  }
9177
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   860
15442
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   861
  bool has_plus_minus = (*arg == '+' || *arg == '-');
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   862
  const char* const argname = has_plus_minus ? arg + 1 : arg;
9177
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   863
  if (is_newly_obsolete(arg, &since)) {
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   864
    char version[256];
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   865
    since.to_string(version, sizeof(version));
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   866
    warning("ignoring option %s; support was removed in %s", argname, version);
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   867
    return true;
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   868
  }
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   869
12157
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   870
  // For locked flags, report a custom error message if available.
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   871
  // Otherwise, report the standard unrecognized VM option.
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   872
15442
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   873
  size_t arg_len;
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   874
  const char* equal_sign = strchr(argname, '=');
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   875
  if (equal_sign == NULL) {
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   876
    arg_len = strlen(argname);
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   877
  } else {
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   878
    arg_len = equal_sign - argname;
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   879
  }
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   880
18497
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   881
  Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true);
15442
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   882
  if (found_flag != NULL) {
12157
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   883
    char locked_message_buf[BUFLEN];
15442
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   884
    found_flag->get_locked_message(locked_message_buf, BUFLEN);
12157
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   885
    if (strlen(locked_message_buf) == 0) {
15442
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   886
      if (found_flag->is_bool() && !has_plus_minus) {
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   887
        jio_fprintf(defaultStream::error_stream(),
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   888
          "Missing +/- setting for VM option '%s'\n", argname);
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   889
      } else if (!found_flag->is_bool() && has_plus_minus) {
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   890
        jio_fprintf(defaultStream::error_stream(),
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   891
          "Unexpected +/- setting in VM option '%s'\n", argname);
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   892
      } else {
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   893
        jio_fprintf(defaultStream::error_stream(),
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   894
          "Improperly specified VM option '%s'\n", argname);
047acb1184df 8006298: Specifying malformed JFR options (-XX:+FlightRecorderOptions) outputs non-sensical error
hseigel
parents: 15432
diff changeset
   895
      }
12157
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   896
    } else {
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   897
      jio_fprintf(defaultStream::error_stream(), "%s", locked_message_buf);
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   898
    }
12498
961dc4bd60d6 7162488: VM not printing unknown -XX options
kevinw
parents: 12165
diff changeset
   899
  } else {
961dc4bd60d6 7162488: VM not printing unknown -XX options
kevinw
parents: 12165
diff changeset
   900
    jio_fprintf(defaultStream::error_stream(),
961dc4bd60d6 7162488: VM not printing unknown -XX options
kevinw
parents: 12165
diff changeset
   901
                "Unrecognized VM option '%s'\n", argname);
18497
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   902
    Flag* fuzzy_matched = Flag::fuzzy_match((const char*)argname, arg_len, true);
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   903
    if (fuzzy_matched != NULL) {
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   904
      jio_fprintf(defaultStream::error_stream(),
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   905
                  "Did you mean '%s%s%s'?\n",
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   906
                  (fuzzy_matched->is_bool()) ? "(+/-)" : "",
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   907
                  fuzzy_matched->name,
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   908
                  (fuzzy_matched->is_bool()) ? "" : "=<value>");
9ff60555fcd3 8017611: Auto corrector for mistyped vm options
tamao
parents: 18493
diff changeset
   909
    }
12157
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   910
  }
439a7166bf0f 7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents: 12095
diff changeset
   911
9177
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   912
  // allow for commandline "commenting out" options like -XX:#+Verbose
fe622b63b368 7034133: cleanup obsolete option handling
jcoomes
parents: 8727
diff changeset
   913
  return arg[0] == '#';
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   914
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   915
489c9b5090e2 Initial load
duke
parents:
diff changeset
   916
bool Arguments::process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   917
  FILE* stream = fopen(file_name, "rb");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   918
  if (stream == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   919
    if (should_exist) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   920
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
   921
                  "Could not open settings file %s\n", file_name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   922
      return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   923
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   924
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   925
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   926
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   927
489c9b5090e2 Initial load
duke
parents:
diff changeset
   928
  char token[1024];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   929
  int  pos = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   930
489c9b5090e2 Initial load
duke
parents:
diff changeset
   931
  bool in_white_space = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   932
  bool in_comment     = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   933
  bool in_quote       = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   934
  char quote_c        = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   935
  bool result         = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   936
489c9b5090e2 Initial load
duke
parents:
diff changeset
   937
  int c = getc(stream);
14139
339b184759f9 7158804: Improve config file parsing
kamg
parents: 12988
diff changeset
   938
  while(c != EOF && pos < (int)(sizeof(token)-1)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   939
    if (in_white_space) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   940
      if (in_comment) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   941
        if (c == '\n') in_comment = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   942
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   943
        if (c == '#') in_comment = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   944
        else if (!isspace(c)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   945
          in_white_space = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   946
          token[pos++] = c;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   947
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   948
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   949
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   950
      if (c == '\n' || (!in_quote && isspace(c))) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   951
        // token ends at newline, or at unquoted whitespace
489c9b5090e2 Initial load
duke
parents:
diff changeset
   952
        // this allows a way to include spaces in string-valued options
489c9b5090e2 Initial load
duke
parents:
diff changeset
   953
        token[pos] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
   954
        logOption(token);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   955
        result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   956
        build_jvm_flags(token);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   957
        pos = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   958
        in_white_space = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   959
        in_quote = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   960
      } else if (!in_quote && (c == '\'' || c == '"')) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   961
        in_quote = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   962
        quote_c = c;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   963
      } else if (in_quote && (c == quote_c)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   964
        in_quote = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   965
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   966
        token[pos++] = c;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   967
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   968
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   969
    c = getc(stream);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   970
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   971
  if (pos > 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   972
    token[pos] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
   973
    result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   974
    build_jvm_flags(token);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   975
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   976
  fclose(stream);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   977
  return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   978
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   979
489c9b5090e2 Initial load
duke
parents:
diff changeset
   980
//=============================================================================================================
489c9b5090e2 Initial load
duke
parents:
diff changeset
   981
// Parsing of properties (-D)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   982
489c9b5090e2 Initial load
duke
parents:
diff changeset
   983
const char* Arguments::get_property(const char* key) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   984
  return PropertyList_get_value(system_properties(), key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   985
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   986
489c9b5090e2 Initial load
duke
parents:
diff changeset
   987
bool Arguments::add_property(const char* prop) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   988
  const char* eq = strchr(prop, '=');
489c9b5090e2 Initial load
duke
parents:
diff changeset
   989
  char* key;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   990
  // ns must be static--its address may be stored in a SystemProperty object.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   991
  const static char ns[1] = {0};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   992
  char* value = (char *)ns;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   993
489c9b5090e2 Initial load
duke
parents:
diff changeset
   994
  size_t key_len = (eq == NULL) ? strlen(prop) : (eq - prop);
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
   995
  key = AllocateHeap(key_len + 1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   996
  strncpy(key, prop, key_len);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   997
  key[key_len] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
   998
489c9b5090e2 Initial load
duke
parents:
diff changeset
   999
  if (eq != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1000
    size_t value_len = strlen(prop) - key_len - 1;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  1001
    value = AllocateHeap(value_len + 1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1002
    strncpy(value, &prop[key_len + 1], value_len + 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1003
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1004
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1005
  if (strcmp(key, "java.compiler") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1006
    process_java_compiler_argument(value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1007
    FreeHeap(key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1008
    if (eq != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1009
      FreeHeap(value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1010
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1011
    return true;
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1012
  } else if (strcmp(key, "sun.java.command") == 0) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1013
    _java_command = value;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1014
7900
4c7fc6332f7e 6994753: Implement optional hook to a Java method at VM startup.
kevinw
parents: 7719
diff changeset
  1015
    // Record value in Arguments, but let it get passed to Java.
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1016
  } else if (strcmp(key, "sun.java.launcher.pid") == 0) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1017
    // launcher.pid property is private and is processed
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1018
    // in process_sun_java_launcher_properties();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1019
    // the sun.java.launcher property is passed on to the java application
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1020
    FreeHeap(key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1021
    if (eq != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1022
      FreeHeap(value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1023
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1024
    return true;
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1025
  } else if (strcmp(key, "java.vendor.url.bug") == 0) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1026
    // save it in _java_vendor_url_bug, so JVM fatal error handler can access
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1027
    // its value without going through the property list or making a Java call.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1028
    _java_vendor_url_bug = value;
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1029
  } else if (strcmp(key, "sun.boot.library.path") == 0) {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1030
    PropertyList_unique_add(&_system_properties, key, value, true);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  1031
    return true;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1032
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1033
  // Create new property and add at the end of the list
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1034
  PropertyList_unique_add(&_system_properties, key, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1035
  return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1036
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1037
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1038
//===========================================================================================================
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1039
// Setting int/mixed/comp mode flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1040
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1041
void Arguments::set_mode_flags(Mode mode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1042
  // Set up default values for all flags.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1043
  // If you add a flag to any of the branches below,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1044
  // add a default value for it here.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1045
  set_java_compiler(false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1046
  _mode                      = mode;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1047
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1048
  // Ensure Agent_OnLoad has the correct initial values.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1049
  // This may not be the final mode; mode may change later in onload phase.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1050
  PropertyList_unique_add(&_system_properties, "java.vm.info",
9427
eeb8acc0cf2c 7036267: c2/arm: mark version number as experimental and disable on unsupported platforms
dholmes
parents: 9187
diff changeset
  1051
                          (char*)VM_Version::vm_info_string(), false);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1052
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1053
  UseInterpreter             = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1054
  UseCompiler                = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1055
  UseLoopCounter             = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1056
9114
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1057
#ifndef ZERO
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1058
  // Turn these off for mixed and comp.  Leave them on for Zero.
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1059
  if (FLAG_IS_DEFAULT(UseFastAccessorMethods)) {
9442
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  1060
    UseFastAccessorMethods = (mode == _int);
9114
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1061
  }
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1062
  if (FLAG_IS_DEFAULT(UseFastEmptyMethods)) {
9442
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  1063
    UseFastEmptyMethods = (mode == _int);
9114
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1064
  }
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1065
#endif
db10549c184e 7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents: 8883
diff changeset
  1066
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1067
  // Default values may be platform/compiler dependent -
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1068
  // use the saved values
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1069
  ClipInlining               = Arguments::_ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1070
  AlwaysCompileLoopMethods   = Arguments::_AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1071
  UseOnStackReplacement      = Arguments::_UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1072
  BackgroundCompilation      = Arguments::_BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1073
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1074
  // Change from defaults based on mode
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1075
  switch (mode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1076
  default:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1077
    ShouldNotReachHere();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1078
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1079
  case _int:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1080
    UseCompiler              = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1081
    UseLoopCounter           = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1082
    AlwaysCompileLoopMethods = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1083
    UseOnStackReplacement    = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1084
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1085
  case _mixed:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1086
    // same as default
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1087
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1088
  case _comp:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1089
    UseInterpreter           = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1090
    BackgroundCompilation    = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1091
    ClipInlining             = false;
11426
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1092
    // Be much more aggressive in tiered mode with -Xcomp and exercise C2 more.
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1093
    // We will first compile a level 3 version (C1 with full profiling), then do one invocation of it and
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1094
    // compile a level 4 (C2) and then continue executing it.
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1095
    if (TieredCompilation) {
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1096
      Tier3InvokeNotifyFreqLog = 0;
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1097
      Tier4InvocationThreshold = 0;
7dd181af6a26 7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents: 11187
diff changeset
  1098
    }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1099
    break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1100
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1101
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1102
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1103
// Conflict: required to use shared spaces (-Xshare:on), but
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1104
// incompatible command line options were chosen.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1105
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1106
static void no_shared_spaces() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1107
  if (RequireSharedSpaces) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1108
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1109
      "Class data sharing is inconsistent with other specified options.\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1110
    vm_exit_during_initialization("Unable to use shared archive.", NULL);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1111
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1112
    FLAG_SET_DEFAULT(UseSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1113
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1114
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1115
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1116
void Arguments::set_tiered_flags() {
8667
b32929355d27 7020403: Add AdvancedCompilationPolicy for tiered
iveresov
parents: 8499
diff changeset
  1117
  // With tiered, set default policy to AdvancedThresholdPolicy, which is 3.
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1118
  if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) {
8667
b32929355d27 7020403: Add AdvancedCompilationPolicy for tiered
iveresov
parents: 8499
diff changeset
  1119
    FLAG_SET_DEFAULT(CompilationPolicyChoice, 3);
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1120
  }
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1121
  if (CompilationPolicyChoice < 2) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1122
    vm_exit_during_initialization(
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1123
      "Incompatible compilation policy selected", NULL);
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1124
  }
6988
282ba493439c 6996136: VM crash in src/share/vm/runtime/virtualspace.cpp:424
iveresov
parents: 6987
diff changeset
  1125
  // Increase the code cache size - tiered compiles a lot more.
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1126
  if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
15613
7c250aa645c5 8006851: When TieredCompilation is set, max code cache should be bumped to 256mb
morris
parents: 15484
diff changeset
  1127
    FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 5);
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1128
  }
17383
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1129
  if (!UseInterpreter) { // -Xcomp
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1130
    Tier3InvokeNotifyFreqLog = 0;
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1131
    Tier4InvocationThreshold = 0;
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1132
  }
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1133
}
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  1134
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  1135
#if INCLUDE_ALL_GCS
11585
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1136
static void disable_adaptive_size_policy(const char* collector_name) {
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1137
  if (UseAdaptiveSizePolicy) {
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1138
    if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) {
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1139
      warning("disabling UseAdaptiveSizePolicy; it is incompatible with %s.",
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1140
              collector_name);
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1141
    }
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1142
    FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false);
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1143
  }
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1144
}
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1145
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1146
void Arguments::set_parnew_gc_flags() {
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1147
  assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC,
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1148
         "control point invariant");
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1149
  assert(UseParNewGC, "Error");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1150
11585
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1151
  // Turn off AdaptiveSizePolicy for parnew until it is complete.
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1152
  disable_adaptive_size_policy("UseParNewGC");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1153
15091
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1154
  if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1155
    FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads());
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1156
    assert(ParallelGCThreads > 0, "We should always have at least one thread by default");
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1157
  } else if (ParallelGCThreads == 0) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1158
    jio_fprintf(defaultStream::error_stream(),
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1159
        "The ParNew GC can not be combined with -XX:ParallelGCThreads=0\n");
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1160
    vm_exit(1);
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1161
  }
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1162
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1163
  // By default YoungPLABSize and OldPLABSize are set to 4096 and 1024 respectively,
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1164
  // these settings are default for Parallel Scavenger. For ParNew+Tenured configuration
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1165
  // we set them to 1024 and 1024.
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1166
  // See CR 6362902.
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1167
  if (FLAG_IS_DEFAULT(YoungPLABSize)) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1168
    FLAG_SET_DEFAULT(YoungPLABSize, (intx)1024);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1169
  }
15091
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1170
  if (FLAG_IS_DEFAULT(OldPLABSize)) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1171
    FLAG_SET_DEFAULT(OldPLABSize, (intx)1024);
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1172
  }
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1173
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1174
  // AlwaysTenure flag should make ParNew promote all at first collection.
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1175
  // See CR 6362902.
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1176
  if (AlwaysTenure) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1177
    FLAG_SET_CMDLINE(uintx, MaxTenuringThreshold, 0);
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1178
  }
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1179
  // When using compressed oops, we use local overflow stacks,
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1180
  // rather than using a global overflow list chained through
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1181
  // the klass word of the object's pre-image.
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1182
  if (UseCompressedOops && !ParGCUseLocalOverflow) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1183
    if (!FLAG_IS_DEFAULT(ParGCUseLocalOverflow)) {
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1184
      warning("Forcing +ParGCUseLocalOverflow: needed if using compressed references");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1185
    }
15091
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1186
    FLAG_SET_DEFAULT(ParGCUseLocalOverflow, true);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1187
  }
15091
826cff1f58f5 8005396: Use ParNew with only one thread instead of DefNew as default for CMS on single CPU machines
brutisso
parents: 14740
diff changeset
  1188
  assert(ParGCUseLocalOverflow || !UseCompressedOops, "Error");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1189
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1190
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1191
// Adjust some sizes to suit CMS and/or ParNew needs; these work well on
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1192
// sparc/solaris for certain applications, but would gain from
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1193
// further optimization and tuning efforts, and would almost
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1194
// certainly gain from analysis of platform and environment.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1195
void Arguments::set_cms_and_parnew_gc_flags() {
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1196
  assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1197
  assert(UseConcMarkSweepGC, "CMS is expected to be on here");
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1198
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1199
  // If we are using CMS, we prefer to UseParNewGC,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1200
  // unless explicitly forbidden.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1201
  if (FLAG_IS_DEFAULT(UseParNewGC)) {
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1202
    FLAG_SET_ERGO(bool, UseParNewGC, true);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1203
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1204
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  1205
  // Turn off AdaptiveSizePolicy by default for cms until it is complete.
11585
3101e13e34d9 7112413: JVM Crash, possibly GC-related
jcoomes
parents: 11442
diff changeset
  1206
  disable_adaptive_size_policy("UseConcMarkSweepGC");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1207
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1208
  // In either case, adjust ParallelGCThreads and/or UseParNewGC
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1209
  // as needed.
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1210
  if (UseParNewGC) {
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1211
    set_parnew_gc_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1212
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1213
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1214
  size_t max_heap = align_size_down(MaxHeapSize,
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1215
                                    CardTableRS::ct_max_alignment_constraint());
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1216
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1217
  // Now make adjustments for CMS
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1218
  intx   tenuring_default = (intx)6;
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1219
  size_t young_gen_per_worker = CMSYoungGenPerWorker;
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1220
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1221
  // Preferred young gen size for "short" pauses:
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1222
  // upper bound depends on # of threads and NewRatio.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1223
  const uintx parallel_gc_threads =
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1224
    (ParallelGCThreads == 0 ? 1 : ParallelGCThreads);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1225
  const size_t preferred_max_new_size_unaligned =
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1226
    MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * parallel_gc_threads));
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1227
  size_t preferred_max_new_size =
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1228
    align_size_up(preferred_max_new_size_unaligned, os::vm_page_size());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1229
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1230
  // Unless explicitly requested otherwise, size young gen
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1231
  // for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads
3586
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1232
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1233
  // If either MaxNewSize or NewRatio is set on the command line,
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1234
  // assume the user is trying to set the size of the young gen.
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1235
  if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) {
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1236
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1237
    // Set MaxNewSize to our calculated preferred_max_new_size unless
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1238
    // NewSize was set on the command line and it is larger than
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1239
    // preferred_max_new_size.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1240
    if (!FLAG_IS_DEFAULT(NewSize)) {   // NewSize explicitly set at command-line
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1241
      FLAG_SET_ERGO(uintx, MaxNewSize, MAX2(NewSize, preferred_max_new_size));
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1242
    } else {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1243
      FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1244
    }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1245
    if (PrintGCDetails && Verbose) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1246
      // Too early to use gclog_or_tty
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1247
      tty->print_cr("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize);
3586
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1248
    }
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1249
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1250
    // Code along this path potentially sets NewSize and OldSize
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1251
    if (PrintGCDetails && Verbose) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1252
      // Too early to use gclog_or_tty
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1253
      tty->print_cr("CMS set min_heap_size: " SIZE_FORMAT
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1254
           " initial_heap_size:  " SIZE_FORMAT
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1255
           " max_heap: " SIZE_FORMAT,
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1256
           min_heap_size(), InitialHeapSize, max_heap);
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1257
    }
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1258
    size_t min_new = preferred_max_new_size;
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1259
    if (FLAG_IS_CMDLINE(NewSize)) {
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1260
      min_new = NewSize;
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1261
    }
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1262
    if (max_heap > min_new && min_heap_size() > min_new) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1263
      // Unless explicitly requested otherwise, make young gen
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1264
      // at least min_new, and at most preferred_max_new_size.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1265
      if (FLAG_IS_DEFAULT(NewSize)) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1266
        FLAG_SET_ERGO(uintx, NewSize, MAX2(NewSize, min_new));
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1267
        FLAG_SET_ERGO(uintx, NewSize, MIN2(preferred_max_new_size, NewSize));
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1268
        if (PrintGCDetails && Verbose) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1269
          // Too early to use gclog_or_tty
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1270
          tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1271
        }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1272
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1273
      // Unless explicitly requested otherwise, size old gen
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1274
      // so it's NewRatio x of NewSize.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1275
      if (FLAG_IS_DEFAULT(OldSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1276
        if (max_heap > NewSize) {
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1277
          FLAG_SET_ERGO(uintx, OldSize, MIN2(NewRatio*NewSize, max_heap - NewSize));
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1278
          if (PrintGCDetails && Verbose) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1279
            // Too early to use gclog_or_tty
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  1280
            tty->print_cr("CMS ergo set OldSize: " SIZE_FORMAT, OldSize);
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1281
          }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1282
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1283
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1284
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1285
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1286
  // Unless explicitly requested otherwise, definitely
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1287
  // promote all objects surviving "tenuring_default" scavenges.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1288
  if (FLAG_IS_DEFAULT(MaxTenuringThreshold) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1289
      FLAG_IS_DEFAULT(SurvivorRatio)) {
13925
37f75ba502b1 8000351: Tenuring threshold should be unsigned
jwilhelm
parents: 13876
diff changeset
  1290
    FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1291
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1292
  // If we decided above (or user explicitly requested)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1293
  // `promote all' (via MaxTenuringThreshold := 0),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1294
  // prefer minuscule survivor spaces so as not to waste
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1295
  // space for (non-existent) survivors
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1296
  if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) {
15605
bf7de87bbe3a 8006432: Ratio flags should be unsigned
jwilhelm
parents: 15232
diff changeset
  1297
    FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio));
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1298
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1299
  // If OldPLABSize is set and CMSParPromoteBlocksToClaim is not,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1300
  // set CMSParPromoteBlocksToClaim equal to OldPLABSize.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1301
  // This is done in order to make ParNew+CMS configuration to work
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1302
  // with YoungPLABSize and OldPLABSize options.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1303
  // See CR 6362902.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1304
  if (!FLAG_IS_DEFAULT(OldPLABSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1305
    if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) {
186
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1306
      // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1307
      // is.  In this situtation let CMSParPromoteBlocksToClaim follow
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1308
      // the value (either from the command line or ergonomics) of
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1309
      // OldPLABSize.  Following OldPLABSize is an ergonomics decision.
32e6c95f8d9b 6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents: 183
diff changeset
  1310
      FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize);
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1311
    } else {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1312
      // OldPLABSize and CMSParPromoteBlocksToClaim are both set.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1313
      // CMSParPromoteBlocksToClaim is a collector-specific flag, so
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1314
      // we'll let it to take precedence.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1315
      jio_fprintf(defaultStream::error_stream(),
3586
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1316
                  "Both OldPLABSize and CMSParPromoteBlocksToClaim"
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1317
                  " options are specified for the CMS collector."
33e632b72dbf 6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents: 3262
diff changeset
  1318
                  " CMSParPromoteBlocksToClaim will take precedence.\n");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1319
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1320
  }
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1321
  if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) {
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1322
    // OldPLAB sizing manually turned off: Use a larger default setting,
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1323
    // unless it was manually specified. This is because a too-low value
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1324
    // will slow down scavenges.
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1325
    if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) {
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1326
      FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, 50); // default value before 6631166
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1327
    }
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1328
  }
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1329
  // Overwrite OldPLABSize which is the variable we will internally use everywhere.
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1330
  FLAG_SET_ERGO(uintx, OldPLABSize, CMSParPromoteBlocksToClaim);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1331
  // If either of the static initialization defaults have changed, note this
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1332
  // modification.
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1333
  if (!FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim) || !FLAG_IS_DEFAULT(OldPLABWeight)) {
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1334
    CFLS_LAB::modify_initialization(OldPLABSize, OldPLABWeight);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  1335
  }
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1336
  if (PrintGCDetails && Verbose) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1337
    tty->print_cr("MarkStackSize: %uk  MarkStackSizeMax: %uk",
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1338
      MarkStackSize / K, MarkStackSizeMax / K);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1339
    tty->print_cr("ConcGCThreads: %u", ConcGCThreads);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1340
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1341
}
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  1342
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1343
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1344
void set_object_alignment() {
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1345
  // Object alignment.
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1346
  assert(is_power_of_2(ObjectAlignmentInBytes), "ObjectAlignmentInBytes must be power of 2");
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1347
  MinObjAlignmentInBytes     = ObjectAlignmentInBytes;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1348
  assert(MinObjAlignmentInBytes >= HeapWordsPerLong * HeapWordSize, "ObjectAlignmentInBytes value is too small");
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1349
  MinObjAlignment            = MinObjAlignmentInBytes / HeapWordSize;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1350
  assert(MinObjAlignmentInBytes == MinObjAlignment * HeapWordSize, "ObjectAlignmentInBytes value is incorrect");
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1351
  MinObjAlignmentInBytesMask = MinObjAlignmentInBytes - 1;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1352
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1353
  LogMinObjAlignmentInBytes  = exact_log2(ObjectAlignmentInBytes);
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1354
  LogMinObjAlignment         = LogMinObjAlignmentInBytes - LogHeapWordSize;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1355
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1356
  // Oop encoding heap max
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1357
  OopEncodingHeapMax = (uint64_t(max_juint) + 1) << LogMinObjAlignmentInBytes;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1358
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  1359
#if INCLUDE_ALL_GCS
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1360
  // Set CMS global values
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1361
  CompactibleFreeListSpace::set_cms_values();
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  1362
#endif // INCLUDE_ALL_GCS
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1363
}
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1364
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1365
bool verify_object_alignment() {
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1366
  // Object alignment.
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1367
  if (!is_power_of_2(ObjectAlignmentInBytes)) {
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1368
    jio_fprintf(defaultStream::error_stream(),
6755
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1369
                "error: ObjectAlignmentInBytes=%d must be power of 2\n",
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1370
                (int)ObjectAlignmentInBytes);
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1371
    return false;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1372
  }
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1373
  if ((int)ObjectAlignmentInBytes < BytesPerLong) {
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1374
    jio_fprintf(defaultStream::error_stream(),
6755
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1375
                "error: ObjectAlignmentInBytes=%d must be greater or equal %d\n",
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1376
                (int)ObjectAlignmentInBytes, BytesPerLong);
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1377
    return false;
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1378
  }
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1379
  // It does not make sense to have big object alignment
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1380
  // since a space lost due to alignment will be greater
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1381
  // then a saved space from compressed oops.
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1382
  if ((int)ObjectAlignmentInBytes > 256) {
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1383
    jio_fprintf(defaultStream::error_stream(),
15101
58d43bf04c45 8005076: Creating a CDS archive with one alignment and running another causes a crash.
hseigel
parents: 15098
diff changeset
  1384
                "error: ObjectAlignmentInBytes=%d must not be greater than 256\n",
6755
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1385
                (int)ObjectAlignmentInBytes);
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1386
    return false;
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1387
  }
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1388
  // In case page size is very small.
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1389
  if ((int)ObjectAlignmentInBytes >= os::vm_page_size()) {
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1390
    jio_fprintf(defaultStream::error_stream(),
15101
58d43bf04c45 8005076: Creating a CDS archive with one alignment and running another causes a crash.
hseigel
parents: 15098
diff changeset
  1391
                "error: ObjectAlignmentInBytes=%d must be less than page size %d\n",
6755
58237fa09b63 6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents: 6466
diff changeset
  1392
                (int)ObjectAlignmentInBytes, os::vm_page_size());
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1393
    return false;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1394
  }
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1395
  return true;
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1396
}
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  1397
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1398
uintx Arguments::max_heap_for_compressed_oops() {
7388
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1399
  // Avoid sign flip.
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1400
  assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1401
  // We need to fit both the NULL page and the heap into the memory budget, while
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1402
  // keeping alignment constraints of the heap. To guarantee the latter, as the
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1403
  // NULL page is located before the heap, we pad the NULL page to the conservative
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1404
  // maximum alignment that the GC may ever impose upon the heap.
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1405
  size_t displacement_due_to_null_page = align_size_up_(os::vm_page_size(),
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1406
    Arguments::conservative_max_heap_alignment());
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1407
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1408
  LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1409
  NOT_LP64(ShouldNotReachHere(); return 0);
382
02c0a63f30d6 6689523: max heap calculation for compressed oops is off by MaxPermSize
coleenp
parents: 360
diff changeset
  1410
}
02c0a63f30d6 6689523: max heap calculation for compressed oops is off by MaxPermSize
coleenp
parents: 360
diff changeset
  1411
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1412
bool Arguments::should_auto_select_low_pause_collector() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1413
  if (UseAutoGCSelectPolicy &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1414
      !FLAG_IS_DEFAULT(MaxGCPauseMillis) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1415
      (MaxGCPauseMillis <= AutoGCSelectPauseMillis)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1416
    if (PrintGCDetails) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1417
      // Cannot use gclog_or_tty yet.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1418
      tty->print_cr("Automatic selection of the low pause collector"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1419
       " based on pause goal of %d (ms)", MaxGCPauseMillis);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1420
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1421
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1422
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1423
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1424
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1425
15957
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1426
void Arguments::set_use_compressed_oops() {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1427
#ifndef ZERO
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1428
#ifdef _LP64
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1429
  // MaxHeapSize is not set up properly at this point, but
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1430
  // the only value that can override MaxHeapSize if we are
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1431
  // to use UseCompressedOops is InitialHeapSize.
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1432
  size_t max_heap_size = MAX2(MaxHeapSize, InitialHeapSize);
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1433
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1434
  if (max_heap_size <= max_heap_for_compressed_oops()) {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1435
#if !defined(COMPILER1) || defined(TIERED)
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1436
    if (FLAG_IS_DEFAULT(UseCompressedOops)) {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1437
      FLAG_SET_ERGO(bool, UseCompressedOops, true);
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1438
    }
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1439
#endif
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1440
#ifdef _WIN64
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1441
    if (UseLargePages && UseCompressedOops) {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1442
      // Cannot allocate guard pages for implicit checks in indexed addressing
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1443
      // mode, when large pages are specified on windows.
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1444
      // This flag could be switched ON if narrow oop base address is set to 0,
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1445
      // see code in Universe::initialize_heap().
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1446
      Universe::set_narrow_oop_use_implicit_null_checks(false);
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1447
    }
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1448
#endif //  _WIN64
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1449
  } else {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1450
    if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) {
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1451
      warning("Max heap size too large for Compressed Oops");
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1452
      FLAG_SET_DEFAULT(UseCompressedOops, false);
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1453
      FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
15957
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1454
    }
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1455
  }
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1456
#endif // _LP64
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1457
#endif // ZERO
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1458
}
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1459
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1460
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1461
// NOTE: set_use_compressed_klass_ptrs() must be called after calling
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1462
// set_use_compressed_oops().
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1463
void Arguments::set_use_compressed_klass_ptrs() {
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1464
#ifndef ZERO
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1465
#ifdef _LP64
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1466
  // UseCompressedOops must be on for UseCompressedClassPointers to be on.
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1467
  if (!UseCompressedOops) {
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1468
    if (UseCompressedClassPointers) {
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1469
      warning("UseCompressedClassPointers requires UseCompressedOops");
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1470
    }
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1471
    FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1472
  } else {
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1473
    // Turn on UseCompressedClassPointers too
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1474
    if (FLAG_IS_DEFAULT(UseCompressedClassPointers)) {
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1475
      FLAG_SET_ERGO(bool, UseCompressedClassPointers, true);
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1476
    }
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1477
    // Check the CompressedClassSpaceSize to make sure we use compressed klass ptrs.
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1478
    if (UseCompressedClassPointers) {
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1479
      if (CompressedClassSpaceSize > KlassEncodingMetaspaceMax) {
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1480
        warning("CompressedClassSpaceSize is too large for UseCompressedClassPointers");
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  1481
        FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1482
      }
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1483
    }
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1484
  }
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1485
#endif // _LP64
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1486
#endif // !ZERO
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1487
}
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1488
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1489
void Arguments::set_conservative_max_heap_alignment() {
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1490
  // The conservative maximum required alignment for the heap is the maximum of
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1491
  // the alignments imposed by several sources: any requirements from the heap
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1492
  // itself, the collector policy and the maximum page size we may run the VM
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1493
  // with.
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1494
  size_t heap_alignment = GenCollectedHeap::conservative_max_heap_alignment();
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1495
#if INCLUDE_ALL_GCS
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1496
  if (UseParallelGC) {
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1497
    heap_alignment = ParallelScavengeHeap::conservative_max_heap_alignment();
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1498
  } else if (UseG1GC) {
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1499
    heap_alignment = G1CollectedHeap::conservative_max_heap_alignment();
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1500
  }
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1501
#endif // INCLUDE_ALL_GCS
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1502
  _conservative_max_heap_alignment = MAX3(heap_alignment, os::max_page_size(),
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1503
    CollectorPolicy::compute_max_alignment());
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1504
}
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1505
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1506
void Arguments::set_ergonomics_flags() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1507
11790
9bd8cd33db39 7142680: default GC affected by jvm path
iveresov
parents: 11643
diff changeset
  1508
  if (os::is_server_class_machine()) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1509
    // If no other collector is requested explicitly,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1510
    // let the VM select the collector based on
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1511
    // machine class and automatic selection policy.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1512
    if (!UseSerialGC &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1513
        !UseConcMarkSweepGC &&
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1514
        !UseG1GC &&
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1515
        !UseParNewGC &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1516
        FLAG_IS_DEFAULT(UseParallelGC)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1517
      if (should_auto_select_low_pause_collector()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1518
        FLAG_SET_ERGO(bool, UseConcMarkSweepGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1519
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1520
        FLAG_SET_ERGO(bool, UseParallelGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1521
      }
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1522
    }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1523
    // Shared spaces work fine with other GCs but causes bytecode rewriting
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1524
    // to be disabled, which hurts interpreter performance and decreases
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1525
    // server performance.   On server class machines, keep the default
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1526
    // off unless it is asked for.  Future work: either add bytecode rewriting
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  1527
    // at link time, or rewrite bytecodes in non-shared methods.
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1528
    if (!DumpSharedSpaces && !RequireSharedSpaces &&
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1529
        (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1530
      no_shared_spaces();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1531
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1532
  }
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 249
diff changeset
  1533
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1534
  set_conservative_max_heap_alignment();
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  1535
4013
b154310845de 6890308: integrate zero assembler hotspot changes
never
parents: 3912
diff changeset
  1536
#ifndef ZERO
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 249
diff changeset
  1537
#ifdef _LP64
15957
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
  1538
  set_use_compressed_oops();
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1539
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1540
  // set_use_compressed_klass_ptrs() must be called after calling
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1541
  // set_use_compressed_oops().
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1542
  set_use_compressed_klass_ptrs();
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  1543
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 249
diff changeset
  1544
  // Also checks that certain machines are slower with compressed oops
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 249
diff changeset
  1545
  // in vm_version initialization code.
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 249
diff changeset
  1546
#endif // _LP64
4013
b154310845de 6890308: integrate zero assembler hotspot changes
never
parents: 3912
diff changeset
  1547
#endif // !ZERO
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1548
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1549
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1550
void Arguments::set_parallel_gc_flags() {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1551
  assert(UseParallelGC || UseParallelOldGC, "Error");
11643
8099a0118cc1 6679764: enable parallel compaction by default
jcoomes
parents: 11587
diff changeset
  1552
  // Enable ParallelOld unless it was explicitly disabled (cmd line or rc file).
8099a0118cc1 6679764: enable parallel compaction by default
jcoomes
parents: 11587
diff changeset
  1553
  if (FLAG_IS_DEFAULT(UseParallelOldGC)) {
8099a0118cc1 6679764: enable parallel compaction by default
jcoomes
parents: 11587
diff changeset
  1554
    FLAG_SET_DEFAULT(UseParallelOldGC, true);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1555
  }
11643
8099a0118cc1 6679764: enable parallel compaction by default
jcoomes
parents: 11587
diff changeset
  1556
  FLAG_SET_DEFAULT(UseParallelGC, true);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1557
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1558
  // If no heap maximum was requested explicitly, use some reasonable fraction
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1559
  // of the physical memory, up to a maximum of 1GB.
15111
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1560
  FLAG_SET_DEFAULT(ParallelGCThreads,
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1561
                   Abstract_VM_Version::parallel_worker_threads());
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1562
  if (ParallelGCThreads == 0) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1563
    jio_fprintf(defaultStream::error_stream(),
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1564
        "The Parallel GC can not be combined with -XX:ParallelGCThreads=0\n");
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1565
    vm_exit(1);
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1566
  }
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1567
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1568
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1569
  // If InitialSurvivorRatio or MinSurvivorRatio were not specified, but the
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1570
  // SurvivorRatio has been set, reset their default values to SurvivorRatio +
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1571
  // 2.  By doing this we make SurvivorRatio also work for Parallel Scavenger.
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1572
  // See CR 6362902 for details.
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1573
  if (!FLAG_IS_DEFAULT(SurvivorRatio)) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1574
    if (FLAG_IS_DEFAULT(InitialSurvivorRatio)) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1575
       FLAG_SET_DEFAULT(InitialSurvivorRatio, SurvivorRatio + 2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1576
    }
15111
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1577
    if (FLAG_IS_DEFAULT(MinSurvivorRatio)) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1578
      FLAG_SET_DEFAULT(MinSurvivorRatio, SurvivorRatio + 2);
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1579
    }
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1580
  }
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1581
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1582
  if (UseParallelOldGC) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1583
    // Par compact uses lower default values since they are treated as
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1584
    // minimums.  These are different defaults because of the different
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1585
    // interpretation and are not ergonomically set.
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1586
    if (FLAG_IS_DEFAULT(MarkSweepDeadRatio)) {
50ab480cb8d6 8005489: VM hangs during GC with ParallelGC and ParallelGCThreads=0
brutisso
parents: 15093
diff changeset
  1587
      FLAG_SET_DEFAULT(MarkSweepDeadRatio, 1);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1588
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1589
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1590
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1591
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1592
void Arguments::set_g1_gc_flags() {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1593
  assert(UseG1GC, "Error");
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1594
#ifdef COMPILER1
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1595
  FastTLABRefill = false;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1596
#endif
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1597
  FLAG_SET_DEFAULT(ParallelGCThreads,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1598
                     Abstract_VM_Version::parallel_worker_threads());
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1599
  if (ParallelGCThreads == 0) {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1600
    FLAG_SET_DEFAULT(ParallelGCThreads,
2741
34e2a243d69a 6490395: G1: Tidy up command line flags.
johnc
parents: 2570
diff changeset
  1601
                     Abstract_VM_Version::parallel_worker_threads());
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1602
  }
2741
34e2a243d69a 6490395: G1: Tidy up command line flags.
johnc
parents: 2570
diff changeset
  1603
14740
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1604
  // MarkStackSize will be set (if it hasn't been set by the user)
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1605
  // when concurrent marking is initialized.
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1606
  // Its value will be based upon the number of parallel marking threads.
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1607
  // But we do set the maximum mark stack size here.
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1608
  if (FLAG_IS_DEFAULT(MarkStackSizeMax)) {
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1609
    FLAG_SET_DEFAULT(MarkStackSizeMax, 128 * TASKQUEUE_SIZE);
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  1610
  }
5240
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1611
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1612
  if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) {
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1613
    // In G1, we want the default GC overhead goal to be higher than
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1614
    // say in PS. So we set it here to 10%. Otherwise the heap might
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1615
    // be expanded more aggressively than we would like it to. In
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1616
    // fact, even 10% seems to not be high enough in some cases
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1617
    // (especially small GC stress tests that the main thing they do
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1618
    // is allocation). We might consider increase it further.
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1619
    FLAG_SET_DEFAULT(GCTimeRatio, 9);
3892e01609c6 6937160: G1: should observe GCTimeRatio
tonyp
parents: 5081
diff changeset
  1620
  }
14740
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1621
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1622
  if (PrintGCDetails && Verbose) {
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1623
    tty->print_cr("MarkStackSize: %uk  MarkStackSizeMax: %uk",
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1624
      MarkStackSize / K, MarkStackSizeMax / K);
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1625
    tty->print_cr("ConcGCThreads: %u", ConcGCThreads);
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  1626
  }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1627
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1628
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1629
julong Arguments::limit_by_allocatable_memory(julong limit) {
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1630
  julong max_allocatable;
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1631
  julong result = limit;
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1632
  if (os::has_allocatable_memory_limit(&max_allocatable)) {
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1633
    result = MIN2(result, max_allocatable / MaxVirtMemFraction);
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1634
  }
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1635
  return result;
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1636
}
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1637
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1638
void Arguments::set_heap_size() {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1639
  if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1640
    // Deprecated flag
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1641
    FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1642
  }
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1643
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1644
  const julong phys_mem =
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1645
    FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM)
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1646
                            : (julong)MaxRAM;
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1647
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1648
  // If the maximum heap size has not been set with -Xmx,
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1649
  // then set it as fraction of the size of physical memory,
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1650
  // respecting the maximum and minimum sizes of the heap.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1651
  if (FLAG_IS_DEFAULT(MaxHeapSize)) {
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1652
    julong reasonable_max = phys_mem / MaxRAMFraction;
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1653
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1654
    if (phys_mem <= MaxHeapSize * MinRAMFraction) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1655
      // Small physical memory, so use a minimum fraction of it for the heap
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1656
      reasonable_max = phys_mem / MinRAMFraction;
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1657
    } else {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1658
      // Not-small physical memory, so require a heap at least
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1659
      // as large as MaxHeapSize
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1660
      reasonable_max = MAX2(reasonable_max, (julong)MaxHeapSize);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1661
    }
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1662
    if (!FLAG_IS_DEFAULT(ErgoHeapSizeLimit) && ErgoHeapSizeLimit != 0) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1663
      // Limit the heap size to ErgoHeapSizeLimit
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1664
      reasonable_max = MIN2(reasonable_max, (julong)ErgoHeapSizeLimit);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1665
    }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1666
    if (UseCompressedOops) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1667
      // Limit the heap size to the maximum possible when using compressed oops
7388
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1668
      julong max_coop_heap = (julong)max_heap_for_compressed_oops();
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1669
      if (HeapBaseMinAddress + MaxHeapSize < max_coop_heap) {
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1670
        // Heap should be above HeapBaseMinAddress to get zero based compressed oops
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1671
        // but it should be not less than default MaxHeapSize.
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1672
        max_coop_heap -= HeapBaseMinAddress;
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1673
      }
98cea0fd27fc 6999491: non-zero COOPs are used when they should not
kvn
parents: 7124
diff changeset
  1674
      reasonable_max = MIN2(reasonable_max, max_coop_heap);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1675
    }
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1676
    reasonable_max = limit_by_allocatable_memory(reasonable_max);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1677
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1678
    if (!FLAG_IS_DEFAULT(InitialHeapSize)) {
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1679
      // An initial heap size was specified on the command line,
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1680
      // so be sure that the maximum size is consistent.  Done
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1681
      // after call to limit_by_allocatable_memory because that
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1682
      // method might reduce the allocation size.
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1683
      reasonable_max = MAX2(reasonable_max, (julong)InitialHeapSize);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1684
    }
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1685
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1686
    if (PrintGCDetails && Verbose) {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1687
      // Cannot use gclog_or_tty yet.
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1688
      tty->print_cr("  Maximum heap size " SIZE_FORMAT, reasonable_max);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1689
    }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1690
    FLAG_SET_ERGO(uintx, MaxHeapSize, (uintx)reasonable_max);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1691
  }
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  1692
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1693
  // If the minimum or initial heap_size have not been set or requested to be set
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1694
  // ergonomically, set them accordingly.
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1695
  if (InitialHeapSize == 0 || min_heap_size() == 0) {
4444
877bb3341a10 6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents: 4439
diff changeset
  1696
    julong reasonable_minimum = (julong)(OldSize + NewSize);
877bb3341a10 6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents: 4439
diff changeset
  1697
877bb3341a10 6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents: 4439
diff changeset
  1698
    reasonable_minimum = MIN2(reasonable_minimum, (julong)MaxHeapSize);
877bb3341a10 6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents: 4439
diff changeset
  1699
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  1700
    reasonable_minimum = limit_by_allocatable_memory(reasonable_minimum);
4444
877bb3341a10 6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents: 4439
diff changeset
  1701
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1702
    if (InitialHeapSize == 0) {
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1703
      julong reasonable_initial = phys_mem / InitialRAMFraction;
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1704
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1705
      reasonable_initial = MAX3(reasonable_initial, reasonable_minimum, (julong)min_heap_size());
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1706
      reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize);
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1707
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1708
      reasonable_initial = limit_by_allocatable_memory(reasonable_initial);
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1709
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1710
      if (PrintGCDetails && Verbose) {
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1711
        // Cannot use gclog_or_tty yet.
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1712
        tty->print_cr("  Initial heap size " SIZE_FORMAT, (uintx)reasonable_initial);
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1713
      }
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1714
      FLAG_SET_ERGO(uintx, InitialHeapSize, (uintx)reasonable_initial);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1715
    }
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1716
    // If the minimum heap size has not been set (via -Xms),
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1717
    // synchronize with InitialHeapSize to avoid errors with the default value.
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1718
    if (min_heap_size() == 0) {
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1719
      set_min_heap_size(MIN2((uintx)reasonable_minimum, InitialHeapSize));
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1720
      if (PrintGCDetails && Verbose) {
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1721
        // Cannot use gclog_or_tty yet.
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1722
        tty->print_cr("  Minimum heap size " SIZE_FORMAT, min_heap_size());
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1723
      }
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  1724
    }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1725
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1726
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1727
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1728
// This must be called after ergonomics because we want bytecode rewriting
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1729
// if the server compiler is used, or if UseSharedSpaces is disabled.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1730
void Arguments::set_bytecode_flags() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1731
  // Better not attempt to store into a read-only space.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1732
  if (UseSharedSpaces) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1733
    FLAG_SET_DEFAULT(RewriteBytecodes, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1734
    FLAG_SET_DEFAULT(RewriteFrequentPairs, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1735
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1736
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1737
  if (!RewriteBytecodes) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1738
    FLAG_SET_DEFAULT(RewriteFrequentPairs, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1739
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1740
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1741
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1742
// Aggressive optimization flags  -XX:+AggressiveOpts
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1743
void Arguments::set_aggressive_opts_flags() {
190
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1744
#ifdef COMPILER2
17383
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1745
  if (AggressiveUnboxing) {
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1746
    if (FLAG_IS_DEFAULT(EliminateAutoBox)) {
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1747
      FLAG_SET_DEFAULT(EliminateAutoBox, true);
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1748
    } else if (!EliminateAutoBox) {
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1749
      // warning("AggressiveUnboxing is disabled because EliminateAutoBox is disabled");
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1750
      AggressiveUnboxing = false;
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1751
    }
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1752
    if (FLAG_IS_DEFAULT(DoEscapeAnalysis)) {
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1753
      FLAG_SET_DEFAULT(DoEscapeAnalysis, true);
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1754
    } else if (!DoEscapeAnalysis) {
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1755
      // warning("AggressiveUnboxing is disabled because DoEscapeAnalysis is disabled");
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1756
      AggressiveUnboxing = false;
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1757
    }
3665c0901a0d 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 17098
diff changeset
  1758
  }
190
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1759
  if (AggressiveOpts || !FLAG_IS_DEFAULT(AutoBoxCacheMax)) {
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1760
    if (FLAG_IS_DEFAULT(EliminateAutoBox)) {
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1761
      FLAG_SET_DEFAULT(EliminateAutoBox, true);
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1762
    }
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1763
    if (FLAG_IS_DEFAULT(AutoBoxCacheMax)) {
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1764
      FLAG_SET_DEFAULT(AutoBoxCacheMax, 20000);
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1765
    }
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1766
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1767
    // Feed the cache size setting into the JDK
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1768
    char buffer[1024];
1889
24b003a6fe46 6781583: Hotspot build fails on linux 64 bit platform with gcc 4.3.2
xlu
parents: 1676
diff changeset
  1769
    sprintf(buffer, "java.lang.Integer.IntegerCache.high=" INTX_FORMAT, AutoBoxCacheMax);
190
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1770
    add_property(buffer);
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1771
  }
1496
3fd9157e5e3c 6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents: 1395
diff changeset
  1772
  if (AggressiveOpts && FLAG_IS_DEFAULT(BiasedLockingStartupDelay)) {
3fd9157e5e3c 6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents: 1395
diff changeset
  1773
    FLAG_SET_DEFAULT(BiasedLockingStartupDelay, 500);
3fd9157e5e3c 6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents: 1395
diff changeset
  1774
  }
190
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1775
#endif
e9a0a9dcd4f6 6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents: 1
diff changeset
  1776
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1777
  if (AggressiveOpts) {
234
4da9c1bbc810 6667833: Remove CacheTimeMillis
sbohne
parents: 1
diff changeset
  1778
// Sample flag setting code
4da9c1bbc810 6667833: Remove CacheTimeMillis
sbohne
parents: 1
diff changeset
  1779
//    if (FLAG_IS_DEFAULT(EliminateZeroing)) {
4da9c1bbc810 6667833: Remove CacheTimeMillis
sbohne
parents: 1
diff changeset
  1780
//      FLAG_SET_DEFAULT(EliminateZeroing, true);
4da9c1bbc810 6667833: Remove CacheTimeMillis
sbohne
parents: 1
diff changeset
  1781
//    }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1782
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1783
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1784
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1785
//===========================================================================================================
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1786
// Parsing of java.compiler property
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1787
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1788
void Arguments::process_java_compiler_argument(char* arg) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1789
  // For backwards compatibility, Djava.compiler=NONE or ""
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1790
  // causes us to switch to -Xint mode UNLESS -Xdebug
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1791
  // is also specified.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1792
  if (strlen(arg) == 0 || strcasecmp(arg, "NONE") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1793
    set_java_compiler(true);    // "-Djava.compiler[=...]" most recently seen.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1794
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1795
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1796
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1797
void Arguments::process_java_launcher_argument(const char* launcher, void* extra_info) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1798
  _sun_java_launcher = strdup(launcher);
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1799
  if (strcmp("gamma", _sun_java_launcher) == 0) {
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1800
    _created_by_gamma_launcher = true;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1801
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1802
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1803
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1804
bool Arguments::created_by_java_launcher() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1805
  assert(_sun_java_launcher != NULL, "property must have value");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1806
  return strcmp(DEFAULT_JAVA_LAUNCHER, _sun_java_launcher) != 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1807
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1808
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1809
bool Arguments::created_by_gamma_launcher() {
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1810
  return _created_by_gamma_launcher;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1811
}
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  1812
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1813
//===========================================================================================================
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1814
// Parsing of main arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1815
4885
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1816
bool Arguments::verify_interval(uintx val, uintx min,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1817
                                uintx max, const char* name) {
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1818
  // Returns true iff value is in the inclusive interval [min..max]
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1819
  // false, otherwise.
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1820
  if (val >= min && val <= max) {
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1821
    return true;
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1822
  }
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1823
  jio_fprintf(defaultStream::error_stream(),
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1824
              "%s of " UINTX_FORMAT " is invalid; must be between " UINTX_FORMAT
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1825
              " and " UINTX_FORMAT "\n",
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1826
              name, val, min, max);
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1827
  return false;
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1828
}
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  1829
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1830
bool Arguments::verify_min_value(intx val, intx min, const char* name) {
8685
f8edcc58cca7 6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents: 8681
diff changeset
  1831
  // Returns true if given value is at least specified min threshold
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1832
  // false, otherwise.
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1833
  if (val >= min ) {
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1834
      return true;
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1835
  }
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1836
  jio_fprintf(defaultStream::error_stream(),
8685
f8edcc58cca7 6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents: 8681
diff changeset
  1837
              "%s of " INTX_FORMAT " is invalid; must be at least " INTX_FORMAT "\n",
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1838
              name, val, min);
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1839
  return false;
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1840
}
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1841
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1842
bool Arguments::verify_percentage(uintx value, const char* name) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1843
  if (value <= 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1844
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1845
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1846
  jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1847
              "%s of " UINTX_FORMAT " is invalid; must be between 0 and 100\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1848
              name, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1849
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1850
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1851
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  1852
#if !INCLUDE_ALL_GCS
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  1853
#ifdef ASSERT
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1854
static bool verify_serial_gc_flags() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1855
  return (UseSerialGC &&
3700
cf9a1b408c4f 6872136: CMS: confusing message may be printed when a collector is switched off implicitly
ysr
parents: 3687
diff changeset
  1856
        !(UseParNewGC || (UseConcMarkSweepGC || CMSIncrementalMode) || UseG1GC ||
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  1857
          UseParallelGC || UseParallelOldGC));
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1858
}
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  1859
#endif // ASSERT
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  1860
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1861
9990
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1862
// check if do gclog rotation
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1863
// +UseGCLogFileRotation is a must,
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1864
// no gc log rotation when log file not supplied or
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1865
// NumberOfGCLogFiles is 0, or GCLogFileSize is 0
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1866
void check_gclog_consistency() {
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1867
  if (UseGCLogFileRotation) {
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1868
    if ((Arguments::gc_log_filename() == NULL) ||
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1869
        (NumberOfGCLogFiles == 0)  ||
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1870
        (GCLogFileSize == 0)) {
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1871
      jio_fprintf(defaultStream::output_stream(),
9992
0d82cce3e655 7051430: CMS: ongoing CMS cycle should terminate abruptly to allow prompt JVM termination at exit
ysr
parents: 9990
diff changeset
  1872
                  "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>\n"
9990
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1873
                  "where num_of_file > 0 and num_of_size > 0\n"
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1874
                  "GC log rotation is turned off\n");
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1875
      UseGCLogFileRotation = false;
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1876
    }
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1877
  }
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1878
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1879
  if (UseGCLogFileRotation && GCLogFileSize < 8*K) {
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1880
        FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1881
        jio_fprintf(defaultStream::output_stream(),
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1882
                    "GCLogFileSize changed to minimum 8K\n");
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1883
  }
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1884
}
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1885
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1886
// Check consistency of GC selection
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1887
bool Arguments::check_gc_consistency() {
9990
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  1888
  check_gclog_consistency();
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1889
  bool status = true;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1890
  // Ensure that the user has not selected conflicting sets
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1891
  // of collectors. [Note: this check is merely a user convenience;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1892
  // collectors over-ride each other so that only a non-conflicting
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1893
  // set is selected; however what the user gets is not what they
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1894
  // may have expected from the combination they asked for. It's
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1895
  // better to reduce user confusion by not allowing them to
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1896
  // select conflicting combinations.
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1897
  uint i = 0;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1898
  if (UseSerialGC)                       i++;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1899
  if (UseConcMarkSweepGC || UseParNewGC) i++;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1900
  if (UseParallelGC || UseParallelOldGC) i++;
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2741
diff changeset
  1901
  if (UseG1GC)                           i++;
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1902
  if (i > 1) {
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1903
    jio_fprintf(defaultStream::error_stream(),
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1904
                "Conflicting collector combinations in option list; "
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1905
                "please refer to the release notes for the combinations "
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1906
                "allowed\n");
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1907
    status = false;
18700
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1908
  } else if (ReservedCodeCacheSize > 2*G) {
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1909
    // Code cache size larger than MAXINT is not supported.
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1910
    jio_fprintf(defaultStream::error_stream(),
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1911
                "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1912
                (2*G)/M);
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  1913
    status = false;
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1914
  }
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1915
  return status;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1916
}
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1917
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1918
void Arguments::check_deprecated_gcs() {
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1919
  if (UseConcMarkSweepGC && !UseParNewGC) {
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1920
    warning("Using the DefNew young collector with the CMS collector is deprecated "
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1921
        "and will likely be removed in a future release");
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1922
  }
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1923
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1924
  if (UseParNewGC && !UseConcMarkSweepGC) {
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1925
    // !UseConcMarkSweepGC means that we are using serial old gc. Unfortunately we don't
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1926
    // set up UseSerialGC properly, so that can't be used in the check here.
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1927
    warning("Using the ParNew young collector with the Serial old collector is deprecated "
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1928
        "and will likely be removed in a future release");
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1929
  }
15093
18cb2c160db1 8003822: Deprecate the incremental mode of CMS
brutisso
parents: 15092
diff changeset
  1930
18cb2c160db1 8003822: Deprecate the incremental mode of CMS
brutisso
parents: 15092
diff changeset
  1931
  if (CMSIncrementalMode) {
18cb2c160db1 8003822: Deprecate the incremental mode of CMS
brutisso
parents: 15092
diff changeset
  1932
    warning("Using incremental CMS is deprecated and will likely be removed in a future release");
18cb2c160db1 8003822: Deprecate the incremental mode of CMS
brutisso
parents: 15092
diff changeset
  1933
  }
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1934
}
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  1935
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1936
void Arguments::check_deprecated_gc_flags() {
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1937
  if (FLAG_IS_CMDLINE(MaxGCMinorPauseMillis)) {
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1938
    warning("Using MaxGCMinorPauseMillis as minor pause goal is deprecated"
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1939
            "and will likely be removed in future release");
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1940
  }
18998
fe1467a81767 8021967: Deprecate -XX:DefaultMaxRAMFraction
brutisso
parents: 18946
diff changeset
  1941
  if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) {
fe1467a81767 8021967: Deprecate -XX:DefaultMaxRAMFraction
brutisso
parents: 18946
diff changeset
  1942
    warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. "
fe1467a81767 8021967: Deprecate -XX:DefaultMaxRAMFraction
brutisso
parents: 18946
diff changeset
  1943
        "Use MaxRAMFraction instead.");
fe1467a81767 8021967: Deprecate -XX:DefaultMaxRAMFraction
brutisso
parents: 18946
diff changeset
  1944
  }
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1945
}
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  1946
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1947
// Check stack pages settings
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1948
bool Arguments::check_stack_pages()
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1949
{
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1950
  bool status = true;
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1951
  status = status && verify_min_value(StackYellowPages, 1, "StackYellowPages");
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1952
  status = status && verify_min_value(StackRedPages, 1, "StackRedPages");
6964
6e45ffa3bccf 6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong
coleenp
parents: 6961
diff changeset
  1953
  // greater stack shadow pages can't generate instruction to bang stack
6e45ffa3bccf 6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong
coleenp
parents: 6961
diff changeset
  1954
  status = status && verify_interval(StackShadowPages, 1, 50, "StackShadowPages");
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1955
  return status;
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1956
}
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  1957
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1958
// Check the consistency of vm_init_args
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1959
bool Arguments::check_vm_args_consistency() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1960
  // Method for adding checks for flag consistency.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1961
  // The intent is to warn the user of all possible conflicts,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1962
  // before returning an error.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1963
  // Note: Needs platform-dependent factoring.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1964
  bool status = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1965
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1966
  // Allow both -XX:-UseStackBanging and -XX:-UseBoundThreads in non-product
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1967
  // builds so the cost of stack banging can be measured.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1968
#if (defined(PRODUCT) && defined(SOLARIS))
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1969
  if (!UseBoundThreads && !UseStackBanging) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1970
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1971
                "-UseStackBanging conflicts with -UseBoundThreads\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1972
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1973
     status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1974
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1975
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1976
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1977
  if (TLABRefillWasteFraction == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1978
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1979
                "TLABRefillWasteFraction should be a denominator, "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1980
                "not " SIZE_FORMAT "\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1981
                TLABRefillWasteFraction);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1982
    status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1983
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1984
17392
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  1985
  status = status && verify_interval(AdaptiveSizePolicyWeight, 0, 100,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1986
                              "AdaptiveSizePolicyWeight");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1987
  status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance");
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1988
  status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1989
  status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1990
14487
9a40ad461ee9 7122219: Passed StringTableSize value not verified
hseigel
parents: 14296
diff changeset
  1991
  // Divide by bucket size to prevent a large size from causing rollover when
9a40ad461ee9 7122219: Passed StringTableSize value not verified
hseigel
parents: 14296
diff changeset
  1992
  // calculating amount of memory needed to be allocated for the String table.
17022
584161d608a5 8009928: PSR:PERF Increase default string table size
hseigel
parents: 16686
diff changeset
  1993
  status = status && verify_interval(StringTableSize, minimumStringTableSize,
14487
9a40ad461ee9 7122219: Passed StringTableSize value not verified
hseigel
parents: 14296
diff changeset
  1994
    (max_uintx / StringTable::bucket_size()), "StringTable size");
9a40ad461ee9 7122219: Passed StringTableSize value not verified
hseigel
parents: 14296
diff changeset
  1995
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1996
  if (MinHeapFreeRatio > MaxHeapFreeRatio) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1997
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1998
                "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1999
                "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2000
                MinHeapFreeRatio, MaxHeapFreeRatio);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2001
    status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2002
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2003
  // Keeping the heap 100% free is hard ;-) so limit it to 99%.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2004
  MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2005
15610
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2006
  // Min/MaxMetaspaceFreeRatio
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2007
  status = status && verify_percentage(MinMetaspaceFreeRatio, "MinMetaspaceFreeRatio");
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2008
  status = status && verify_percentage(MaxMetaspaceFreeRatio, "MaxMetaspaceFreeRatio");
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2009
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2010
  if (MinMetaspaceFreeRatio > MaxMetaspaceFreeRatio) {
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2011
    jio_fprintf(defaultStream::error_stream(),
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2012
                "MinMetaspaceFreeRatio (%s" UINTX_FORMAT ") must be less than or "
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2013
                "equal to MaxMetaspaceFreeRatio (%s" UINTX_FORMAT ")\n",
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2014
                FLAG_IS_DEFAULT(MinMetaspaceFreeRatio) ? "Default: " : "",
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2015
                MinMetaspaceFreeRatio,
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2016
                FLAG_IS_DEFAULT(MaxMetaspaceFreeRatio) ? "Default: " : "",
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2017
                MaxMetaspaceFreeRatio);
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2018
    status = false;
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2019
  }
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2020
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2021
  // Trying to keep 100% free is not practical
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2022
  MinMetaspaceFreeRatio = MIN2(MinMetaspaceFreeRatio, (uintx) 99);
528d799702c7 8005452: NPG: Create new flags for Metaspace resizing policy
jmasa
parents: 15607
diff changeset
  2023
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2024
  if (FullGCALot && FLAG_IS_DEFAULT(MarkSweepAlwaysCompactCount)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2025
    MarkSweepAlwaysCompactCount = 1;  // Move objects every gc.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2026
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2027
1670
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2028
  if (UseParallelOldGC && ParallelOldGCSplitALot) {
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2029
    // Settings to encourage splitting.
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2030
    if (!FLAG_IS_CMDLINE(NewRatio)) {
15605
bf7de87bbe3a 8006432: Ratio flags should be unsigned
jwilhelm
parents: 15232
diff changeset
  2031
      FLAG_SET_CMDLINE(uintx, NewRatio, 2);
1670
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2032
    }
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2033
    if (!FLAG_IS_CMDLINE(ScavengeBeforeFullGC)) {
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2034
      FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false);
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2035
    }
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2036
  }
0deb85ea62d5 6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents: 1602
diff changeset
  2037
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2038
  status = status && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit");
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2039
  status = status && verify_percentage(GCTimeLimit, "GCTimeLimit");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2040
  if (GCTimeLimit == 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2041
    // Turn off gc-overhead-limit-exceeded checks
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2042
    FLAG_SET_DEFAULT(UseGCOverheadLimit, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2043
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2044
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2045
  status = status && check_gc_consistency();
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 6176
diff changeset
  2046
  status = status && check_stack_pages();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2047
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2048
  if (CMSIncrementalMode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2049
    if (!UseConcMarkSweepGC) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2050
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2051
                  "error:  invalid argument combination.\n"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2052
                  "The CMS collector (-XX:+UseConcMarkSweepGC) must be "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2053
                  "selected in order\nto use CMSIncrementalMode.\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2054
      status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2055
    } else {
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2056
      status = status && verify_percentage(CMSIncrementalDutyCycle,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2057
                                  "CMSIncrementalDutyCycle");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2058
      status = status && verify_percentage(CMSIncrementalDutyCycleMin,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2059
                                  "CMSIncrementalDutyCycleMin");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2060
      status = status && verify_percentage(CMSIncrementalSafetyFactor,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2061
                                  "CMSIncrementalSafetyFactor");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2062
      status = status && verify_percentage(CMSIncrementalOffset,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2063
                                  "CMSIncrementalOffset");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2064
      status = status && verify_percentage(CMSExpAvgFactor,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2065
                                  "CMSExpAvgFactor");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2066
      // If it was not set on the command line, set
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2067
      // CMSInitiatingOccupancyFraction to 1 so icms can initiate cycles early.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2068
      if (CMSInitiatingOccupancyFraction < 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2069
        FLAG_SET_DEFAULT(CMSInitiatingOccupancyFraction, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2070
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2071
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2072
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2073
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2074
  // CMS space iteration, which FLSVerifyAllHeapreferences entails,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2075
  // insists that we hold the requisite locks so that the iteration is
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2076
  // MT-safe. For the verification at start-up and shut-down, we don't
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2077
  // yet have a good way of acquiring and releasing these locks,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2078
  // which are not visible at the CollectedHeap level. We want to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2079
  // be able to acquire these locks and then do the iteration rather
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2080
  // than just disable the lock verification. This will be fixed under
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2081
  // bug 4788986.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2082
  if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) {
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2083
    if (VerifyDuringStartup) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2084
      warning("Heap verification at start-up disabled "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2085
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2086
      VerifyDuringStartup = false; // Disable verification at start-up
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2087
    }
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2088
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2089
    if (VerifyBeforeExit) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2090
      warning("Heap verification at shutdown disabled "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2091
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2092
      VerifyBeforeExit = false; // Disable verification at shutdown
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2093
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2094
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2095
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2096
  // Note: only executed in non-PRODUCT mode
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2097
  if (!UseAsyncConcMarkSweepGC &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2098
      (ExplicitGCInvokesConcurrent ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2099
       ExplicitGCInvokesConcurrentAndUnloadsClasses)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2100
    jio_fprintf(defaultStream::error_stream(),
13516
f7adc27fb367 7178363: G1: Remove the serial code for PrintGCDetails and make it a special case of the parallel code
brutisso
parents: 13391
diff changeset
  2101
                "error: +ExplicitGCInvokesConcurrent[AndUnloadsClasses] conflicts"
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2102
                " with -UseAsyncConcMarkSweepGC");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2103
    status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2104
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2105
8685
f8edcc58cca7 6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents: 8681
diff changeset
  2106
  status = status && verify_min_value(ParGCArrayScanChunk, 1, "ParGCArrayScanChunk");
f8edcc58cca7 6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents: 8681
diff changeset
  2107
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  2108
#if INCLUDE_ALL_GCS
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2109
  if (UseG1GC) {
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2110
    status = status && verify_percentage(InitiatingHeapOccupancyPercent,
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2111
                                         "InitiatingHeapOccupancyPercent");
8073
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2112
    status = status && verify_min_value(G1RefProcDrainInterval, 1,
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2113
                                        "G1RefProcDrainInterval");
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2114
    status = status && verify_min_value((intx)G1ConcMarkStepDurationMillis, 1,
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2115
                                        "G1ConcMarkStepDurationMillis");
17327
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2116
    status = status && verify_interval(G1ConcRSHotCardLimit, 0, max_jubyte,
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2117
                                       "G1ConcRSHotCardLimit");
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2118
    status = status && verify_interval(G1ConcRSLogCacheSize, 0, 31,
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2119
                                       "G1ConcRSLogCacheSize");
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2120
  }
17392
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2121
  if (UseConcMarkSweepGC) {
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2122
    status = status && verify_min_value(CMSOldPLABNumRefills, 1, "CMSOldPLABNumRefills");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2123
    status = status && verify_min_value(CMSOldPLABToleranceFactor, 1, "CMSOldPLABToleranceFactor");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2124
    status = status && verify_min_value(CMSOldPLABMax, 1, "CMSOldPLABMax");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2125
    status = status && verify_interval(CMSOldPLABMin, 1, CMSOldPLABMax, "CMSOldPLABMin");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2126
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2127
    status = status && verify_min_value(CMSYoungGenPerWorker, 1, "CMSYoungGenPerWorker");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2128
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2129
    status = status && verify_min_value(CMSSamplingGrain, 1, "CMSSamplingGrain");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2130
    status = status && verify_interval(CMS_SweepWeight, 0, 100, "CMS_SweepWeight");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2131
    status = status && verify_interval(CMS_FLSWeight, 0, 100, "CMS_FLSWeight");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2132
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2133
    status = status && verify_interval(FLSCoalescePolicy, 0, 4, "FLSCoalescePolicy");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2134
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2135
    status = status && verify_min_value(CMSRescanMultiple, 1, "CMSRescanMultiple");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2136
    status = status && verify_min_value(CMSConcMarkMultiple, 1, "CMSConcMarkMultiple");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2137
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2138
    status = status && verify_interval(CMSPrecleanIter, 0, 9, "CMSPrecleanIter");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2139
    status = status && verify_min_value(CMSPrecleanDenominator, 1, "CMSPrecleanDenominator");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2140
    status = status && verify_interval(CMSPrecleanNumerator, 0, CMSPrecleanDenominator - 1, "CMSPrecleanNumerator");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2141
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2142
    status = status && verify_percentage(CMSBootstrapOccupancy, "CMSBootstrapOccupancy");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2143
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2144
    status = status && verify_min_value(CMSPrecleanThreshold, 100, "CMSPrecleanThreshold");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2145
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2146
    status = status && verify_percentage(CMSScheduleRemarkEdenPenetration, "CMSScheduleRemarkEdenPenetration");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2147
    status = status && verify_min_value(CMSScheduleRemarkSamplingRatio, 1, "CMSScheduleRemarkSamplingRatio");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2148
    status = status && verify_min_value(CMSBitMapYieldQuantum, 1, "CMSBitMapYieldQuantum");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2149
    status = status && verify_percentage(CMSTriggerRatio, "CMSTriggerRatio");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2150
    status = status && verify_percentage(CMSIsTooFullPercentage, "CMSIsTooFullPercentage");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2151
  }
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2152
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2153
  if (UseParallelGC || UseParallelOldGC) {
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2154
    status = status && verify_interval(ParallelOldDeadWoodLimiterMean, 0, 100, "ParallelOldDeadWoodLimiterMean");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2155
    status = status && verify_interval(ParallelOldDeadWoodLimiterStdDev, 0, 100, "ParallelOldDeadWoodLimiterStdDev");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2156
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2157
    status = status && verify_percentage(YoungGenerationSizeIncrement, "YoungGenerationSizeIncrement");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2158
    status = status && verify_percentage(TenuredGenerationSizeIncrement, "TenuredGenerationSizeIncrement");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2159
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2160
    status = status && verify_min_value(YoungGenerationSizeSupplementDecay, 1, "YoungGenerationSizeSupplementDecay");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2161
    status = status && verify_min_value(TenuredGenerationSizeSupplementDecay, 1, "TenuredGenerationSizeSupplementDecay");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2162
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2163
    status = status && verify_min_value(ParGCCardsPerStrideChunk, 1, "ParGCCardsPerStrideChunk");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2164
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2165
    status = status && verify_min_value(ParallelOldGCSplitInterval, 0, "ParallelOldGCSplitInterval");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2166
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  2167
#endif // INCLUDE_ALL_GCS
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2168
4885
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2169
  status = status && verify_interval(RefDiscoveryPolicy,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2170
                                     ReferenceProcessor::DiscoveryPolicyMin,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2171
                                     ReferenceProcessor::DiscoveryPolicyMax,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2172
                                     "RefDiscoveryPolicy");
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2173
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2174
  // Limit the lower bound of this flag to 1 as it is used in a division
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2175
  // expression.
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2176
  status = status && verify_interval(TLABWasteTargetPercent,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2177
                                     1, 100, "TLABWasteTargetPercent");
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2178
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  2179
  status = status && verify_object_alignment();
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  2180
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  2181
  status = status && verify_interval(CompressedClassSpaceSize, 1*M, 3*G,
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  2182
                                      "CompressedClassSpaceSize");
13739
35cd081a64ea 7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents: 13728
diff changeset
  2183
14740
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  2184
  status = status && verify_interval(MarkStackSizeMax,
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  2185
                                  1, (max_jint - 1), "MarkStackSizeMax");
17392
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2186
  status = status && verify_interval(NUMAChunkResizeWeight, 0, 100, "NUMAChunkResizeWeight");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2187
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2188
  status = status && verify_min_value(LogEventsBufferEntries, 1, "LogEventsBufferEntries");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2189
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2190
  status = status && verify_min_value(HeapSizePerGCThread, (uintx) os::vm_page_size(), "HeapSizePerGCThread");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2191
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2192
  status = status && verify_min_value(GCTaskTimeStampEntries, 1, "GCTaskTimeStampEntries");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2193
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2194
  status = status && verify_percentage(ParallelGCBufferWastePct, "ParallelGCBufferWastePct");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2195
  status = status && verify_interval(TargetPLABWastePct, 1, 100, "TargetPLABWastePct");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2196
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2197
  status = status && verify_min_value(ParGCStridesPerThread, 1, "ParGCStridesPerThread");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2198
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2199
  status = status && verify_min_value(MinRAMFraction, 1, "MinRAMFraction");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2200
  status = status && verify_min_value(InitialRAMFraction, 1, "InitialRAMFraction");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2201
  status = status && verify_min_value(MaxRAMFraction, 1, "MaxRAMFraction");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2202
  status = status && verify_min_value(DefaultMaxRAMFraction, 1, "DefaultMaxRAMFraction");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2203
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2204
  status = status && verify_interval(AdaptiveTimeWeight, 0, 100, "AdaptiveTimeWeight");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2205
  status = status && verify_min_value(AdaptiveSizeDecrementScaleFactor, 1, "AdaptiveSizeDecrementScaleFactor");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2206
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2207
  status = status && verify_interval(TLABAllocationWeight, 0, 100, "TLABAllocationWeight");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2208
  status = status && verify_min_value(MinTLABSize, 1, "MinTLABSize");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2209
  status = status && verify_min_value(TLABRefillWasteFraction, 1, "TLABRefillWasteFraction");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2210
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2211
  status = status && verify_percentage(YoungGenerationSizeSupplement, "YoungGenerationSizeSupplement");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2212
  status = status && verify_percentage(TenuredGenerationSizeSupplement, "TenuredGenerationSizeSupplement");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2213
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2214
  // the "age" field in the oop header is 4 bits; do not want to pull in markOop.hpp
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2215
  // just for that, so hardcode here.
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2216
  status = status && verify_interval(MaxTenuringThreshold, 0, 15, "MaxTenuringThreshold");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2217
  status = status && verify_interval(InitialTenuringThreshold, 0, MaxTenuringThreshold, "MaxTenuringThreshold");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2218
  status = status && verify_percentage(TargetSurvivorRatio, "TargetSurvivorRatio");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2219
  status = status && verify_percentage(MarkSweepDeadRatio, "MarkSweepDeadRatio");
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2220
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17327
diff changeset
  2221
  status = status && verify_min_value(MarkSweepAlwaysCompactCount, 1, "MarkSweepAlwaysCompactCount");
13757
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2222
#ifdef SPARC
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2223
  if (UseConcMarkSweepGC || UseG1GC) {
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2224
    // Issue a stern warning if the user has explicitly set
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2225
    // UseMemSetInBOT (it is known to cause issues), but allow
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2226
    // use for experimentation and debugging.
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2227
    if (VM_Version::is_sun4v() && UseMemSetInBOT) {
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2228
      assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error");
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2229
      warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2230
          " on sun4v; please understand that you are using at your own risk!");
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2231
    }
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2232
  }
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2233
#endif // SPARC
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2234
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2235
  if (PrintNMTStatistics) {
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2236
#if INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2237
    if (MemTracker::tracking_level() == MemTracker::NMT_off) {
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2238
#endif // INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2239
      warning("PrintNMTStatistics is disabled, because native memory tracking is not enabled");
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2240
      PrintNMTStatistics = false;
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2241
#if INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2242
    }
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2243
#endif
13861
619cff4bfb8b 7188594: Print statistic collected by NMT with VM flag
zgu
parents: 13739
diff changeset
  2244
  }
619cff4bfb8b 7188594: Print statistic collected by NMT with VM flag
zgu
parents: 13739
diff changeset
  2245
17365
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2246
  // Need to limit the extent of the padding to reasonable size.
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2247
  // 8K is well beyond the reasonable HW cache line size, even with the
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2248
  // aggressive prefetching, while still leaving the room for segregating
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2249
  // among the distinct pages.
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2250
  if (ContendedPaddingWidth < 0 || ContendedPaddingWidth > 8192) {
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2251
    jio_fprintf(defaultStream::error_stream(),
19679
23a7ef6ca0f9 8023638: Add the regression test for 8006997
shade
parents: 19319
diff changeset
  2252
                "ContendedPaddingWidth=" INTX_FORMAT " must be in between %d and %d\n",
17365
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2253
                ContendedPaddingWidth, 0, 8192);
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2254
    status = false;
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2255
  }
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2256
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2257
  // Need to enforce the padding not to break the existing field alignments.
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2258
  // It is sufficient to check against the largest type size.
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2259
  if ((ContendedPaddingWidth % BytesPerLong) != 0) {
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2260
    jio_fprintf(defaultStream::error_stream(),
19679
23a7ef6ca0f9 8023638: Add the regression test for 8006997
shade
parents: 19319
diff changeset
  2261
                "ContendedPaddingWidth=" INTX_FORMAT " must be a multiple of %d\n",
17365
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2262
                ContendedPaddingWidth, BytesPerLong);
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2263
    status = false;
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2264
  }
b127267313d8 8006997: ContendedPaddingWidth should be range-checked
dholmes
parents: 17098
diff changeset
  2265
18506
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2266
  // Check lower bounds of the code cache
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2267
  // Template Interpreter code is approximately 3X larger in debug builds.
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2268
  uint min_code_cache_size = (CodeCacheMinimumUseSpace DEBUG_ONLY(* 3)) + CodeCacheMinimumFreeSpace;
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2269
  if (InitialCodeCacheSize < (uintx)os::vm_page_size()) {
17874
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2270
    jio_fprintf(defaultStream::error_stream(),
18506
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2271
                "Invalid InitialCodeCacheSize=%dK. Must be at least %dK.\n", InitialCodeCacheSize/K,
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2272
                os::vm_page_size()/K);
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2273
    status = false;
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2274
  } else if (ReservedCodeCacheSize < InitialCodeCacheSize) {
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2275
    jio_fprintf(defaultStream::error_stream(),
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2276
                "Invalid ReservedCodeCacheSize: %dK. Must be at least InitialCodeCacheSize=%dK.\n",
17874
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2277
                ReservedCodeCacheSize/K, InitialCodeCacheSize/K);
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2278
    status = false;
18506
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2279
  } else if (ReservedCodeCacheSize < min_code_cache_size) {
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2280
    jio_fprintf(defaultStream::error_stream(),
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2281
                "Invalid ReservedCodeCacheSize=%dK. Must be at least %uK.\n", ReservedCodeCacheSize/K,
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2282
                min_code_cache_size/K);
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2283
    status = false;
18700
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2284
  } else if (ReservedCodeCacheSize > 2*G) {
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2285
    // Code cache size larger than MAXINT is not supported.
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2286
    jio_fprintf(defaultStream::error_stream(),
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2287
                "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2288
                (2*G)/M);
293625ae06a2 8015635: Crash when specifying very large code cache size
anoll
parents: 18510
diff changeset
  2289
    status = false;
17874
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2290
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2291
  return status;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2292
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2293
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2294
bool Arguments::is_bad_option(const JavaVMOption* option, jboolean ignore,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2295
  const char* option_type) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2296
  if (ignore) return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2297
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2298
  const char* spacer = " ";
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2299
  if (option_type == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2300
    option_type = ++spacer; // Set both to the empty string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2301
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2302
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2303
  if (os::obsolete_option(option)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2304
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2305
                "Obsolete %s%soption: %s\n", option_type, spacer,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2306
      option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2307
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2308
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2309
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2310
                "Unrecognized %s%soption: %s\n", option_type, spacer,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2311
      option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2312
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2313
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2314
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2315
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2316
static const char* user_assertion_options[] = {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2317
  "-da", "-ea", "-disableassertions", "-enableassertions", 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2318
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2319
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2320
static const char* system_assertion_options[] = {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2321
  "-dsa", "-esa", "-disablesystemassertions", "-enablesystemassertions", 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2322
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2323
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2324
// Return true if any of the strings in null-terminated array 'names' matches.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2325
// If tail_allowed is true, then the tail must begin with a colon; otherwise,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2326
// the option must match exactly.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2327
static bool match_option(const JavaVMOption* option, const char** names, const char** tail,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2328
  bool tail_allowed) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2329
  for (/* empty */; *names != NULL; ++names) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2330
    if (match_option(option, *names, tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2331
      if (**tail == '\0' || tail_allowed && **tail == ':') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2332
        return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2333
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2334
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2335
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2336
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2337
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2338
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2339
bool Arguments::parse_uintx(const char* value,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2340
                            uintx* uintx_arg,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2341
                            uintx min_size) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2342
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2343
  // Check the sign first since atomull() parses only unsigned values.
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2344
  bool value_is_positive = !(*value == '-');
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2345
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2346
  if (value_is_positive) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2347
    julong n;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2348
    bool good_return = atomull(value, &n);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2349
    if (good_return) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2350
      bool above_minimum = n >= min_size;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2351
      bool value_is_too_large = n > max_uintx;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2352
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2353
      if (above_minimum && !value_is_too_large) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2354
        *uintx_arg = n;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2355
        return true;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2356
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2357
    }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2358
  }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2359
  return false;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2360
}
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2361
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2362
Arguments::ArgsRange Arguments::parse_memory_size(const char* s,
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2363
                                                  julong* long_arg,
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2364
                                                  julong min_size) {
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2365
  if (!atomull(s, long_arg)) return arg_unreadable;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2366
  return check_memory_size(*long_arg, min_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2367
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2368
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2369
// Parse JavaVMInitArgs structure
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2370
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2371
jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2372
  // For components of the system classpath.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2373
  SysClassPath scp(Arguments::get_sysclasspath());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2374
  bool scp_assembly_required = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2375
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2376
  // Save default settings for some mode flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2377
  Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2378
  Arguments::_UseOnStackReplacement    = UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2379
  Arguments::_ClipInlining             = ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2380
  Arguments::_BackgroundCompilation    = BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2381
9442
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2382
  // Setup flags for mixed which is the default
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2383
  set_mode_flags(_mixed);
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2384
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2385
  // Parse JAVA_TOOL_OPTIONS environment variable (if present)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2386
  jint result = parse_java_tool_options_environment_variable(&scp, &scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2387
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2388
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2389
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2390
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2391
  // Parse JavaVMInitArgs structure passed in
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2392
  result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, COMMAND_LINE);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2393
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2394
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2395
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2396
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2397
  if (AggressiveOpts) {
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2398
    // Insert alt-rt.jar between user-specified bootclasspath
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2399
    // prefix and the default bootclasspath.  os::set_boot_path()
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2400
    // uses meta_index_dir as the default bootclasspath directory.
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2401
    const char* altclasses_jar = "alt-rt.jar";
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2402
    size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 +
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2403
                                 strlen(altclasses_jar);
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2404
    char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal);
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2405
    strcpy(altclasses_path, get_meta_index_dir());
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2406
    strcat(altclasses_path, altclasses_jar);
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2407
    scp.add_suffix_to_prefix(altclasses_path);
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2408
    scp_assembly_required = true;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2409
    FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal);
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2410
  }
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2411
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2412
  // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2413
  result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2414
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2415
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2416
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2417
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2418
  // Do final processing now that all arguments have been parsed
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2419
  result = finalize_vm_init_args(&scp, scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2420
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2421
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2422
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2423
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2424
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2425
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2426
17096
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2427
// Checks if name in command-line argument -agent{lib,path}:name[=options]
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2428
// represents a valid HPROF of JDWP agent.  is_path==true denotes that we
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2429
// are dealing with -agentpath (case where name is a path), otherwise with
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2430
// -agentlib
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2431
bool valid_hprof_or_jdwp_agent(char *name, bool is_path) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2432
  char *_name;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2433
  const char *_hprof = "hprof", *_jdwp = "jdwp";
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2434
  size_t _len_hprof, _len_jdwp, _len_prefix;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2435
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2436
  if (is_path) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2437
    if ((_name = strrchr(name, (int) *os::file_separator())) == NULL) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2438
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2439
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2440
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2441
    _name++;  // skip past last path separator
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2442
    _len_prefix = strlen(JNI_LIB_PREFIX);
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2443
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2444
    if (strncmp(_name, JNI_LIB_PREFIX, _len_prefix) != 0) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2445
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2446
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2447
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2448
    _name += _len_prefix;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2449
    _len_hprof = strlen(_hprof);
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2450
    _len_jdwp = strlen(_jdwp);
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2451
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2452
    if (strncmp(_name, _hprof, _len_hprof) == 0) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2453
      _name += _len_hprof;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2454
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2455
    else if (strncmp(_name, _jdwp, _len_jdwp) == 0) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2456
      _name += _len_jdwp;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2457
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2458
    else {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2459
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2460
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2461
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2462
    if (strcmp(_name, JNI_LIB_SUFFIX) != 0) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2463
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2464
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2465
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2466
    return true;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2467
  }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2468
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2469
  if (strcmp(name, _hprof) == 0 || strcmp(name, _jdwp) == 0) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2470
    return true;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2471
  }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2472
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2473
  return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2474
}
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2475
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2476
jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2477
                                       SysClassPath* scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2478
                                       bool* scp_assembly_required_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2479
                                       FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2480
  // Remaining part of option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2481
  const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2482
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2483
  // iterate over arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2484
  for (int index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2485
    bool is_absolute_path = false;  // for -agentpath vs -agentlib
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2486
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2487
    const JavaVMOption* option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2488
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2489
    if (!match_option(option, "-Djava.class.path", &tail) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2490
        !match_option(option, "-Dsun.java.command", &tail) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2491
        !match_option(option, "-Dsun.java.launcher", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2492
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2493
        // add all jvm options to the jvm_args string. This string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2494
        // is used later to set the java.vm.args PerfData string constant.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2495
        // the -Djava.class.path and the -Dsun.java.command options are
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2496
        // omitted from jvm_args string as each have their own PerfData
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2497
        // string constant object.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2498
        build_jvm_args(option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2499
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2500
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2501
    // -verbose:[class/gc/jni]
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2502
    if (match_option(option, "-verbose", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2503
      if (!strcmp(tail, ":class") || !strcmp(tail, "")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2504
        FLAG_SET_CMDLINE(bool, TraceClassLoading, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2505
        FLAG_SET_CMDLINE(bool, TraceClassUnloading, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2506
      } else if (!strcmp(tail, ":gc")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2507
        FLAG_SET_CMDLINE(bool, PrintGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2508
      } else if (!strcmp(tail, ":jni")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2509
        FLAG_SET_CMDLINE(bool, PrintJNIResolving, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2510
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2511
    // -da / -ea / -disableassertions / -enableassertions
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2512
    // These accept an optional class/package name separated by a colon, e.g.,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2513
    // -da:java.lang.Thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2514
    } else if (match_option(option, user_assertion_options, &tail, true)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2515
      bool enable = option->optionString[1] == 'e';     // char after '-' is 'e'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2516
      if (*tail == '\0') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2517
        JavaAssertions::setUserClassDefault(enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2518
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2519
        assert(*tail == ':', "bogus match by match_option()");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2520
        JavaAssertions::addOption(tail + 1, enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2521
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2522
    // -dsa / -esa / -disablesystemassertions / -enablesystemassertions
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2523
    } else if (match_option(option, system_assertion_options, &tail, false)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2524
      bool enable = option->optionString[1] == 'e';     // char after '-' is 'e'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2525
      JavaAssertions::setSystemClassDefault(enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2526
    // -bootclasspath:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2527
    } else if (match_option(option, "-Xbootclasspath:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2528
      scp_p->reset_path(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2529
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2530
    // -bootclasspath/a:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2531
    } else if (match_option(option, "-Xbootclasspath/a:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2532
      scp_p->add_suffix(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2533
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2534
    // -bootclasspath/p:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2535
    } else if (match_option(option, "-Xbootclasspath/p:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2536
      scp_p->add_prefix(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2537
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2538
    // -Xrun
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2539
    } else if (match_option(option, "-Xrun", &tail)) {
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2540
      if (tail != NULL) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2541
        const char* pos = strchr(tail, ':');
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2542
        size_t len = (pos == NULL) ? strlen(tail) : pos - tail;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2543
        char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2544
        name[len] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2545
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2546
        char *options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2547
        if(pos != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2548
          size_t len2 = strlen(pos+1) + 1; // options start after ':'.  Final zero must be copied.
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2549
          options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2550
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2551
#if !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2552
        if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) {
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2553
          jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2554
            "Profiling and debugging agents are not supported in this VM\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2555
          return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2556
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2557
#endif // !INCLUDE_JVMTI
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2558
        add_init_library(name, options);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2559
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2560
    // -agentlib and -agentpath
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2561
    } else if (match_option(option, "-agentlib:", &tail) ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2562
          (is_absolute_path = match_option(option, "-agentpath:", &tail))) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2563
      if(tail != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2564
        const char* pos = strchr(tail, '=');
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2565
        size_t len = (pos == NULL) ? strlen(tail) : pos - tail;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2566
        char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2567
        name[len] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2568
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2569
        char *options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2570
        if(pos != NULL) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2571
          options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2572
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2573
#if !INCLUDE_JVMTI
17096
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2574
        if (valid_hprof_or_jdwp_agent(name, is_absolute_path)) {
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2575
          jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2576
            "Profiling and debugging agents are not supported in this VM\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2577
          return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2578
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2579
#endif // !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2580
        add_init_agent(name, options, is_absolute_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2581
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2582
    // -javaagent
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2583
    } else if (match_option(option, "-javaagent:", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2584
#if !INCLUDE_JVMTI
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2585
      jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2586
        "Instrumentation agents are not supported in this VM\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2587
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2588
#else
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2589
      if(tail != NULL) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2590
        char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2591
        add_init_agent("instrument", options, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2592
      }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2593
#endif // !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2594
    // -Xnoclassgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2595
    } else if (match_option(option, "-Xnoclassgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2596
      FLAG_SET_CMDLINE(bool, ClassUnloading, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2597
    // -Xincgc: i-CMS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2598
    } else if (match_option(option, "-Xincgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2599
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2600
      FLAG_SET_CMDLINE(bool, CMSIncrementalMode, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2601
    // -Xnoincgc: no i-CMS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2602
    } else if (match_option(option, "-Xnoincgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2603
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2604
      FLAG_SET_CMDLINE(bool, CMSIncrementalMode, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2605
    // -Xconcgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2606
    } else if (match_option(option, "-Xconcgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2607
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2608
    // -Xnoconcgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2609
    } else if (match_option(option, "-Xnoconcgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2610
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2611
    // -Xbatch
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2612
    } else if (match_option(option, "-Xbatch", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2613
      FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2614
    // -Xmn for compatibility with other JVM vendors
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2615
    } else if (match_option(option, "-Xmn", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2616
      julong long_initial_eden_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2617
      ArgsRange errcode = parse_memory_size(tail, &long_initial_eden_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2618
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2619
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2620
                    "Invalid initial eden size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2621
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2622
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2623
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2624
      FLAG_SET_CMDLINE(uintx, MaxNewSize, (uintx)long_initial_eden_size);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2625
      FLAG_SET_CMDLINE(uintx, NewSize, (uintx)long_initial_eden_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2626
    // -Xms
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2627
    } else if (match_option(option, "-Xms", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2628
      julong long_initial_heap_size = 0;
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2629
      // an initial heap size of 0 means automatically determine
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2630
      ArgsRange errcode = parse_memory_size(tail, &long_initial_heap_size, 0);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2631
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2632
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2633
                    "Invalid initial heap size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2634
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2635
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2636
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2637
      FLAG_SET_CMDLINE(uintx, InitialHeapSize, (uintx)long_initial_heap_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2638
      // Currently the minimum size and the initial heap sizes are the same.
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2639
      set_min_heap_size(InitialHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2640
    // -Xmx
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2641
    } else if (match_option(option, "-Xmx", &tail) || match_option(option, "-XX:MaxHeapSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2642
      julong long_max_heap_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2643
      ArgsRange errcode = parse_memory_size(tail, &long_max_heap_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2644
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2645
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2646
                    "Invalid maximum heap size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2647
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2648
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2649
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2650
      FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2651
    // Xmaxf
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2652
    } else if (match_option(option, "-Xmaxf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2653
      int maxf = (int)(atof(tail) * 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2654
      if (maxf < 0 || maxf > 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2655
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2656
                    "Bad max heap free percentage size: %s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2657
                    option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2658
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2659
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2660
        FLAG_SET_CMDLINE(uintx, MaxHeapFreeRatio, maxf);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2661
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2662
    // Xminf
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2663
    } else if (match_option(option, "-Xminf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2664
      int minf = (int)(atof(tail) * 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2665
      if (minf < 0 || minf > 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2666
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2667
                    "Bad min heap free percentage size: %s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2668
                    option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2669
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2670
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2671
        FLAG_SET_CMDLINE(uintx, MinHeapFreeRatio, minf);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2672
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2673
    // -Xss
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2674
    } else if (match_option(option, "-Xss", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2675
      julong long_ThreadStackSize = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2676
      ArgsRange errcode = parse_memory_size(tail, &long_ThreadStackSize, 1000);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2677
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2678
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2679
                    "Invalid thread stack size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2680
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2681
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2682
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2683
      // Internally track ThreadStackSize in units of 1024 bytes.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2684
      FLAG_SET_CMDLINE(intx, ThreadStackSize,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2685
                              round_to((int)long_ThreadStackSize, K) / K);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2686
    // -Xoss
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2687
    } else if (match_option(option, "-Xoss", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2688
          // HotSpot does not have separate native and Java stacks, ignore silently for compatibility
18506
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2689
    } else if (match_option(option, "-XX:CodeCacheExpansionSize=", &tail)) {
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2690
      julong long_CodeCacheExpansionSize = 0;
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2691
      ArgsRange errcode = parse_memory_size(tail, &long_CodeCacheExpansionSize, os::vm_page_size());
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2692
      if (errcode != arg_in_range) {
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2693
        jio_fprintf(defaultStream::error_stream(),
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2694
                   "Invalid argument: %s. Must be at least %luK.\n", option->optionString,
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2695
                   os::vm_page_size()/K);
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2696
        return JNI_EINVAL;
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2697
      }
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2698
      FLAG_SET_CMDLINE(uintx, CodeCacheExpansionSize, (uintx)long_CodeCacheExpansionSize);
7719
ef138e2849eb 6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents: 7427
diff changeset
  2699
    } else if (match_option(option, "-Xmaxjitcodesize", &tail) ||
ef138e2849eb 6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents: 7427
diff changeset
  2700
               match_option(option, "-XX:ReservedCodeCacheSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2701
      julong long_ReservedCodeCacheSize = 0;
18506
af8765fafc07 8014972: Crash with specific values for -XX:InitialCodeCacheSize=500K -XX:ReservedCodeCacheSize=500k
anoll
parents: 18106
diff changeset
  2702
17874
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2703
      ArgsRange errcode = parse_memory_size(tail, &long_ReservedCodeCacheSize, 1);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2704
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2705
        jio_fprintf(defaultStream::error_stream(),
17874
ca460b733b76 8013496: Code cache management command line options work only in special order. Another order of arguments does not deliver the second parameter to the jvm.
anoll
parents: 17617
diff changeset
  2706
                    "Invalid maximum code cache size: %s.\n", option->optionString);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2707
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2708
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2709
      FLAG_SET_CMDLINE(uintx, ReservedCodeCacheSize, (uintx)long_ReservedCodeCacheSize);
17617
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2710
      //-XX:IncreaseFirstTierCompileThresholdAt=
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2711
      } else if (match_option(option, "-XX:IncreaseFirstTierCompileThresholdAt=", &tail)) {
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2712
        uintx uint_IncreaseFirstTierCompileThresholdAt = 0;
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2713
        if (!parse_uintx(tail, &uint_IncreaseFirstTierCompileThresholdAt, 0) || uint_IncreaseFirstTierCompileThresholdAt > 99) {
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2714
          jio_fprintf(defaultStream::error_stream(),
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2715
                      "Invalid value for IncreaseFirstTierCompileThresholdAt: %s. Should be between 0 and 99.\n",
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2716
                      option->optionString);
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2717
          return JNI_EINVAL;
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2718
        }
4e330bce1812 8012371: Adjust Tiered compile threshold according to available space in code cache
anoll
parents: 17399
diff changeset
  2719
        FLAG_SET_CMDLINE(uintx, IncreaseFirstTierCompileThresholdAt, (uintx)uint_IncreaseFirstTierCompileThresholdAt);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2720
    // -green
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2721
    } else if (match_option(option, "-green", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2722
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2723
                  "Green threads support not available\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2724
          return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2725
    // -native
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2726
    } else if (match_option(option, "-native", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2727
          // HotSpot always uses native threads, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2728
    // -Xsqnopause
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2729
    } else if (match_option(option, "-Xsqnopause", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2730
          // EVM option, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2731
    // -Xrs
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2732
    } else if (match_option(option, "-Xrs", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2733
          // Classic/EVM option, new functionality
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2734
      FLAG_SET_CMDLINE(bool, ReduceSignalUsage, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2735
    } else if (match_option(option, "-Xusealtsigs", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2736
          // change default internal VM signals used - lower case for back compat
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2737
      FLAG_SET_CMDLINE(bool, UseAltSigs, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2738
    // -Xoptimize
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2739
    } else if (match_option(option, "-Xoptimize", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2740
          // EVM option, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2741
    // -Xprof
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2742
    } else if (match_option(option, "-Xprof", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2743
#if INCLUDE_FPROF
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2744
      _has_profile = true;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2745
#else // INCLUDE_FPROF
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2746
      jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2747
        "Flat profiling is not supported in this VM.\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2748
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2749
#endif // INCLUDE_FPROF
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2750
    // -Xconcurrentio
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2751
    } else if (match_option(option, "-Xconcurrentio", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2752
      FLAG_SET_CMDLINE(bool, UseLWPSynchronization, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2753
      FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2754
      FLAG_SET_CMDLINE(intx, DeferThrSuspendLoopCount, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2755
      FLAG_SET_CMDLINE(bool, UseTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2756
      FLAG_SET_CMDLINE(uintx, NewSizeThreadIncrease, 16 * K);  // 20Kb per thread added to new generation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2757
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2758
      // -Xinternalversion
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2759
    } else if (match_option(option, "-Xinternalversion", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2760
      jio_fprintf(defaultStream::output_stream(), "%s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2761
                  VM_Version::internal_vm_info_string());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2762
      vm_exit(0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2763
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2764
    // -Xprintflags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2765
    } else if (match_option(option, "-Xprintflags", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  2766
      CommandLineFlags::printFlags(tty, false);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2767
      vm_exit(0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2768
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2769
    // -D
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2770
    } else if (match_option(option, "-D", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2771
      if (!add_property(tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2772
        return JNI_ENOMEM;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2773
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2774
      // Out of the box management support
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2775
      if (match_option(option, "-Dcom.sun.management", &tail)) {
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2776
#if INCLUDE_MANAGEMENT
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2777
        FLAG_SET_CMDLINE(bool, ManagementServer, true);
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2778
#else
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2779
        jio_fprintf(defaultStream::output_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2780
          "-Dcom.sun.management is not supported in this VM.\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2781
        return JNI_ERR;
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2782
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2783
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2784
    // -Xint
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2785
    } else if (match_option(option, "-Xint", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2786
          set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2787
    // -Xmixed
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2788
    } else if (match_option(option, "-Xmixed", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2789
          set_mode_flags(_mixed);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2790
    // -Xcomp
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2791
    } else if (match_option(option, "-Xcomp", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2792
      // for testing the compiler; turn off all flags that inhibit compilation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2793
          set_mode_flags(_comp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2794
    // -Xshare:dump
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2795
    } else if (match_option(option, "-Xshare:dump", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2796
      FLAG_SET_CMDLINE(bool, DumpSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2797
      set_mode_flags(_int);     // Prevent compilation, which creates objects
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2798
    // -Xshare:on
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2799
    } else if (match_option(option, "-Xshare:on", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2800
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2801
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2802
    // -Xshare:auto
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2803
    } else if (match_option(option, "-Xshare:auto", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2804
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2805
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2806
    // -Xshare:off
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2807
    } else if (match_option(option, "-Xshare:off", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2808
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2809
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2810
    // -Xverify
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2811
    } else if (match_option(option, "-Xverify", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2812
      if (strcmp(tail, ":all") == 0 || strcmp(tail, "") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2813
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2814
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2815
      } else if (strcmp(tail, ":remote") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2816
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2817
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2818
      } else if (strcmp(tail, ":none") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2819
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2820
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2821
      } else if (is_bad_option(option, args->ignoreUnrecognized, "verification")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2822
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2823
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2824
    // -Xdebug
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2825
    } else if (match_option(option, "-Xdebug", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2826
      // note this flag has been used, then ignore
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2827
      set_xdebug_mode(true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2828
    // -Xnoagent
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2829
    } else if (match_option(option, "-Xnoagent", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2830
      // For compatibility with classic. HotSpot refuses to load the old style agent.dll.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2831
    } else if (match_option(option, "-Xboundthreads", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2832
      // Bind user level threads to kernel threads (Solaris only)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2833
      FLAG_SET_CMDLINE(bool, UseBoundThreads, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2834
    } else if (match_option(option, "-Xloggc:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2835
      // Redirect GC output to the file. -Xloggc:<filename>
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2836
      // ostream_init_log(), when called will use this filename
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2837
      // to initialize a fileStream.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2838
      _gc_log_filename = strdup(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2839
      FLAG_SET_CMDLINE(bool, PrintGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2840
      FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2841
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2842
    // JNI hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2843
    } else if (match_option(option, "-Xcheck", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2844
      if (!strcmp(tail, ":jni")) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2845
#if !INCLUDE_JNI_CHECK
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2846
        warning("JNI CHECKING is not supported in this VM");
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2847
#else
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2848
        CheckJNICalls = true;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2849
#endif // INCLUDE_JNI_CHECK
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2850
      } else if (is_bad_option(option, args->ignoreUnrecognized,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2851
                                     "check")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2852
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2853
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2854
    } else if (match_option(option, "vfprintf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2855
      _vfprintf_hook = CAST_TO_FN_PTR(vfprintf_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2856
    } else if (match_option(option, "exit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2857
      _exit_hook = CAST_TO_FN_PTR(exit_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2858
    } else if (match_option(option, "abort", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2859
      _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2860
    // -XX:+AggressiveHeap
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2861
    } else if (match_option(option, "-XX:+AggressiveHeap", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2862
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2863
      // This option inspects the machine and attempts to set various
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2864
      // parameters to be optimal for long-running, memory allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2865
      // intensive jobs.  It is intended for machines with large
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2866
      // amounts of cpu and memory.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2867
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2868
      // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2869
      // VM, but we may not be able to represent the total physical memory
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2870
      // available (like having 8gb of memory on a box but using a 32bit VM).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2871
      // Thus, we need to make sure we're using a julong for intermediate
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2872
      // calculations.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2873
      julong initHeapSize;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2874
      julong total_memory = os::physical_memory();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2875
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2876
      if (total_memory < (julong)256*M) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2877
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2878
                    "You need at least 256mb of memory to use -XX:+AggressiveHeap\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2879
        vm_exit(1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2880
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2881
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2882
      // The heap size is half of available memory, or (at most)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2883
      // all of possible memory less 160mb (leaving room for the OS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2884
      // when using ISM).  This is the maximum; because adaptive sizing
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2885
      // is turned on below, the actual space used may be smaller.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2886
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2887
      initHeapSize = MIN2(total_memory / (julong)2,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2888
                          total_memory - (julong)160*M);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2889
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  2890
      initHeapSize = limit_by_allocatable_memory(initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2891
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2892
      if (FLAG_IS_DEFAULT(MaxHeapSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2893
         FLAG_SET_CMDLINE(uintx, MaxHeapSize, initHeapSize);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2894
         FLAG_SET_CMDLINE(uintx, InitialHeapSize, initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2895
         // Currently the minimum size and the initial heap sizes are the same.
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2896
         set_min_heap_size(initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2897
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2898
      if (FLAG_IS_DEFAULT(NewSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2899
         // Make the young generation 3/8ths of the total heap.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2900
         FLAG_SET_CMDLINE(uintx, NewSize,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2901
                                ((julong)MaxHeapSize / (julong)8) * (julong)3);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2902
         FLAG_SET_CMDLINE(uintx, MaxNewSize, NewSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2903
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2904
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  2905
#ifndef _ALLBSD_SOURCE  // UseLargePages is not yet supported on BSD.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2906
      FLAG_SET_DEFAULT(UseLargePages, true);
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  2907
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2908
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2909
      // Increase some data structure sizes for efficiency
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2910
      FLAG_SET_CMDLINE(uintx, BaseFootPrintEstimate, MaxHeapSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2911
      FLAG_SET_CMDLINE(bool, ResizeTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2912
      FLAG_SET_CMDLINE(uintx, TLABSize, 256*K);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2913
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2914
      // See the OldPLABSize comment below, but replace 'after promotion'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2915
      // with 'after copying'.  YoungPLABSize is the size of the survivor
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2916
      // space per-gc-thread buffers.  The default is 4kw.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2917
      FLAG_SET_CMDLINE(uintx, YoungPLABSize, 256*K);      // Note: this is in words
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2918
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2919
      // OldPLABSize is the size of the buffers in the old gen that
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2920
      // UseParallelGC uses to promote live data that doesn't fit in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2921
      // survivor spaces.  At any given time, there's one for each gc thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2922
      // The default size is 1kw. These buffers are rarely used, since the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2923
      // survivor spaces are usually big enough.  For specjbb, however, there
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2924
      // are occasions when there's lots of live data in the young gen
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2925
      // and we end up promoting some of it.  We don't have a definite
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2926
      // explanation for why bumping OldPLABSize helps, but the theory
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2927
      // is that a bigger PLAB results in retaining something like the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2928
      // original allocation order after promotion, which improves mutator
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2929
      // locality.  A minor effect may be that larger PLABs reduce the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2930
      // number of PLAB allocation events during gc.  The value of 8kw
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2931
      // was arrived at by experimenting with specjbb.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2932
      FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K);  // Note: this is in words
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2933
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2934
      // Enable parallel GC and adaptive generation sizing
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2935
      FLAG_SET_CMDLINE(bool, UseParallelGC, true);
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2936
      FLAG_SET_DEFAULT(ParallelGCThreads,
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2937
                       Abstract_VM_Version::parallel_worker_threads());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2938
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2939
      // Encourage steady state memory management
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2940
      FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2941
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2942
      // This appears to improve mutator locality
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2943
      FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2944
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2945
      // Get around early Solaris scheduling bug
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2946
      // (affinity vs other jobs on system)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2947
      // but disallow DR and offlining (5008695).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2948
      FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2949
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2950
    } else if (match_option(option, "-XX:+NeverTenure", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2951
      // The last option must always win.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2952
      FLAG_SET_CMDLINE(bool, AlwaysTenure, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2953
      FLAG_SET_CMDLINE(bool, NeverTenure, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2954
    } else if (match_option(option, "-XX:+AlwaysTenure", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2955
      // The last option must always win.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2956
      FLAG_SET_CMDLINE(bool, NeverTenure, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2957
      FLAG_SET_CMDLINE(bool, AlwaysTenure, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2958
    } else if (match_option(option, "-XX:+CMSPermGenSweepingEnabled", &tail) ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2959
               match_option(option, "-XX:-CMSPermGenSweepingEnabled", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2960
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2961
        "Please use CMSClassUnloadingEnabled in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2962
        "CMSPermGenSweepingEnabled in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2963
    } else if (match_option(option, "-XX:+UseGCTimeLimit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2964
      FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2965
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2966
        "Please use -XX:+UseGCOverheadLimit in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2967
        "-XX:+UseGCTimeLimit in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2968
    } else if (match_option(option, "-XX:-UseGCTimeLimit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2969
      FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2970
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2971
        "Please use -XX:-UseGCOverheadLimit in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2972
        "-XX:-UseGCTimeLimit in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2973
    // The TLE options are for compatibility with 1.3 and will be
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2974
    // removed without notice in a future release.  These options
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2975
    // are not to be documented.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2976
    } else if (match_option(option, "-XX:MaxTLERatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2977
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2978
    } else if (match_option(option, "-XX:+ResizeTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2979
      FLAG_SET_CMDLINE(bool, ResizeTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2980
    } else if (match_option(option, "-XX:-ResizeTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2981
      FLAG_SET_CMDLINE(bool, ResizeTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2982
    } else if (match_option(option, "-XX:+PrintTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2983
      FLAG_SET_CMDLINE(bool, PrintTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2984
    } else if (match_option(option, "-XX:-PrintTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2985
      FLAG_SET_CMDLINE(bool, PrintTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2986
    } else if (match_option(option, "-XX:TLEFragmentationRatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2987
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2988
    } else if (match_option(option, "-XX:TLESize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2989
      julong long_tlab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2990
      ArgsRange errcode = parse_memory_size(tail, &long_tlab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2991
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2992
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2993
                    "Invalid TLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2994
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2995
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2996
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2997
      FLAG_SET_CMDLINE(uintx, TLABSize, long_tlab_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2998
    } else if (match_option(option, "-XX:TLEThreadRatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2999
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3000
    } else if (match_option(option, "-XX:+UseTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3001
      FLAG_SET_CMDLINE(bool, UseTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3002
    } else if (match_option(option, "-XX:-UseTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3003
      FLAG_SET_CMDLINE(bool, UseTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3004
    } else if (match_option(option, "-XX:+DisplayVMOutputToStderr", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3005
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3006
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3007
    } else if (match_option(option, "-XX:+DisplayVMOutputToStdout", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3008
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3009
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3010
    } else if (match_option(option, "-XX:+ExtendedDTraceProbes", &tail)) {
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  3011
#if defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3012
      FLAG_SET_CMDLINE(bool, ExtendedDTraceProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3013
      FLAG_SET_CMDLINE(bool, DTraceMethodProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3014
      FLAG_SET_CMDLINE(bool, DTraceAllocProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3015
      FLAG_SET_CMDLINE(bool, DTraceMonitorProbes, true);
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  3016
#else // defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3017
      jio_fprintf(defaultStream::error_stream(),
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  3018
                  "ExtendedDTraceProbes flag is not applicable for this configuration\n");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3019
      return JNI_EINVAL;
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  3020
#endif // defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3021
#ifdef ASSERT
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3022
    } else if (match_option(option, "-XX:+FullGCALot", &tail)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3023
      FLAG_SET_CMDLINE(bool, FullGCALot, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3024
      // disable scavenge before parallel mark-compact
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3025
      FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3026
#endif
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3027
    } else if (match_option(option, "-XX:CMSParPromoteBlocksToClaim=", &tail)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3028
      julong cms_blocks_to_claim = (julong)atol(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3029
      FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3030
      jio_fprintf(defaultStream::error_stream(),
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3031
        "Please use -XX:OldPLABSize in place of "
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3032
        "-XX:CMSParPromoteBlocksToClaim in the future\n");
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3033
    } else if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) {
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3034
      julong cms_blocks_to_claim = (julong)atol(tail);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3035
      FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3036
      jio_fprintf(defaultStream::error_stream(),
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3037
        "Please use -XX:OldPLABSize in place of "
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3038
        "-XX:ParCMSPromoteBlocksToClaim in the future\n");
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3039
    } else if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  3040
      julong old_plab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3041
      ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3042
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3043
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3044
                    "Invalid old PLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3045
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3046
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3047
      }
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  3048
      FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3049
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3050
                  "Please use -XX:OldPLABSize in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3051
                  "-XX:ParallelGCOldGenAllocBufferSize in the future\n");
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3052
    } else if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  3053
      julong young_plab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3054
      ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3055
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3056
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3057
                    "Invalid young PLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3058
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3059
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3060
      }
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  3061
      FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3062
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3063
                  "Please use -XX:YoungPLABSize in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3064
                  "-XX:ParallelGCToSpaceAllocBufferSize in the future\n");
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3065
    } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) ||
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3066
               match_option(option, "-XX:G1MarkStackSize=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3067
      julong stack_size = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3068
      ArgsRange errcode = parse_memory_size(tail, &stack_size, 1);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3069
      if (errcode != arg_in_range) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3070
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3071
                    "Invalid mark stack size: %s\n", option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3072
        describe_range_error(errcode);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3073
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3074
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3075
      FLAG_SET_CMDLINE(uintx, MarkStackSize, stack_size);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3076
    } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3077
      julong max_stack_size = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3078
      ArgsRange errcode = parse_memory_size(tail, &max_stack_size, 1);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3079
      if (errcode != arg_in_range) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3080
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3081
                    "Invalid maximum mark stack size: %s\n",
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3082
                    option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3083
        describe_range_error(errcode);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3084
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3085
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3086
      FLAG_SET_CMDLINE(uintx, MarkStackSizeMax, max_stack_size);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3087
    } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) ||
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3088
               match_option(option, "-XX:ParallelCMSThreads=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3089
      uintx conc_threads = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3090
      if (!parse_uintx(tail, &conc_threads, 1)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3091
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3092
                    "Invalid concurrent threads: %s\n", option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3093
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3094
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  3095
      FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads);
13197
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3096
    } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) {
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3097
      julong max_direct_memory_size = 0;
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3098
      ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0);
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3099
      if (errcode != arg_in_range) {
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3100
        jio_fprintf(defaultStream::error_stream(),
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3101
                    "Invalid maximum direct memory size: %s\n",
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3102
                    option->optionString);
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3103
        describe_range_error(errcode);
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3104
        return JNI_EINVAL;
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3105
      }
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  3106
      FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size);
14116
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  3107
    } else if (match_option(option, "-XX:+UseVMInterruptibleIO", &tail)) {
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  3108
      // NOTE! In JDK 9, the UseVMInterruptibleIO flag will completely go
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  3109
      //       away and will cause VM initialization failures!
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  3110
      warning("-XX:+UseVMInterruptibleIO is obsolete and will be removed in a future release.");
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  3111
      FLAG_SET_CMDLINE(bool, UseVMInterruptibleIO, true);
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  3112
#if !INCLUDE_MANAGEMENT
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  3113
    } else if (match_option(option, "-XX:+ManagementServer", &tail)) {
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3114
        jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3115
          "ManagementServer is not supported in this VM.\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3116
        return JNI_ERR;
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  3117
#endif // INCLUDE_MANAGEMENT
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  3118
    } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3119
      // Skip -XX:Flags= since that case has already been handled
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3120
      if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3121
        if (!process_argument(tail, args->ignoreUnrecognized, origin)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3122
          return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3123
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3124
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3125
    // Unknown option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3126
    } else if (is_bad_option(option, args->ignoreUnrecognized)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3127
      return JNI_ERR;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3128
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3129
  }
9990
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  3130
1602
6859fd21ba2b 6554406: Change switch UseVMInterruptibleIO default to false (sol)
xlu
parents: 1500
diff changeset
  3131
  // Change the default value for flags  which have different default values
6859fd21ba2b 6554406: Change switch UseVMInterruptibleIO default to false (sol)
xlu
parents: 1500
diff changeset
  3132
  // when working with older JDKs.
6174
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3133
#ifdef LINUX
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3134
 if (JDK_Version::current().compare_major(6) <= 0 &&
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3135
      FLAG_IS_DEFAULT(UseLinuxPosixThreadCPUClocks)) {
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3136
    FLAG_SET_DEFAULT(UseLinuxPosixThreadCPUClocks, false);
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3137
  }
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  3138
#endif // LINUX
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3139
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3140
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3141
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3142
jint Arguments::finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3143
  // This must be done after all -D arguments have been processed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3144
  scp_p->expand_endorsed();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3145
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3146
  if (scp_assembly_required || scp_p->get_endorsed() != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3147
    // Assemble the bootclasspath elements into the final path.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3148
    Arguments::set_sysclasspath(scp_p->combined_path());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3149
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3150
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3151
  // This must be done after all arguments have been processed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3152
  // java_compiler() true means set to "NONE" or empty.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3153
  if (java_compiler() && !xdebug_mode()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3154
    // For backwards compatibility, we switch to interpreted mode if
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3155
    // -Djava.compiler="NONE" or "" is specified AND "-Xdebug" was
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3156
    // not specified.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3157
    set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3158
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3159
  if (CompileThreshold == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3160
    set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3161
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3162
17397
609242d28659 8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
tschatzl
parents: 17392
diff changeset
  3163
  // eventually fix up InitialTenuringThreshold if only MaxTenuringThreshold is set
609242d28659 8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
tschatzl
parents: 17392
diff changeset
  3164
  if (FLAG_IS_DEFAULT(InitialTenuringThreshold) && (InitialTenuringThreshold > MaxTenuringThreshold)) {
609242d28659 8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
tschatzl
parents: 17392
diff changeset
  3165
    FLAG_SET_ERGO(uintx, InitialTenuringThreshold, MaxTenuringThreshold);
609242d28659 8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
tschatzl
parents: 17392
diff changeset
  3166
  }
609242d28659 8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
tschatzl
parents: 17392
diff changeset
  3167
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3168
#ifndef COMPILER2
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3169
  // Don't degrade server performance for footprint
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3170
  if (FLAG_IS_DEFAULT(UseLargePages) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3171
      MaxHeapSize < LargePageHeapSizeThreshold) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3172
    // No need for large granularity pages w/small heaps.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3173
    // Note that large pages are enabled/disabled for both the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3174
    // Java heap and the code cache.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3175
    FLAG_SET_DEFAULT(UseLargePages, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3176
  }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  3177
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3178
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3179
  if (!FLAG_IS_DEFAULT(OptoLoopAlignment) && FLAG_IS_DEFAULT(MaxLoopPad)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3180
    FLAG_SET_DEFAULT(MaxLoopPad, OptoLoopAlignment-1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3181
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3182
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3183
19155
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
  3184
#ifndef TIERED
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
  3185
  // Tiered compilation is undefined.
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
  3186
  UNSUPPORTED_OPTION(TieredCompilation, "TieredCompilation");
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
  3187
#endif
706406e1c98e 8021120: TieredCompilation can be enabled even if TIERED is undefined
iignatyev
parents: 18946
diff changeset
  3188
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3189
  // If we are running in a headless jre, force java.awt.headless property
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3190
  // to be true unless the property has already been set.
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3191
  // Also allow the OS environment variable JAVA_AWT_HEADLESS to set headless state.
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3192
  if (os::is_headless_jre()) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3193
    const char* headless = Arguments::get_property("java.awt.headless");
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3194
    if (headless == NULL) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3195
      char envbuffer[128];
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3196
      if (!os::getenv("JAVA_AWT_HEADLESS", envbuffer, sizeof(envbuffer))) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3197
        if (!add_property("java.awt.headless=true")) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3198
          return JNI_ENOMEM;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3199
        }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3200
      } else {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3201
        char buffer[256];
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3202
        strcpy(buffer, "java.awt.headless=");
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3203
        strcat(buffer, envbuffer);
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3204
        if (!add_property(buffer)) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3205
          return JNI_ENOMEM;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3206
        }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3207
      }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3208
    }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3209
  }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3210
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3211
  if (!check_vm_args_consistency()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3212
    return JNI_ERR;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3213
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3214
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3215
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3216
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3217
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3218
jint Arguments::parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3219
  return parse_options_environment_variable("_JAVA_OPTIONS", scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3220
                                            scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3221
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3222
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3223
jint Arguments::parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3224
  return parse_options_environment_variable("JAVA_TOOL_OPTIONS", scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3225
                                            scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3226
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3227
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3228
jint Arguments::parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3229
  const int N_MAX_OPTIONS = 64;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3230
  const int OPTION_BUFFER_SIZE = 1024;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3231
  char buffer[OPTION_BUFFER_SIZE];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3232
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3233
  // The variable will be ignored if it exceeds the length of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3234
  // Don't check this variable if user has special privileges
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3235
  // (e.g. unix su command).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3236
  if (os::getenv(name, buffer, sizeof(buffer)) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3237
      !os::have_special_privileges()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3238
    JavaVMOption options[N_MAX_OPTIONS];      // Construct option array
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3239
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3240
                "Picked up %s: %s\n", name, buffer);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3241
    char* rd = buffer;                        // pointer to the input string (rd)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3242
    int i;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3243
    for (i = 0; i < N_MAX_OPTIONS;) {         // repeat for all options in the input string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3244
      while (isspace(*rd)) rd++;              // skip whitespace
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3245
      if (*rd == 0) break;                    // we re done when the input string is read completely
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3246
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3247
      // The output, option string, overwrites the input string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3248
      // Because of quoting, the pointer to the option string (wrt) may lag the pointer to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3249
      // input string (rd).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3250
      char* wrt = rd;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3251
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3252
      options[i++].optionString = wrt;        // Fill in option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3253
      while (*rd != 0 && !isspace(*rd)) {     // unquoted strings terminate with a space or NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3254
        if (*rd == '\'' || *rd == '"') {      // handle a quoted string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3255
          int quote = *rd;                    // matching quote to look for
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3256
          rd++;                               // don't copy open quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3257
          while (*rd != quote) {              // include everything (even spaces) up until quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3258
            if (*rd == 0) {                   // string termination means unmatched string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3259
              jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3260
                          "Unmatched quote in %s\n", name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3261
              return JNI_ERR;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3262
            }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3263
            *wrt++ = *rd++;                   // copy to option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3264
          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3265
          rd++;                               // don't copy close quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3266
        } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3267
          *wrt++ = *rd++;                     // copy to option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3268
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3269
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3270
      // Need to check if we're done before writing a NULL,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3271
      // because the write could be to the byte that rd is pointing to.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3272
      if (*rd++ == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3273
        *wrt = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3274
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3275
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3276
      *wrt = 0;                               // Zero terminate option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3277
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3278
    // Construct JavaVMInitArgs structure and parse as if it was part of the command line
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3279
    JavaVMInitArgs vm_args;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3280
    vm_args.version = JNI_VERSION_1_2;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3281
    vm_args.options = options;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3282
    vm_args.nOptions = i;
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3283
    vm_args.ignoreUnrecognized = IgnoreUnrecognizedVMOptions;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3284
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3285
    if (PrintVMOptions) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3286
      const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3287
      for (int i = 0; i < vm_args.nOptions; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3288
        const JavaVMOption *option = vm_args.options + i;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3289
        if (match_option(option, "-XX:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3290
          logOption(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3291
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3292
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3293
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3294
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3295
    return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, ENVIRON_VAR));
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3296
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3297
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3298
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3299
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3300
void Arguments::set_shared_spaces_flags() {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3301
  if (DumpSharedSpaces) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3302
    if (RequireSharedSpaces) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3303
      warning("cannot dump shared archive while using shared archive");
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3304
    }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3305
    UseSharedSpaces = false;
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3306
#ifdef _LP64
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3307
    if (!UseCompressedOops || !UseCompressedClassPointers) {
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3308
      vm_exit_during_initialization(
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3309
        "Cannot dump shared archive when UseCompressedOops or UseCompressedClassPointers is off.", NULL);
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3310
    }
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3311
  } else {
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3312
    // UseCompressedOops and UseCompressedClassPointers must be on for UseSharedSpaces.
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3313
    if (!UseCompressedOops || !UseCompressedClassPointers) {
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3314
      no_shared_spaces();
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3315
    }
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 19159
diff changeset
  3316
#endif
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3317
  }
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3318
}
6988
282ba493439c 6996136: VM crash in src/share/vm/runtime/virtualspace.cpp:424
iveresov
parents: 6987
diff changeset
  3319
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  3320
#if !INCLUDE_ALL_GCS
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3321
static void force_serial_gc() {
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3322
  FLAG_SET_DEFAULT(UseSerialGC, true);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3323
  FLAG_SET_DEFAULT(CMSIncrementalMode, false);  // special CMS suboption
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3324
  UNSUPPORTED_GC_OPTION(UseG1GC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3325
  UNSUPPORTED_GC_OPTION(UseParallelGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3326
  UNSUPPORTED_GC_OPTION(UseParallelOldGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3327
  UNSUPPORTED_GC_OPTION(UseConcMarkSweepGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3328
  UNSUPPORTED_GC_OPTION(UseParNewGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3329
}
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  3330
#endif // INCLUDE_ALL_GCS
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3331
17375
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3332
// Sharing support
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3333
// Construct the path to the archive
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3334
static char* get_shared_archive_path() {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3335
  char *shared_archive_path;
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3336
  if (SharedArchiveFile == NULL) {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3337
    char jvm_path[JVM_MAXPATHLEN];
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3338
    os::jvm_path(jvm_path, sizeof(jvm_path));
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3339
    char *end = strrchr(jvm_path, *os::file_separator());
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3340
    if (end != NULL) *end = '\0';
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3341
    size_t jvm_path_len = strlen(jvm_path);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3342
    size_t file_sep_len = strlen(os::file_separator());
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3343
    shared_archive_path = NEW_C_HEAP_ARRAY(char, jvm_path_len +
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3344
        file_sep_len + 20, mtInternal);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3345
    if (shared_archive_path != NULL) {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3346
      strncpy(shared_archive_path, jvm_path, jvm_path_len + 1);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3347
      strncat(shared_archive_path, os::file_separator(), file_sep_len);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3348
      strncat(shared_archive_path, "classes.jsa", 11);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3349
    }
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3350
  } else {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3351
    shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(SharedArchiveFile) + 1, mtInternal);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3352
    if (shared_archive_path != NULL) {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3353
      strncpy(shared_archive_path, SharedArchiveFile, strlen(SharedArchiveFile) + 1);
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3354
    }
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3355
  }
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3356
  return shared_archive_path;
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3357
}
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3358
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3359
// Parse entry point called from JNI_CreateJavaVM
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3360
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3361
jint Arguments::parse(const JavaVMInitArgs* args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3362
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3363
  // Remaining part of option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3364
  const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3365
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3366
  // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed.
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3367
  const char* hotspotrc = ".hotspotrc";
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3368
  bool settings_file_specified = false;
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3369
  bool needs_hotspotrc_warning = false;
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3370
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3371
  const char* flags_file;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3372
  int index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3373
  for (index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3374
    const JavaVMOption *option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3375
    if (match_option(option, "-XX:Flags=", &tail)) {
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3376
      flags_file = tail;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3377
      settings_file_specified = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3378
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3379
    if (match_option(option, "-XX:+PrintVMOptions", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3380
      PrintVMOptions = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3381
    }
961
7fb3b13d4205 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents: 670
diff changeset
  3382
    if (match_option(option, "-XX:-PrintVMOptions", &tail)) {
7fb3b13d4205 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents: 670
diff changeset
  3383
      PrintVMOptions = false;
7fb3b13d4205 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents: 670
diff changeset
  3384
    }
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3385
    if (match_option(option, "-XX:+IgnoreUnrecognizedVMOptions", &tail)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3386
      IgnoreUnrecognizedVMOptions = true;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3387
    }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3388
    if (match_option(option, "-XX:-IgnoreUnrecognizedVMOptions", &tail)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3389
      IgnoreUnrecognizedVMOptions = false;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3390
    }
4579
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3391
    if (match_option(option, "-XX:+PrintFlagsInitial", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3392
      CommandLineFlags::printFlags(tty, false);
4579
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3393
      vm_exit(0);
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3394
    }
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3395
    if (match_option(option, "-XX:NativeMemoryTracking", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3396
#if INCLUDE_NMT
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3397
      MemTracker::init_tracking_options(tail);
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3398
#else
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3399
      jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3400
        "Native Memory Tracking is not supported in this VM\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3401
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3402
#endif
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3403
    }
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3404
6438
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3405
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3406
#ifndef PRODUCT
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3407
    if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3408
      CommandLineFlags::printFlags(tty, true);
6438
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3409
      vm_exit(0);
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3410
    }
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3411
#endif
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3412
  }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3413
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3414
  if (IgnoreUnrecognizedVMOptions) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3415
    // uncast const to modify the flag args->ignoreUnrecognized
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3416
    *(jboolean*)(&args->ignoreUnrecognized) = true;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3417
  }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3418
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3419
  // Parse specified settings file
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3420
  if (settings_file_specified) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3421
    if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3422
      return JNI_EINVAL;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3423
    }
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3424
  } else {
12981
b557c10f5444 7110720: Issue with vm config file loadingIssue with vm config file loading
kamg
parents: 11448
diff changeset
  3425
#ifdef ASSERT
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3426
    // Parse default .hotspotrc settings file
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3427
    if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3428
      return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3429
    }
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3430
#else
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3431
    struct stat buf;
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3432
    if (os::stat(hotspotrc, &buf) == 0) {
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3433
      needs_hotspotrc_warning = true;
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3434
    }
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3435
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3436
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3437
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3438
  if (PrintVMOptions) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3439
    for (index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3440
      const JavaVMOption *option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3441
      if (match_option(option, "-XX:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3442
        logOption(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3443
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3444
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3445
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3446
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3447
  // Parse JavaVMInitArgs structure passed in, as well as JAVA_TOOL_OPTIONS and _JAVA_OPTIONS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3448
  jint result = parse_vm_init_args(args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3449
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3450
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3451
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3452
17375
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3453
  // Call get_shared_archive_path() here, after possible SharedArchiveFile option got parsed.
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3454
  SharedArchivePath = get_shared_archive_path();
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3455
  if (SharedArchivePath == NULL) {
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3456
    return JNI_ENOMEM;
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3457
  }
e9554fd82263 8014138: Add VM option to facilitate the writing of CDS tests
hseigel
parents: 17369
diff changeset
  3458
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3459
  // Delay warning until here so that we've had a chance to process
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3460
  // the -XX:-PrintWarnings flag
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3461
  if (needs_hotspotrc_warning) {
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3462
    warning("%s file is present but has been ignored.  "
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3463
            "Run with -XX:Flags=%s to load the file.",
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3464
            hotspotrc, hotspotrc);
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3465
  }
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3466
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3467
#ifdef _ALLBSD_SOURCE  // UseLargePages is not yet supported on BSD.
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3468
  UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages");
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3469
#endif
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3470
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3471
#if INCLUDE_ALL_GCS
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3472
  #if (defined JAVASE_EMBEDDED || defined ARM)
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3473
    UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3474
  #endif
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3475
#endif
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3476
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3477
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3478
  if (TraceBytecodesAt != 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3479
    TraceBytecodes = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3480
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3481
  if (CountCompiledCalls) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3482
    if (UseCounterDecay) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3483
      warning("UseCounterDecay disabled because CountCalls is set");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3484
      UseCounterDecay = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3485
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3486
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3487
#endif // PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3488
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3489
  // JSR 292 is not supported before 1.7
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3490
  if (!JDK_Version::is_gte_jdk17x_version()) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3491
    if (EnableInvokeDynamic) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3492
      if (!FLAG_IS_DEFAULT(EnableInvokeDynamic)) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3493
        warning("JSR 292 is not supported before 1.7.  Disabling support.");
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3494
      }
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3495
      EnableInvokeDynamic = false;
2534
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3496
    }
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3497
  }
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3498
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3499
  if (EnableInvokeDynamic && ScavengeRootsInCode == 0) {
3908
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3500
    if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) {
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3501
      warning("forcing ScavengeRootsInCode non-zero because EnableInvokeDynamic is true");
3908
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3502
    }
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3503
    ScavengeRootsInCode = 1;
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3504
  }
2534
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3505
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3506
  if (PrintGCDetails) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3507
    // Turn on -verbose:gc options as well
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3508
    PrintGC = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3509
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3510
12630
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3511
  if (!JDK_Version::is_gte_jdk18x_version()) {
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3512
    // To avoid changing the log format for 7 updates this flag is only
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3513
    // true by default in JDK8 and above.
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3514
    if (FLAG_IS_DEFAULT(PrintGCCause)) {
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3515
      FLAG_SET_DEFAULT(PrintGCCause, false);
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3516
    }
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3517
  }
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3518
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  3519
  // Set object alignment values.
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  3520
  set_object_alignment();
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  3521
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3522
#if !INCLUDE_ALL_GCS
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  3523
  force_serial_gc();
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3524
#endif // INCLUDE_ALL_GCS
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3525
#if !INCLUDE_CDS
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3526
  if (DumpSharedSpaces || RequireSharedSpaces) {
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3527
    jio_fprintf(defaultStream::error_stream(),
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3528
      "Shared spaces are not supported in this VM\n");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3529
    return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3530
  }
15940
601d4955fa75 8009835: Only produce a warning when -Xshare:auto is explicitly requested
jprovino
parents: 15936
diff changeset
  3531
  if ((UseSharedSpaces && FLAG_IS_CMDLINE(UseSharedSpaces)) || PrintSharedSpaces) {
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3532
    warning("Shared spaces are not supported in this VM");
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3533
    FLAG_SET_DEFAULT(UseSharedSpaces, false);
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3534
    FLAG_SET_DEFAULT(PrintSharedSpaces, false);
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3535
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3536
  no_shared_spaces();
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3537
#endif // INCLUDE_CDS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3538
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  3539
  return JNI_OK;
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  3540
}
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  3541
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  3542
jint Arguments::apply_ergo() {
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19979
diff changeset
  3543
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3544
  // Set flags based on ergonomics.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3545
  set_ergonomics_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3546
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3547
  set_shared_spaces_flags();
4564
55dfb20908d0 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 4560
diff changeset
  3548
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3549
  // Check the GC selections again.
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3550
  if (!check_gc_consistency()) {
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3551
    return JNI_EINVAL;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3552
  }
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3553
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3554
  if (TieredCompilation) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3555
    set_tiered_flags();
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3556
  } else {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3557
    // Check if the policy is valid. Policies 0 and 1 are valid for non-tiered setup.
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3558
    if (CompilationPolicyChoice >= 2) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3559
      vm_exit_during_initialization(
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3560
        "Incompatible compilation policy selected", NULL);
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3561
    }
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3562
  }
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3563
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3564
  // Set heap size based on available physical memory
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3565
  set_heap_size();
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3566
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3567
#if INCLUDE_ALL_GCS
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3568
  // Set per-collector flags
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3569
  if (UseParallelGC || UseParallelOldGC) {
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3570
    set_parallel_gc_flags();
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3571
  } else if (UseConcMarkSweepGC) { // should be done before ParNew check below
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3572
    set_cms_and_parnew_gc_flags();
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3573
  } else if (UseParNewGC) {  // skipped if CMS is set above
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3574
    set_parnew_gc_flags();
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3575
  } else if (UseG1GC) {
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3576
    set_g1_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  3577
  }
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  3578
  check_deprecated_gcs();
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  3579
  check_deprecated_gc_flags();
16596
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3580
  if (AssumeMP && !UseSerialGC) {
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3581
    if (FLAG_IS_DEFAULT(ParallelGCThreads) && ParallelGCThreads == 1) {
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3582
      warning("If the number of processors is expected to increase from one, then"
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3583
              " you should configure the number of parallel GC threads appropriately"
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3584
              " using -XX:ParallelGCThreads=N");
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3585
    }
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3586
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3587
#else // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3588
  assert(verify_serial_gc_flags(), "SerialGC unset");
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3589
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3590
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3591
  // Set bytecode rewriting flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3592
  set_bytecode_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3593
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3594
  // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3595
  set_aggressive_opts_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3596
8309
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3597
  // Turn off biased locking for locking debug mode flags,
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3598
  // which are subtlely different from each other but neither works with
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3599
  // biased locking.
8650
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3600
  if (UseHeavyMonitors
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3601
#ifdef COMPILER1
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3602
      || !UseFastLocking
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3603
#endif // COMPILER1
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3604
    ) {
8309
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3605
    if (!FLAG_IS_DEFAULT(UseBiasedLocking) && UseBiasedLocking) {
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3606
      // flag set to true on command line; warn the user that they
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3607
      // can't enable biased locking here
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3608
      warning("Biased Locking is not supported with locking debug flags"
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3609
              "; ignoring UseBiasedLocking flag." );
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3610
    }
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3611
    UseBiasedLocking = false;
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3612
  }
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3613
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3614
#ifdef CC_INTERP
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3615
  // Clear flags not supported by the C++ interpreter
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3616
  FLAG_SET_DEFAULT(ProfileInterpreter, false);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3617
  FLAG_SET_DEFAULT(UseBiasedLocking, false);
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3618
  LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedOops, false));
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3619
  LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedClassPointers, false));
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3620
#endif // CC_INTERP
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3621
1500
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3622
#ifdef COMPILER2
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3623
  if (!UseBiasedLocking || EmitSync != 0) {
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3624
    UseOptoBiasInlining = false;
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3625
  }
11445
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3626
  if (!EliminateLocks) {
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3627
    EliminateNestedLocks = false;
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3628
  }
15113
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3629
  if (!Inline) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3630
    IncrementalInline = false;
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3631
  }
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3632
#ifndef PRODUCT
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3633
  if (!IncrementalInline) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3634
    AlwaysIncrementalInline = false;
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3635
  }
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3636
#endif
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3637
  if (IncrementalInline && FLAG_IS_DEFAULT(MaxNodeLimit)) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3638
    // incremental inlining: bump MaxNodeLimit
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3639
    FLAG_SET_DEFAULT(MaxNodeLimit, (intx)75000);
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3640
  }
1500
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3641
#endif
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3642
4584
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3643
  if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3644
    warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output");
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3645
    DebugNonSafepoints = true;
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3646
  }
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3647
19979
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3648
  if (FLAG_IS_CMDLINE(CompressedClassSpaceSize) && !UseCompressedClassPointers) {
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3649
    warning("Setting CompressedClassSpaceSize has no effect when compressed class pointers are not used");
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3650
  }
ebe1dbb6e1aa 8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents: 19732
diff changeset
  3651
4736
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3652
#ifndef PRODUCT
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3653
  if (CompileTheWorld) {
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3654
    // Force NmethodSweeper to sweep whole CodeCache each time.
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3655
    if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3656
      NmethodSweepFraction = 1;
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3657
    }
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3658
  }
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3659
#endif
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3660
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3661
  if (PrintCommandLineFlags) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3662
    CommandLineFlags::printSetFlags(tty);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3663
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3664
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3665
  // Apply CPU specific policy for the BiasedLocking
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3666
  if (UseBiasedLocking) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3667
    if (!VM_Version::use_biased_locking() &&
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3668
        !(FLAG_IS_CMDLINE(UseBiasedLocking))) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3669
      UseBiasedLocking = false;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3670
    }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3671
  }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3672
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3673
  // set PauseAtExit if the gamma launcher was used and a debugger is attached
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3674
  // but only if not already set on the commandline
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3675
  if (Arguments::created_by_gamma_launcher() && os::is_debugger_attached()) {
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3676
    bool set = false;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3677
    CommandLineFlags::wasSetOnCmdline("PauseAtExit", &set);
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3678
    if (!set) {
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3679
      FLAG_SET_DEFAULT(PauseAtExit, true);
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3680
    }
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3681
  }
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3682
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3683
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3684
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3685
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3686
jint Arguments::adjust_after_os() {
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3687
#if INCLUDE_ALL_GCS
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3688
  if (UseParallelGC || UseParallelOldGC) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3689
    if (UseNUMA) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3690
      if (FLAG_IS_DEFAULT(MinHeapDeltaBytes)) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3691
        FLAG_SET_DEFAULT(MinHeapDeltaBytes, 64*M);
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3692
      }
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3693
      // For those collectors or operating systems (eg, Windows) that do
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3694
      // not support full UseNUMA, we will map to UseNUMAInterleaving for now
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3695
      UseNUMAInterleaving = true;
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3696
    }
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3697
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3698
#endif // INCLUDE_ALL_GCS
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3699
  return JNI_OK;
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3700
}
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3701
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3702
int Arguments::PropertyList_count(SystemProperty* pl) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3703
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3704
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3705
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3706
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3707
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3708
  return count;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3709
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3710
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3711
const char* Arguments::PropertyList_get_value(SystemProperty *pl, const char* key) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3712
  assert(key != NULL, "just checking");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3713
  SystemProperty* prop;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3714
  for (prop = pl; prop != NULL; prop = prop->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3715
    if (strcmp(key, prop->key()) == 0) return prop->value();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3716
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3717
  return NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3718
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3719
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3720
const char* Arguments::PropertyList_get_key_at(SystemProperty *pl, int index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3721
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3722
  const char* ret_val = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3723
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3724
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3725
    if(count >= index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3726
      ret_val = pl->key();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3727
      break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3728
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3729
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3730
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3731
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3732
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3733
  return ret_val;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3734
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3735
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3736
char* Arguments::PropertyList_get_value_at(SystemProperty* pl, int index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3737
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3738
  char* ret_val = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3739
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3740
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3741
    if(count >= index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3742
      ret_val = pl->value();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3743
      break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3744
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3745
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3746
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3747
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3748
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3749
  return ret_val;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3750
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3751
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3752
void Arguments::PropertyList_add(SystemProperty** plist, SystemProperty *new_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3753
  SystemProperty* p = *plist;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3754
  if (p == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3755
    *plist = new_p;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3756
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3757
    while (p->next() != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3758
      p = p->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3759
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3760
    p->set_next(new_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3761
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3762
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3763
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3764
void Arguments::PropertyList_add(SystemProperty** plist, const char* k, char* v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3765
  if (plist == NULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3766
    return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3767
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3768
  SystemProperty* new_p = new SystemProperty(k, v, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3769
  PropertyList_add(plist, new_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3770
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3771
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3772
// This add maintains unique property key in the list.
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3773
void Arguments::PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3774
  if (plist == NULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3775
    return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3776
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3777
  // If property key exist then update with new value.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3778
  SystemProperty* prop;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3779
  for (prop = *plist; prop != NULL; prop = prop->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3780
    if (strcmp(k, prop->key()) == 0) {
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3781
      if (append) {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3782
        prop->append_value(v);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3783
      } else {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3784
        prop->set_value(v);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3785
      }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3786
      return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3787
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3788
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3789
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3790
  PropertyList_add(plist, k, v);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3791
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3792
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3793
// Copies src into buf, replacing "%%" with "%" and "%p" with pid
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3794
// Returns true if all of the source pointed by src has been copied over to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3795
// the destination buffer pointed by buf. Otherwise, returns false.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3796
// Notes:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3797
// 1. If the length (buflen) of the destination buffer excluding the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3798
// NULL terminator character is not long enough for holding the expanded
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3799
// pid characters, it also returns false instead of returning the partially
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3800
// expanded one.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3801
// 2. The passed in "buflen" should be large enough to hold the null terminator.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3802
bool Arguments::copy_expand_pid(const char* src, size_t srclen,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3803
                                char* buf, size_t buflen) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3804
  const char* p = src;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3805
  char* b = buf;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3806
  const char* src_end = &src[srclen];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3807
  char* buf_end = &buf[buflen - 1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3808
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3809
  while (p < src_end && b < buf_end) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3810
    if (*p == '%') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3811
      switch (*(++p)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3812
      case '%':         // "%%" ==> "%"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3813
        *b++ = *p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3814
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3815
      case 'p':  {       //  "%p" ==> current process id
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3816
        // buf_end points to the character before the last character so
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3817
        // that we could write '\0' to the end of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3818
        size_t buf_sz = buf_end - b + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3819
        int ret = jio_snprintf(b, buf_sz, "%d", os::current_process_id());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3820
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3821
        // if jio_snprintf fails or the buffer is not long enough to hold
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3822
        // the expanded pid, returns false.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3823
        if (ret < 0 || ret >= (int)buf_sz) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3824
          return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3825
        } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3826
          b += ret;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3827
          assert(*b == '\0', "fail in copy_expand_pid");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3828
          if (p == src_end && b == buf_end + 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3829
            // reach the end of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3830
            return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3831
          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3832
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3833
        p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3834
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3835
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3836
      default :
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3837
        *b++ = '%';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3838
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3839
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3840
      *b++ = *p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3841
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3842
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3843
  *b = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3844
  return (p == src_end); // return false if not all of the source was copied
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3845
}