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