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