hotspot/src/share/vm/runtime/arguments.cpp
author johnc
Thu, 09 May 2013 11:16:39 -0700
changeset 17327 4bd0581aa231
parent 17322 35c488005999
child 17392 2f967c0e4246
child 17369 e769777dc844
child 17385 94c6270d1890
permissions -rw-r--r--
7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap Summary: Refactor G1's hot card cache and card counts table into their own files. Simplify the card counts table, including removing the encoding of the card index in each entry. The card counts table now has a 1:1 correspondence with the cards spanned by heap. Space for the card counts table is reserved from virtual memory (rather than C heap) during JVM startup and is committed/expanded when the heap is expanded. Changes were also reviewed-by Vitaly Davidovich. Reviewed-by: tschatzl, jmasa
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
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1904
  status = status && verify_percentage(AdaptiveSizePolicyWeight,
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 && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1965
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1966
  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
  1967
  status = status && check_stack_pages();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1968
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1969
  if (_has_alloc_profile) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1970
    if (UseParallelGC || UseParallelOldGC) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1971
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1972
                  "error:  invalid argument combination.\n"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1973
                  "Allocation profiling (-Xaprof) cannot be used together with "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1974
                  "Parallel GC (-XX:+UseParallelGC or -XX:+UseParallelOldGC).\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1975
      status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1976
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1977
    if (UseConcMarkSweepGC) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1978
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1979
                  "error:  invalid argument combination.\n"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1980
                  "Allocation profiling (-Xaprof) cannot be used together with "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1981
                  "the CMS collector (-XX:+UseConcMarkSweepGC).\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1982
      status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1983
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1984
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1985
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1986
  if (CMSIncrementalMode) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1987
    if (!UseConcMarkSweepGC) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1988
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1989
                  "error:  invalid argument combination.\n"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1990
                  "The CMS collector (-XX:+UseConcMarkSweepGC) must be "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1991
                  "selected in order\nto use CMSIncrementalMode.\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1992
      status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1993
    } else {
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1994
      status = status && verify_percentage(CMSIncrementalDutyCycle,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1995
                                  "CMSIncrementalDutyCycle");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1996
      status = status && verify_percentage(CMSIncrementalDutyCycleMin,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1997
                                  "CMSIncrementalDutyCycleMin");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  1998
      status = status && verify_percentage(CMSIncrementalSafetyFactor,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1999
                                  "CMSIncrementalSafetyFactor");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2000
      status = status && verify_percentage(CMSIncrementalOffset,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2001
                                  "CMSIncrementalOffset");
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2002
      status = status && verify_percentage(CMSExpAvgFactor,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2003
                                  "CMSExpAvgFactor");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2004
      // If it was not set on the command line, set
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2005
      // CMSInitiatingOccupancyFraction to 1 so icms can initiate cycles early.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2006
      if (CMSInitiatingOccupancyFraction < 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2007
        FLAG_SET_DEFAULT(CMSInitiatingOccupancyFraction, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2008
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2009
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2010
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2011
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2012
  // CMS space iteration, which FLSVerifyAllHeapreferences entails,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2013
  // insists that we hold the requisite locks so that the iteration is
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2014
  // MT-safe. For the verification at start-up and shut-down, we don't
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2015
  // yet have a good way of acquiring and releasing these locks,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2016
  // which are not visible at the CollectedHeap level. We want to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2017
  // be able to acquire these locks and then do the iteration rather
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2018
  // than just disable the lock verification. This will be fixed under
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2019
  // bug 4788986.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2020
  if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) {
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2021
    if (VerifyDuringStartup) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2022
      warning("Heap verification at start-up disabled "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2023
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2024
      VerifyDuringStartup = false; // Disable verification at start-up
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2025
    }
16680
960505df90e7 8011343: Add new flag for verifying the heap during startup
johnc
parents: 16610
diff changeset
  2026
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2027
    if (VerifyBeforeExit) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2028
      warning("Heap verification at shutdown disabled "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2029
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2030
      VerifyBeforeExit = false; // Disable verification at shutdown
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2031
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2032
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2033
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2034
  // Note: only executed in non-PRODUCT mode
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2035
  if (!UseAsyncConcMarkSweepGC &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2036
      (ExplicitGCInvokesConcurrent ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2037
       ExplicitGCInvokesConcurrentAndUnloadsClasses)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2038
    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
  2039
                "error: +ExplicitGCInvokesConcurrent[AndUnloadsClasses] conflicts"
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2040
                " with -UseAsyncConcMarkSweepGC");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2041
    status = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2042
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2043
8685
f8edcc58cca7 6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents: 8681
diff changeset
  2044
  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
  2045
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  2046
#if INCLUDE_ALL_GCS
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2047
  if (UseG1GC) {
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2048
    status = status && verify_percentage(InitiatingHeapOccupancyPercent,
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2049
                                         "InitiatingHeapOccupancyPercent");
8073
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2050
    status = status && verify_min_value(G1RefProcDrainInterval, 1,
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2051
                                        "G1RefProcDrainInterval");
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2052
    status = status && verify_min_value((intx)G1ConcMarkStepDurationMillis, 1,
a14dc27842dc 6608385: G1: need to support parallel reference processing
johnc
parents: 7900
diff changeset
  2053
                                        "G1ConcMarkStepDurationMillis");
17327
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2054
    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
  2055
                                       "G1ConcRSHotCardLimit");
4bd0581aa231 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents: 17322
diff changeset
  2056
    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
  2057
                                       "G1ConcRSLogCacheSize");
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2058
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  2059
#endif // INCLUDE_ALL_GCS
5034
a1cec6310394 6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents: 4898
diff changeset
  2060
4885
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2061
  status = status && verify_interval(RefDiscoveryPolicy,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2062
                                     ReferenceProcessor::DiscoveryPolicyMin,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2063
                                     ReferenceProcessor::DiscoveryPolicyMax,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2064
                                     "RefDiscoveryPolicy");
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2065
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2066
  // 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
  2067
  // expression.
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2068
  status = status && verify_interval(TLABWasteTargetPercent,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2069
                                     1, 100, "TLABWasteTargetPercent");
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4736
diff changeset
  2070
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  2071
  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
  2072
13739
35cd081a64ea 7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents: 13728
diff changeset
  2073
  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
  2074
                                      "ClassMetaspaceSize");
35cd081a64ea 7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents: 13728
diff changeset
  2075
14740
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  2076
  status = status && verify_interval(MarkStackSizeMax,
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  2077
                                  1, (max_jint - 1), "MarkStackSizeMax");
1431ef92fed1 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
johnc
parents: 14580
diff changeset
  2078
13757
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2079
#ifdef SPARC
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2080
  if (UseConcMarkSweepGC || UseG1GC) {
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2081
    // Issue a stern warning if the user has explicitly set
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2082
    // UseMemSetInBOT (it is known to cause issues), but allow
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2083
    // use for experimentation and debugging.
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2084
    if (VM_Version::is_sun4v() && UseMemSetInBOT) {
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2085
      assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error");
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2086
      warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2087
          " 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
  2088
    }
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2089
  }
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2090
#endif // SPARC
8740ce357087 7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents: 13739
diff changeset
  2091
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2092
  if (PrintNMTStatistics) {
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2093
#if INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2094
    if (MemTracker::tracking_level() == MemTracker::NMT_off) {
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2095
#endif // INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2096
      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
  2097
      PrintNMTStatistics = false;
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2098
#if INCLUDE_NMT
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2099
    }
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2100
#endif
13861
619cff4bfb8b 7188594: Print statistic collected by NMT with VM flag
zgu
parents: 13739
diff changeset
  2101
  }
619cff4bfb8b 7188594: Print statistic collected by NMT with VM flag
zgu
parents: 13739
diff changeset
  2102
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2103
  return status;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2104
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2105
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2106
bool Arguments::is_bad_option(const JavaVMOption* option, jboolean ignore,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2107
  const char* option_type) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2108
  if (ignore) return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2109
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2110
  const char* spacer = " ";
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2111
  if (option_type == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2112
    option_type = ++spacer; // Set both to the empty string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2113
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2114
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2115
  if (os::obsolete_option(option)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2116
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2117
                "Obsolete %s%soption: %s\n", option_type, spacer,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2118
      option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2119
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2120
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2121
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2122
                "Unrecognized %s%soption: %s\n", option_type, spacer,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2123
      option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2124
    return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2125
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2126
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2127
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2128
static const char* user_assertion_options[] = {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2129
  "-da", "-ea", "-disableassertions", "-enableassertions", 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2130
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2131
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2132
static const char* system_assertion_options[] = {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2133
  "-dsa", "-esa", "-disablesystemassertions", "-enablesystemassertions", 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2134
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2135
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2136
// Return true if any of the strings in null-terminated array 'names' matches.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2137
// If tail_allowed is true, then the tail must begin with a colon; otherwise,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2138
// the option must match exactly.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2139
static bool match_option(const JavaVMOption* option, const char** names, const char** tail,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2140
  bool tail_allowed) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2141
  for (/* empty */; *names != NULL; ++names) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2142
    if (match_option(option, *names, tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2143
      if (**tail == '\0' || tail_allowed && **tail == ':') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2144
        return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2145
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2146
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2147
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2148
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2149
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2150
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2151
bool Arguments::parse_uintx(const char* value,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2152
                            uintx* uintx_arg,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2153
                            uintx min_size) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2154
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2155
  // Check the sign first since atomull() parses only unsigned values.
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2156
  bool value_is_positive = !(*value == '-');
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2157
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2158
  if (value_is_positive) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2159
    julong n;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2160
    bool good_return = atomull(value, &n);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2161
    if (good_return) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2162
      bool above_minimum = n >= min_size;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2163
      bool value_is_too_large = n > max_uintx;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2164
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2165
      if (above_minimum && !value_is_too_large) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2166
        *uintx_arg = n;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2167
        return true;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2168
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2169
    }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2170
  }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2171
  return false;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2172
}
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2173
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2174
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
  2175
                                                  julong* long_arg,
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2176
                                                  julong min_size) {
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2177
  if (!atomull(s, long_arg)) return arg_unreadable;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2178
  return check_memory_size(*long_arg, min_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2179
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2180
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2181
// Parse JavaVMInitArgs structure
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2182
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2183
jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2184
  // For components of the system classpath.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2185
  SysClassPath scp(Arguments::get_sysclasspath());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2186
  bool scp_assembly_required = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2187
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2188
  // Save default settings for some mode flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2189
  Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2190
  Arguments::_UseOnStackReplacement    = UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2191
  Arguments::_ClipInlining             = ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2192
  Arguments::_BackgroundCompilation    = BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2193
9442
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2194
  // Setup flags for mixed which is the default
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2195
  set_mode_flags(_mixed);
6aaa5529f807 7041582: set_mode_flags isn't called without -Xmixed specified
never
parents: 9187
diff changeset
  2196
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2197
  // Parse JAVA_TOOL_OPTIONS environment variable (if present)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2198
  jint result = parse_java_tool_options_environment_variable(&scp, &scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2199
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2200
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2201
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2202
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2203
  // Parse JavaVMInitArgs structure passed in
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2204
  result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, COMMAND_LINE);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2205
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2206
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2207
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2208
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2209
  if (AggressiveOpts) {
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2210
    // Insert alt-rt.jar between user-specified bootclasspath
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2211
    // prefix and the default bootclasspath.  os::set_boot_path()
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2212
    // uses meta_index_dir as the default bootclasspath directory.
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2213
    const char* altclasses_jar = "alt-rt.jar";
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2214
    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
  2215
                                 strlen(altclasses_jar);
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2216
    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
  2217
    strcpy(altclasses_path, get_meta_index_dir());
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2218
    strcat(altclasses_path, altclasses_jar);
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2219
    scp.add_suffix_to_prefix(altclasses_path);
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2220
    scp_assembly_required = true;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2221
    FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal);
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2222
  }
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2223
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2224
  // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2225
  result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2226
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2227
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2228
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2229
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2230
  // Do final processing now that all arguments have been parsed
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2231
  result = finalize_vm_init_args(&scp, scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2232
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2233
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2234
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2235
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2236
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2237
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2238
17096
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2239
// 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
  2240
// 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
  2241
// 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
  2242
// -agentlib
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2243
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
  2244
  char *_name;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2245
  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
  2246
  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
  2247
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2248
  if (is_path) {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2249
    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
  2250
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2251
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2252
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2253
    _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
  2254
    _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
  2255
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2256
    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
  2257
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2258
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2259
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2260
    _name += _len_prefix;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2261
    _len_hprof = strlen(_hprof);
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2262
    _len_jdwp = strlen(_jdwp);
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2263
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2264
    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
  2265
      _name += _len_hprof;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2266
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2267
    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
  2268
      _name += _len_jdwp;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2269
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2270
    else {
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2271
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2272
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2273
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2274
    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
  2275
      return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2276
    }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2277
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2278
    return true;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2279
  }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2280
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2281
  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
  2282
    return true;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2283
  }
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2284
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2285
  return false;
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2286
}
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2287
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2288
jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2289
                                       SysClassPath* scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2290
                                       bool* scp_assembly_required_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2291
                                       FlagValueOrigin origin) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2292
  // Remaining part of option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2293
  const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2294
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2295
  // iterate over arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2296
  for (int index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2297
    bool is_absolute_path = false;  // for -agentpath vs -agentlib
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2298
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2299
    const JavaVMOption* option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2300
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2301
    if (!match_option(option, "-Djava.class.path", &tail) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2302
        !match_option(option, "-Dsun.java.command", &tail) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2303
        !match_option(option, "-Dsun.java.launcher", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2304
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2305
        // add all jvm options to the jvm_args string. This string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2306
        // is used later to set the java.vm.args PerfData string constant.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2307
        // the -Djava.class.path and the -Dsun.java.command options are
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2308
        // omitted from jvm_args string as each have their own PerfData
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2309
        // string constant object.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2310
        build_jvm_args(option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2311
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2312
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2313
    // -verbose:[class/gc/jni]
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2314
    if (match_option(option, "-verbose", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2315
      if (!strcmp(tail, ":class") || !strcmp(tail, "")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2316
        FLAG_SET_CMDLINE(bool, TraceClassLoading, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2317
        FLAG_SET_CMDLINE(bool, TraceClassUnloading, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2318
      } else if (!strcmp(tail, ":gc")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2319
        FLAG_SET_CMDLINE(bool, PrintGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2320
      } else if (!strcmp(tail, ":jni")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2321
        FLAG_SET_CMDLINE(bool, PrintJNIResolving, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2322
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2323
    // -da / -ea / -disableassertions / -enableassertions
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2324
    // These accept an optional class/package name separated by a colon, e.g.,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2325
    // -da:java.lang.Thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2326
    } else if (match_option(option, user_assertion_options, &tail, true)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2327
      bool enable = option->optionString[1] == 'e';     // char after '-' is 'e'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2328
      if (*tail == '\0') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2329
        JavaAssertions::setUserClassDefault(enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2330
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2331
        assert(*tail == ':', "bogus match by match_option()");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2332
        JavaAssertions::addOption(tail + 1, enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2333
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2334
    // -dsa / -esa / -disablesystemassertions / -enablesystemassertions
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2335
    } else if (match_option(option, system_assertion_options, &tail, false)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2336
      bool enable = option->optionString[1] == 'e';     // char after '-' is 'e'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2337
      JavaAssertions::setSystemClassDefault(enable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2338
    // -bootclasspath:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2339
    } else if (match_option(option, "-Xbootclasspath:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2340
      scp_p->reset_path(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2341
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2342
    // -bootclasspath/a:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2343
    } else if (match_option(option, "-Xbootclasspath/a:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2344
      scp_p->add_suffix(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2345
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2346
    // -bootclasspath/p:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2347
    } else if (match_option(option, "-Xbootclasspath/p:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2348
      scp_p->add_prefix(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2349
      *scp_assembly_required_p = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2350
    // -Xrun
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2351
    } else if (match_option(option, "-Xrun", &tail)) {
1907
405ab5976b58 6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents: 1889
diff changeset
  2352
      if (tail != NULL) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2353
        const char* pos = strchr(tail, ':');
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2354
        size_t len = (pos == NULL) ? strlen(tail) : pos - tail;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2355
        char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2356
        name[len] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2357
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2358
        char *options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2359
        if(pos != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2360
          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
  2361
          options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2362
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2363
#if !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2364
        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
  2365
          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
  2366
            "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
  2367
          return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2368
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2369
#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
  2370
        add_init_library(name, options);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2371
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2372
    // -agentlib and -agentpath
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2373
    } else if (match_option(option, "-agentlib:", &tail) ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2374
          (is_absolute_path = match_option(option, "-agentpath:", &tail))) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2375
      if(tail != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2376
        const char* pos = strchr(tail, '=');
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2377
        size_t len = (pos == NULL) ? strlen(tail) : pos - tail;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2378
        char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2379
        name[len] = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2380
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2381
        char *options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2382
        if(pos != NULL) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2383
          options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2384
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2385
#if !INCLUDE_JVMTI
17096
1cfa436cf2fd 8010428: Special -agentpath checks needed with minimal VM to produce proper error message
dholmes
parents: 16686
diff changeset
  2386
        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
  2387
          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
  2388
            "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
  2389
          return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2390
        }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2391
#endif // !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2392
        add_init_agent(name, options, is_absolute_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2393
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2394
    // -javaagent
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2395
    } else if (match_option(option, "-javaagent:", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2396
#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
  2397
      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
  2398
        "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
  2399
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2400
#else
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2401
      if(tail != NULL) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  2402
        char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2403
        add_init_agent("instrument", options, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2404
      }
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2405
#endif // !INCLUDE_JVMTI
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2406
    // -Xnoclassgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2407
    } else if (match_option(option, "-Xnoclassgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2408
      FLAG_SET_CMDLINE(bool, ClassUnloading, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2409
    // -Xincgc: i-CMS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2410
    } else if (match_option(option, "-Xincgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2411
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2412
      FLAG_SET_CMDLINE(bool, CMSIncrementalMode, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2413
    // -Xnoincgc: no i-CMS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2414
    } else if (match_option(option, "-Xnoincgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2415
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2416
      FLAG_SET_CMDLINE(bool, CMSIncrementalMode, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2417
    // -Xconcgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2418
    } else if (match_option(option, "-Xconcgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2419
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2420
    // -Xnoconcgc
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2421
    } else if (match_option(option, "-Xnoconcgc", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2422
      FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2423
    // -Xbatch
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2424
    } else if (match_option(option, "-Xbatch", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2425
      FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2426
    // -Xmn for compatibility with other JVM vendors
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2427
    } else if (match_option(option, "-Xmn", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2428
      julong long_initial_eden_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2429
      ArgsRange errcode = parse_memory_size(tail, &long_initial_eden_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2430
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2431
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2432
                    "Invalid initial eden size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2433
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2434
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2435
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2436
      FLAG_SET_CMDLINE(uintx, MaxNewSize, (uintx)long_initial_eden_size);
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2437
      FLAG_SET_CMDLINE(uintx, NewSize, (uintx)long_initial_eden_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2438
    // -Xms
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2439
    } else if (match_option(option, "-Xms", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2440
      julong long_initial_heap_size = 0;
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2441
      // an initial heap size of 0 means automatically determine
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2442
      ArgsRange errcode = parse_memory_size(tail, &long_initial_heap_size, 0);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2443
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2444
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2445
                    "Invalid initial heap size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2446
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2447
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2448
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2449
      FLAG_SET_CMDLINE(uintx, InitialHeapSize, (uintx)long_initial_heap_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2450
      // 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
  2451
      set_min_heap_size(InitialHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2452
    // -Xmx
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17321
diff changeset
  2453
    } 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
  2454
      julong long_max_heap_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2455
      ArgsRange errcode = parse_memory_size(tail, &long_max_heap_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2456
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2457
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2458
                    "Invalid maximum heap size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2459
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2460
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2461
      }
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2462
      FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2463
    // Xmaxf
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2464
    } else if (match_option(option, "-Xmaxf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2465
      int maxf = (int)(atof(tail) * 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2466
      if (maxf < 0 || maxf > 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2467
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2468
                    "Bad max heap free percentage size: %s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2469
                    option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2470
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2471
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2472
        FLAG_SET_CMDLINE(uintx, MaxHeapFreeRatio, maxf);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2473
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2474
    // Xminf
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2475
    } else if (match_option(option, "-Xminf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2476
      int minf = (int)(atof(tail) * 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2477
      if (minf < 0 || minf > 100) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2478
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2479
                    "Bad min heap free percentage size: %s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2480
                    option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2481
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2482
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2483
        FLAG_SET_CMDLINE(uintx, MinHeapFreeRatio, minf);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2484
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2485
    // -Xss
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2486
    } else if (match_option(option, "-Xss", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2487
      julong long_ThreadStackSize = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2488
      ArgsRange errcode = parse_memory_size(tail, &long_ThreadStackSize, 1000);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2489
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2490
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2491
                    "Invalid thread stack size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2492
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2493
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2494
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2495
      // Internally track ThreadStackSize in units of 1024 bytes.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2496
      FLAG_SET_CMDLINE(intx, ThreadStackSize,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2497
                              round_to((int)long_ThreadStackSize, K) / K);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2498
    // -Xoss
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2499
    } else if (match_option(option, "-Xoss", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2500
          // HotSpot does not have separate native and Java stacks, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2501
    // -Xmaxjitcodesize
7719
ef138e2849eb 6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents: 7427
diff changeset
  2502
    } 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
  2503
               match_option(option, "-XX:ReservedCodeCacheSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2504
      julong long_ReservedCodeCacheSize = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2505
      ArgsRange errcode = parse_memory_size(tail, &long_ReservedCodeCacheSize,
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2506
                                            (size_t)InitialCodeCacheSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2507
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2508
        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
  2509
                    "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
  2510
                    option->optionString, InitialCodeCacheSize/K);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2511
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2512
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2513
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2514
      FLAG_SET_CMDLINE(uintx, ReservedCodeCacheSize, (uintx)long_ReservedCodeCacheSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2515
    // -green
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2516
    } else if (match_option(option, "-green", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2517
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2518
                  "Green threads support not available\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2519
          return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2520
    // -native
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2521
    } else if (match_option(option, "-native", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2522
          // HotSpot always uses native threads, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2523
    // -Xsqnopause
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2524
    } else if (match_option(option, "-Xsqnopause", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2525
          // EVM option, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2526
    // -Xrs
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2527
    } else if (match_option(option, "-Xrs", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2528
          // Classic/EVM option, new functionality
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2529
      FLAG_SET_CMDLINE(bool, ReduceSignalUsage, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2530
    } else if (match_option(option, "-Xusealtsigs", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2531
          // change default internal VM signals used - lower case for back compat
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2532
      FLAG_SET_CMDLINE(bool, UseAltSigs, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2533
    // -Xoptimize
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2534
    } else if (match_option(option, "-Xoptimize", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2535
          // EVM option, ignore silently for compatibility
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2536
    // -Xprof
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2537
    } else if (match_option(option, "-Xprof", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2538
#if INCLUDE_FPROF
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2539
      _has_profile = true;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2540
#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
  2541
      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
  2542
        "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
  2543
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2544
#endif // INCLUDE_FPROF
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2545
    // -Xaprof
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2546
    } else if (match_option(option, "-Xaprof", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2547
      _has_alloc_profile = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2548
    // -Xconcurrentio
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2549
    } else if (match_option(option, "-Xconcurrentio", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2550
      FLAG_SET_CMDLINE(bool, UseLWPSynchronization, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2551
      FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2552
      FLAG_SET_CMDLINE(intx, DeferThrSuspendLoopCount, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2553
      FLAG_SET_CMDLINE(bool, UseTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2554
      FLAG_SET_CMDLINE(uintx, NewSizeThreadIncrease, 16 * K);  // 20Kb per thread added to new generation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2555
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2556
      // -Xinternalversion
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2557
    } else if (match_option(option, "-Xinternalversion", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2558
      jio_fprintf(defaultStream::output_stream(), "%s\n",
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2559
                  VM_Version::internal_vm_info_string());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2560
      vm_exit(0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2561
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2562
    // -Xprintflags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2563
    } else if (match_option(option, "-Xprintflags", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  2564
      CommandLineFlags::printFlags(tty, false);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2565
      vm_exit(0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2566
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2567
    // -D
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2568
    } else if (match_option(option, "-D", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2569
      if (!add_property(tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2570
        return JNI_ENOMEM;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2571
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2572
      // Out of the box management support
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2573
      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
  2574
#if INCLUDE_MANAGEMENT
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2575
        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
  2576
#else
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  2577
        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
  2578
          "-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
  2579
        return JNI_ERR;
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2580
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2581
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2582
    // -Xint
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2583
    } else if (match_option(option, "-Xint", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2584
          set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2585
    // -Xmixed
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2586
    } else if (match_option(option, "-Xmixed", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2587
          set_mode_flags(_mixed);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2588
    // -Xcomp
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2589
    } else if (match_option(option, "-Xcomp", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2590
      // for testing the compiler; turn off all flags that inhibit compilation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2591
          set_mode_flags(_comp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2592
    // -Xshare:dump
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2593
    } else if (match_option(option, "-Xshare:dump", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2594
      FLAG_SET_CMDLINE(bool, DumpSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2595
      set_mode_flags(_int);     // Prevent compilation, which creates objects
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2596
    // -Xshare:on
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2597
    } else if (match_option(option, "-Xshare:on", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2598
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2599
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2600
    // -Xshare:auto
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2601
    } else if (match_option(option, "-Xshare:auto", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2602
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2603
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2604
    // -Xshare:off
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2605
    } else if (match_option(option, "-Xshare:off", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2606
      FLAG_SET_CMDLINE(bool, UseSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2607
      FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2608
    // -Xverify
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2609
    } else if (match_option(option, "-Xverify", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2610
      if (strcmp(tail, ":all") == 0 || strcmp(tail, "") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2611
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2612
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2613
      } else if (strcmp(tail, ":remote") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2614
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2615
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2616
      } else if (strcmp(tail, ":none") == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2617
        FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2618
        FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2619
      } else if (is_bad_option(option, args->ignoreUnrecognized, "verification")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2620
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2621
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2622
    // -Xdebug
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2623
    } else if (match_option(option, "-Xdebug", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2624
      // note this flag has been used, then ignore
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2625
      set_xdebug_mode(true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2626
    // -Xnoagent
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2627
    } else if (match_option(option, "-Xnoagent", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2628
      // For compatibility with classic. HotSpot refuses to load the old style agent.dll.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2629
    } else if (match_option(option, "-Xboundthreads", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2630
      // Bind user level threads to kernel threads (Solaris only)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2631
      FLAG_SET_CMDLINE(bool, UseBoundThreads, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2632
    } else if (match_option(option, "-Xloggc:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2633
      // Redirect GC output to the file. -Xloggc:<filename>
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2634
      // ostream_init_log(), when called will use this filename
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2635
      // to initialize a fileStream.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2636
      _gc_log_filename = strdup(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2637
      FLAG_SET_CMDLINE(bool, PrintGC, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2638
      FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2639
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2640
    // JNI hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2641
    } else if (match_option(option, "-Xcheck", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2642
      if (!strcmp(tail, ":jni")) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2643
#if !INCLUDE_JNI_CHECK
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2644
        warning("JNI CHECKING is not supported in this VM");
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2645
#else
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2646
        CheckJNICalls = true;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  2647
#endif // INCLUDE_JNI_CHECK
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2648
      } else if (is_bad_option(option, args->ignoreUnrecognized,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2649
                                     "check")) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2650
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2651
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2652
    } else if (match_option(option, "vfprintf", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2653
      _vfprintf_hook = CAST_TO_FN_PTR(vfprintf_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2654
    } else if (match_option(option, "exit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2655
      _exit_hook = CAST_TO_FN_PTR(exit_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2656
    } else if (match_option(option, "abort", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2657
      _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2658
    // -XX:+AggressiveHeap
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2659
    } else if (match_option(option, "-XX:+AggressiveHeap", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2660
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2661
      // This option inspects the machine and attempts to set various
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2662
      // parameters to be optimal for long-running, memory allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2663
      // intensive jobs.  It is intended for machines with large
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2664
      // amounts of cpu and memory.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2665
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2666
      // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2667
      // VM, but we may not be able to represent the total physical memory
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2668
      // available (like having 8gb of memory on a box but using a 32bit VM).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2669
      // Thus, we need to make sure we're using a julong for intermediate
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2670
      // calculations.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2671
      julong initHeapSize;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2672
      julong total_memory = os::physical_memory();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2673
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2674
      if (total_memory < (julong)256*M) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2675
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2676
                    "You need at least 256mb of memory to use -XX:+AggressiveHeap\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2677
        vm_exit(1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2678
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2679
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2680
      // The heap size is half of available memory, or (at most)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2681
      // all of possible memory less 160mb (leaving room for the OS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2682
      // when using ISM).  This is the maximum; because adaptive sizing
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2683
      // is turned on below, the actual space used may be smaller.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2684
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2685
      initHeapSize = MIN2(total_memory / (julong)2,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2686
                          total_memory - (julong)160*M);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2687
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 16450
diff changeset
  2688
      initHeapSize = limit_by_allocatable_memory(initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2689
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2690
      if (FLAG_IS_DEFAULT(MaxHeapSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2691
         FLAG_SET_CMDLINE(uintx, MaxHeapSize, initHeapSize);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  2692
         FLAG_SET_CMDLINE(uintx, InitialHeapSize, initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2693
         // 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
  2694
         set_min_heap_size(initHeapSize);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2695
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2696
      if (FLAG_IS_DEFAULT(NewSize)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2697
         // Make the young generation 3/8ths of the total heap.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2698
         FLAG_SET_CMDLINE(uintx, NewSize,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2699
                                ((julong)MaxHeapSize / (julong)8) * (julong)3);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2700
         FLAG_SET_CMDLINE(uintx, MaxNewSize, NewSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2701
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2702
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  2703
#ifndef _ALLBSD_SOURCE  // UseLargePages is not yet supported on BSD.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2704
      FLAG_SET_DEFAULT(UseLargePages, true);
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  2705
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2706
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2707
      // Increase some data structure sizes for efficiency
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2708
      FLAG_SET_CMDLINE(uintx, BaseFootPrintEstimate, MaxHeapSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2709
      FLAG_SET_CMDLINE(bool, ResizeTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2710
      FLAG_SET_CMDLINE(uintx, TLABSize, 256*K);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2711
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2712
      // See the OldPLABSize comment below, but replace 'after promotion'
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2713
      // with 'after copying'.  YoungPLABSize is the size of the survivor
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2714
      // space per-gc-thread buffers.  The default is 4kw.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2715
      FLAG_SET_CMDLINE(uintx, YoungPLABSize, 256*K);      // Note: this is in words
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2716
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2717
      // OldPLABSize is the size of the buffers in the old gen that
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2718
      // UseParallelGC uses to promote live data that doesn't fit in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2719
      // survivor spaces.  At any given time, there's one for each gc thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2720
      // The default size is 1kw. These buffers are rarely used, since the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2721
      // survivor spaces are usually big enough.  For specjbb, however, there
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2722
      // are occasions when there's lots of live data in the young gen
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2723
      // and we end up promoting some of it.  We don't have a definite
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2724
      // explanation for why bumping OldPLABSize helps, but the theory
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2725
      // is that a bigger PLAB results in retaining something like the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2726
      // original allocation order after promotion, which improves mutator
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2727
      // locality.  A minor effect may be that larger PLABs reduce the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2728
      // number of PLAB allocation events during gc.  The value of 8kw
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2729
      // was arrived at by experimenting with specjbb.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2730
      FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K);  // Note: this is in words
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2731
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2732
      // Enable parallel GC and adaptive generation sizing
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2733
      FLAG_SET_CMDLINE(bool, UseParallelGC, true);
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2734
      FLAG_SET_DEFAULT(ParallelGCThreads,
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  2735
                       Abstract_VM_Version::parallel_worker_threads());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2736
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2737
      // Encourage steady state memory management
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2738
      FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2739
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2740
      // This appears to improve mutator locality
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2741
      FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2742
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2743
      // Get around early Solaris scheduling bug
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2744
      // (affinity vs other jobs on system)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2745
      // but disallow DR and offlining (5008695).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2746
      FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2747
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2748
    } else if (match_option(option, "-XX:+NeverTenure", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2749
      // The last option must always win.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2750
      FLAG_SET_CMDLINE(bool, AlwaysTenure, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2751
      FLAG_SET_CMDLINE(bool, NeverTenure, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2752
    } else if (match_option(option, "-XX:+AlwaysTenure", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2753
      // The last option must always win.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2754
      FLAG_SET_CMDLINE(bool, NeverTenure, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2755
      FLAG_SET_CMDLINE(bool, AlwaysTenure, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2756
    } else if (match_option(option, "-XX:+CMSPermGenSweepingEnabled", &tail) ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2757
               match_option(option, "-XX:-CMSPermGenSweepingEnabled", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2758
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2759
        "Please use CMSClassUnloadingEnabled in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2760
        "CMSPermGenSweepingEnabled in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2761
    } else if (match_option(option, "-XX:+UseGCTimeLimit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2762
      FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2763
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2764
        "Please use -XX:+UseGCOverheadLimit in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2765
        "-XX:+UseGCTimeLimit in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2766
    } else if (match_option(option, "-XX:-UseGCTimeLimit", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2767
      FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2768
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2769
        "Please use -XX:-UseGCOverheadLimit in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2770
        "-XX:-UseGCTimeLimit in the future\n");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2771
    // The TLE options are for compatibility with 1.3 and will be
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2772
    // removed without notice in a future release.  These options
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2773
    // are not to be documented.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2774
    } else if (match_option(option, "-XX:MaxTLERatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2775
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2776
    } else if (match_option(option, "-XX:+ResizeTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2777
      FLAG_SET_CMDLINE(bool, ResizeTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2778
    } else if (match_option(option, "-XX:-ResizeTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2779
      FLAG_SET_CMDLINE(bool, ResizeTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2780
    } else if (match_option(option, "-XX:+PrintTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2781
      FLAG_SET_CMDLINE(bool, PrintTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2782
    } else if (match_option(option, "-XX:-PrintTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2783
      FLAG_SET_CMDLINE(bool, PrintTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2784
    } else if (match_option(option, "-XX:TLEFragmentationRatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2785
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2786
    } else if (match_option(option, "-XX:TLESize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2787
      julong long_tlab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2788
      ArgsRange errcode = parse_memory_size(tail, &long_tlab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2789
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2790
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2791
                    "Invalid TLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2792
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2793
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2794
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2795
      FLAG_SET_CMDLINE(uintx, TLABSize, long_tlab_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2796
    } else if (match_option(option, "-XX:TLEThreadRatio=", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2797
      // No longer used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2798
    } else if (match_option(option, "-XX:+UseTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2799
      FLAG_SET_CMDLINE(bool, UseTLAB, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2800
    } else if (match_option(option, "-XX:-UseTLE", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2801
      FLAG_SET_CMDLINE(bool, UseTLAB, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2802
SOLARIS_ONLY(
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2803
    } else if (match_option(option, "-XX:+UsePermISM", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2804
      warning("-XX:+UsePermISM is obsolete.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2805
      FLAG_SET_CMDLINE(bool, UseISM, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2806
    } else if (match_option(option, "-XX:-UsePermISM", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2807
      FLAG_SET_CMDLINE(bool, UseISM, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2808
)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2809
    } else if (match_option(option, "-XX:+DisplayVMOutputToStderr", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2810
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2811
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2812
    } else if (match_option(option, "-XX:+DisplayVMOutputToStdout", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2813
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2814
      FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2815
    } else if (match_option(option, "-XX:+ExtendedDTraceProbes", &tail)) {
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  2816
#if defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2817
      FLAG_SET_CMDLINE(bool, ExtendedDTraceProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2818
      FLAG_SET_CMDLINE(bool, DTraceMethodProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2819
      FLAG_SET_CMDLINE(bool, DTraceAllocProbes, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2820
      FLAG_SET_CMDLINE(bool, DTraceMonitorProbes, true);
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  2821
#else // defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2822
      jio_fprintf(defaultStream::error_stream(),
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  2823
                  "ExtendedDTraceProbes flag is not applicable for this configuration\n");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2824
      return JNI_EINVAL;
10739
91935236600e 7098194: integrate macosx-port changes
dcubed
parents: 10565
diff changeset
  2825
#endif // defined(DTRACE_ENABLED)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2826
#ifdef ASSERT
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2827
    } else if (match_option(option, "-XX:+FullGCALot", &tail)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2828
      FLAG_SET_CMDLINE(bool, FullGCALot, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2829
      // disable scavenge before parallel mark-compact
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2830
      FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2831
#endif
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2832
    } else if (match_option(option, "-XX:CMSParPromoteBlocksToClaim=", &tail)) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2833
      julong cms_blocks_to_claim = (julong)atol(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2834
      FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2835
      jio_fprintf(defaultStream::error_stream(),
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2836
        "Please use -XX:OldPLABSize in place of "
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2837
        "-XX:CMSParPromoteBlocksToClaim in the future\n");
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2838
    } else if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) {
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2839
      julong cms_blocks_to_claim = (julong)atol(tail);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2840
      FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim);
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2841
      jio_fprintf(defaultStream::error_stream(),
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2842
        "Please use -XX:OldPLABSize in place of "
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2843
        "-XX:ParCMSPromoteBlocksToClaim in the future\n");
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2844
    } else if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2845
      julong old_plab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2846
      ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2847
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2848
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2849
                    "Invalid old PLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2850
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2851
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2852
      }
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2853
      FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2854
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2855
                  "Please use -XX:OldPLABSize in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2856
                  "-XX:ParallelGCOldGenAllocBufferSize in the future\n");
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2857
    } else if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) {
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2858
      julong young_plab_size = 0;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2859
      ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2860
      if (errcode != arg_in_range) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2861
        jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2862
                    "Invalid young PLAB size: %s\n", option->optionString);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2863
        describe_range_error(errcode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2864
        return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2865
      }
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1670
diff changeset
  2866
      FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2867
      jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2868
                  "Please use -XX:YoungPLABSize in place of "
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2869
                  "-XX:ParallelGCToSpaceAllocBufferSize in the future\n");
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2870
    } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) ||
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2871
               match_option(option, "-XX:G1MarkStackSize=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2872
      julong stack_size = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2873
      ArgsRange errcode = parse_memory_size(tail, &stack_size, 1);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2874
      if (errcode != arg_in_range) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2875
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2876
                    "Invalid mark stack size: %s\n", option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2877
        describe_range_error(errcode);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2878
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2879
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2880
      FLAG_SET_CMDLINE(uintx, MarkStackSize, stack_size);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2881
    } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2882
      julong max_stack_size = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2883
      ArgsRange errcode = parse_memory_size(tail, &max_stack_size, 1);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2884
      if (errcode != arg_in_range) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2885
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2886
                    "Invalid maximum mark stack size: %s\n",
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2887
                    option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2888
        describe_range_error(errcode);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2889
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2890
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2891
      FLAG_SET_CMDLINE(uintx, MarkStackSizeMax, max_stack_size);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2892
    } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) ||
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2893
               match_option(option, "-XX:ParallelCMSThreads=", &tail)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2894
      uintx conc_threads = 0;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2895
      if (!parse_uintx(tail, &conc_threads, 1)) {
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2896
        jio_fprintf(defaultStream::error_stream(),
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2897
                    "Invalid concurrent threads: %s\n", option->optionString);
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2898
        return JNI_EINVAL;
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2899
      }
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 5034
diff changeset
  2900
      FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads);
13197
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2901
    } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) {
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2902
      julong max_direct_memory_size = 0;
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2903
      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
  2904
      if (errcode != arg_in_range) {
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2905
        jio_fprintf(defaultStream::error_stream(),
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2906
                    "Invalid maximum direct memory size: %s\n",
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2907
                    option->optionString);
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2908
        describe_range_error(errcode);
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2909
        return JNI_EINVAL;
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2910
      }
b552dfeffb3c 7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents: 13196
diff changeset
  2911
      FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size);
14116
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  2912
    } else if (match_option(option, "-XX:+UseVMInterruptibleIO", &tail)) {
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  2913
      // NOTE! In JDK 9, the UseVMInterruptibleIO flag will completely go
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  2914
      //       away and will cause VM initialization failures!
103b29e77974 7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents: 13978
diff changeset
  2915
      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
  2916
      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
  2917
#if !INCLUDE_MANAGEMENT
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2918
    } 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
  2919
        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
  2920
          "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
  2921
        return JNI_ERR;
15757
c8bc1070b876 8003539: Minimal VM don't react to -Dcom.sun.management and -XX:+ManagementServer
jprovino
parents: 15483
diff changeset
  2922
#endif // INCLUDE_MANAGEMENT
4574
b2d5b0975515 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 4444
diff changeset
  2923
    } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2924
      // Skip -XX:Flags= since that case has already been handled
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2925
      if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2926
        if (!process_argument(tail, args->ignoreUnrecognized, origin)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2927
          return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2928
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2929
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2930
    // Unknown option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2931
    } else if (is_bad_option(option, args->ignoreUnrecognized)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2932
      return JNI_ERR;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2933
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2934
  }
9990
c8683968c01b 6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents: 9450
diff changeset
  2935
1602
6859fd21ba2b 6554406: Change switch UseVMInterruptibleIO default to false (sol)
xlu
parents: 1500
diff changeset
  2936
  // 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
  2937
  // when working with older JDKs.
6174
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2938
#ifdef LINUX
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2939
 if (JDK_Version::current().compare_major(6) <= 0 &&
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2940
      FLAG_IS_DEFAULT(UseLinuxPosixThreadCPUClocks)) {
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2941
    FLAG_SET_DEFAULT(UseLinuxPosixThreadCPUClocks, false);
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2942
  }
24cec171092f 6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents: 5908
diff changeset
  2943
#endif // LINUX
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2944
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2945
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2946
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2947
jint Arguments::finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2948
  // This must be done after all -D arguments have been processed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2949
  scp_p->expand_endorsed();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2950
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2951
  if (scp_assembly_required || scp_p->get_endorsed() != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2952
    // Assemble the bootclasspath elements into the final path.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2953
    Arguments::set_sysclasspath(scp_p->combined_path());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2954
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2955
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2956
  // This must be done after all arguments have been processed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2957
  // java_compiler() true means set to "NONE" or empty.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2958
  if (java_compiler() && !xdebug_mode()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2959
    // For backwards compatibility, we switch to interpreted mode if
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2960
    // -Djava.compiler="NONE" or "" is specified AND "-Xdebug" was
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2961
    // not specified.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2962
    set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2963
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2964
  if (CompileThreshold == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2965
    set_mode_flags(_int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2966
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2967
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2968
#ifndef COMPILER2
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2969
  // Don't degrade server performance for footprint
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2970
  if (FLAG_IS_DEFAULT(UseLargePages) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2971
      MaxHeapSize < LargePageHeapSizeThreshold) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2972
    // No need for large granularity pages w/small heaps.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2973
    // Note that large pages are enabled/disabled for both the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2974
    // Java heap and the code cache.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2975
    FLAG_SET_DEFAULT(UseLargePages, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2976
    SOLARIS_ONLY(FLAG_SET_DEFAULT(UseMPSS, false));
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2977
    SOLARIS_ONLY(FLAG_SET_DEFAULT(UseISM, false));
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2978
  }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  2979
4892
e977b527544a 6923002: assert(false,"this call site should not be polymorphic")
kvn
parents: 4736
diff changeset
  2980
  // Tiered compilation is undefined with C1.
e977b527544a 6923002: assert(false,"this call site should not be polymorphic")
kvn
parents: 4736
diff changeset
  2981
  TieredCompilation = false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2982
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2983
  if (!FLAG_IS_DEFAULT(OptoLoopAlignment) && FLAG_IS_DEFAULT(MaxLoopPad)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2984
    FLAG_SET_DEFAULT(MaxLoopPad, OptoLoopAlignment-1);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2985
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2986
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  2987
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2988
  // 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
  2989
  // to be true unless the property has already been set.
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2990
  // 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
  2991
  if (os::is_headless_jre()) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2992
    const char* headless = Arguments::get_property("java.awt.headless");
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2993
    if (headless == NULL) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2994
      char envbuffer[128];
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2995
      if (!os::getenv("JAVA_AWT_HEADLESS", envbuffer, sizeof(envbuffer))) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2996
        if (!add_property("java.awt.headless=true")) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2997
          return JNI_ENOMEM;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2998
        }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  2999
      } else {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3000
        char buffer[256];
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3001
        strcpy(buffer, "java.awt.headless=");
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3002
        strcat(buffer, envbuffer);
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3003
        if (!add_property(buffer)) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3004
          return JNI_ENOMEM;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3005
        }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3006
      }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3007
    }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3008
  }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3009
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3010
  if (!check_vm_args_consistency()) {
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
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3014
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3015
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3016
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3017
jint Arguments::parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3018
  return parse_options_environment_variable("_JAVA_OPTIONS", scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3019
                                            scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3020
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3021
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3022
jint Arguments::parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3023
  return parse_options_environment_variable("JAVA_TOOL_OPTIONS", scp_p,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3024
                                            scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3025
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3026
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3027
jint Arguments::parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3028
  const int N_MAX_OPTIONS = 64;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3029
  const int OPTION_BUFFER_SIZE = 1024;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3030
  char buffer[OPTION_BUFFER_SIZE];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3031
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3032
  // The variable will be ignored if it exceeds the length of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3033
  // Don't check this variable if user has special privileges
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3034
  // (e.g. unix su command).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3035
  if (os::getenv(name, buffer, sizeof(buffer)) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3036
      !os::have_special_privileges()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3037
    JavaVMOption options[N_MAX_OPTIONS];      // Construct option array
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3038
    jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3039
                "Picked up %s: %s\n", name, buffer);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3040
    char* rd = buffer;                        // pointer to the input string (rd)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3041
    int i;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3042
    for (i = 0; i < N_MAX_OPTIONS;) {         // repeat for all options in the input string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3043
      while (isspace(*rd)) rd++;              // skip whitespace
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3044
      if (*rd == 0) break;                    // we re done when the input string is read completely
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3045
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3046
      // The output, option string, overwrites the input string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3047
      // Because of quoting, the pointer to the option string (wrt) may lag the pointer to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3048
      // input string (rd).
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3049
      char* wrt = rd;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3050
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3051
      options[i++].optionString = wrt;        // Fill in option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3052
      while (*rd != 0 && !isspace(*rd)) {     // unquoted strings terminate with a space or NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3053
        if (*rd == '\'' || *rd == '"') {      // handle a quoted string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3054
          int quote = *rd;                    // matching quote to look for
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3055
          rd++;                               // don't copy open quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3056
          while (*rd != quote) {              // include everything (even spaces) up until quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3057
            if (*rd == 0) {                   // string termination means unmatched string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3058
              jio_fprintf(defaultStream::error_stream(),
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3059
                          "Unmatched quote in %s\n", name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3060
              return JNI_ERR;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3061
            }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3062
            *wrt++ = *rd++;                   // copy to option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3063
          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3064
          rd++;                               // don't copy close quote
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3065
        } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3066
          *wrt++ = *rd++;                     // copy to option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3067
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3068
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3069
      // Need to check if we're done before writing a NULL,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3070
      // because the write could be to the byte that rd is pointing to.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3071
      if (*rd++ == 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3072
        *wrt = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3073
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3074
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3075
      *wrt = 0;                               // Zero terminate option
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3076
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3077
    // Construct JavaVMInitArgs structure and parse as if it was part of the command line
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3078
    JavaVMInitArgs vm_args;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3079
    vm_args.version = JNI_VERSION_1_2;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3080
    vm_args.options = options;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3081
    vm_args.nOptions = i;
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3082
    vm_args.ignoreUnrecognized = IgnoreUnrecognizedVMOptions;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3083
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3084
    if (PrintVMOptions) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3085
      const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3086
      for (int i = 0; i < vm_args.nOptions; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3087
        const JavaVMOption *option = vm_args.options + i;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3088
        if (match_option(option, "-XX:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3089
          logOption(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3090
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3091
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3092
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3093
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3094
    return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, ENVIRON_VAR));
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3095
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3096
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3097
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3098
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3099
void Arguments::set_shared_spaces_flags() {
8727
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3100
  const bool must_share = DumpSharedSpaces || RequireSharedSpaces;
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3101
  const bool might_share = must_share || UseSharedSpaces;
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3102
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3103
  // 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
  3104
  // 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
  3105
  // initialization, this restriction can probably be lifted.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3106
  // ??? UseLargePages might be okay now
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3107
  const bool cannot_share = UseCompressedOops ||
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3108
                            (UseLargePages && FLAG_IS_CMDLINE(UseLargePages));
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3109
  if (cannot_share) {
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3110
    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
  3111
        warning("disabling large pages %s"
8727
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3112
                "because of %s", "" LP64_ONLY("and compressed oops "),
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3113
                DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on");
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3114
        FLAG_SET_CMDLINE(bool, UseLargePages, false);
1642a45f024f 6962930: make the string table size configurable
jcoomes
parents: 8725
diff changeset
  3115
        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
  3116
        LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedKlassPointers, false));
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3117
    } else {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3118
      // 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
  3119
      if (UseSharedSpaces && Verbose) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3120
        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
  3121
                 "" LP64_ONLY(" and/or compressed oops"));
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3122
      }
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3123
      no_shared_spaces();
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3124
    }
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3125
  } else if (UseLargePages && might_share) {
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3126
    // 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
  3127
    // there may not even be a shared archive to use.
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3128
    FLAG_SET_DEFAULT(UseLargePages, false);
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3129
  }
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3130
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3131
  if (DumpSharedSpaces) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3132
    if (RequireSharedSpaces) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3133
      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
  3134
    }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3135
    UseSharedSpaces = false;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3136
  }
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3137
}
6988
282ba493439c 6996136: VM crash in src/share/vm/runtime/virtualspace.cpp:424
iveresov
parents: 6987
diff changeset
  3138
10020
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3139
// 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
  3140
// were explicitly requested on the command-line
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3141
#define UNSUPPORTED_OPTION(opt, description)                    \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3142
do {                                                            \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3143
  if (opt) {                                                    \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3144
    if (FLAG_IS_CMDLINE(opt)) {                                 \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3145
      warning(description " is disabled in this release.");     \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3146
    }                                                           \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3147
    FLAG_SET_DEFAULT(opt, false);                               \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3148
  }                                                             \
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3149
} while(0)
9325b4244ec4 7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents: 9992
diff changeset
  3150
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3151
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3152
#define UNSUPPORTED_GC_OPTION(gc)                                     \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3153
do {                                                                  \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3154
  if (gc) {                                                           \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3155
    if (FLAG_IS_CMDLINE(gc)) {                                        \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3156
      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
  3157
    }                                                                 \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3158
    FLAG_SET_DEFAULT(gc, false);                                      \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3159
  }                                                                   \
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3160
} while(0)
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3161
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  3162
#if !INCLUDE_ALL_GCS
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3163
static void force_serial_gc() {
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3164
  FLAG_SET_DEFAULT(UseSerialGC, true);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3165
  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
  3166
  UNSUPPORTED_GC_OPTION(UseG1GC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3167
  UNSUPPORTED_GC_OPTION(UseParallelGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3168
  UNSUPPORTED_GC_OPTION(UseParallelOldGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3169
  UNSUPPORTED_GC_OPTION(UseConcMarkSweepGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3170
  UNSUPPORTED_GC_OPTION(UseParNewGC);
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3171
}
16670
4af09aff4237 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 16598
diff changeset
  3172
#endif // INCLUDE_ALL_GCS
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3173
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3174
// Parse entry point called from JNI_CreateJavaVM
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3175
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3176
jint Arguments::parse(const JavaVMInitArgs* args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3177
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3178
  // Sharing support
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3179
  // Construct the path to the archive
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3180
  char jvm_path[JVM_MAXPATHLEN];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3181
  os::jvm_path(jvm_path, sizeof(jvm_path));
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3182
  char *end = strrchr(jvm_path, *os::file_separator());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3183
  if (end != NULL) *end = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3184
  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
  3185
      strlen(os::file_separator()) + 20, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3186
  if (shared_archive_path == NULL) return JNI_ENOMEM;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3187
  strcpy(shared_archive_path, jvm_path);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3188
  strcat(shared_archive_path, os::file_separator());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3189
  strcat(shared_archive_path, "classes");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3190
  strcat(shared_archive_path, ".jsa");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3191
  SharedArchivePath = shared_archive_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3192
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3193
  // Remaining part of option string
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3194
  const char* tail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3195
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3196
  // 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
  3197
  const char* hotspotrc = ".hotspotrc";
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3198
  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
  3199
  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
  3200
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3201
  const char* flags_file;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3202
  int index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3203
  for (index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3204
    const JavaVMOption *option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3205
    if (match_option(option, "-XX:Flags=", &tail)) {
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3206
      flags_file = tail;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3207
      settings_file_specified = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3208
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3209
    if (match_option(option, "-XX:+PrintVMOptions", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3210
      PrintVMOptions = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3211
    }
961
7fb3b13d4205 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents: 670
diff changeset
  3212
    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
  3213
      PrintVMOptions = false;
7fb3b13d4205 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents: 670
diff changeset
  3214
    }
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3215
    if (match_option(option, "-XX:+IgnoreUnrecognizedVMOptions", &tail)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3216
      IgnoreUnrecognizedVMOptions = true;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3217
    }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3218
    if (match_option(option, "-XX:-IgnoreUnrecognizedVMOptions", &tail)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3219
      IgnoreUnrecognizedVMOptions = false;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3220
    }
4579
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3221
    if (match_option(option, "-XX:+PrintFlagsInitial", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3222
      CommandLineFlags::printFlags(tty, false);
4579
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3223
      vm_exit(0);
62478db2dc78 6914622: Print values of all flags for product VM
kvn
parents: 4564
diff changeset
  3224
    }
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3225
    if (match_option(option, "-XX:NativeMemoryTracking", &tail)) {
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3226
#if INCLUDE_NMT
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3227
      MemTracker::init_tracking_options(tail);
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3228
#else
15936
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3229
      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
  3230
        "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
  3231
      return JNI_ERR;
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3232
#endif
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3233
    }
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12631
diff changeset
  3234
6438
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3235
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3236
#ifndef PRODUCT
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3237
    if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3238
      CommandLineFlags::printFlags(tty, true);
6438
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3239
      vm_exit(0);
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3240
    }
ace4f8100e90 6979444: add command line option to print command line flags descriptions
ikrylov
parents: 6415
diff changeset
  3241
#endif
2028
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3242
  }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3243
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3244
  if (IgnoreUnrecognizedVMOptions) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3245
    // uncast const to modify the flag args->ignoreUnrecognized
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3246
    *(jboolean*)(&args->ignoreUnrecognized) = true;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3247
  }
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3248
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3249
  // Parse specified settings file
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3250
  if (settings_file_specified) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3251
    if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) {
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3252
      return JNI_EINVAL;
04fa713b25f9 6788376: allow to ignore unrecognized VM options
kvn
parents: 1676
diff changeset
  3253
    }
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3254
  } else {
12981
b557c10f5444 7110720: Issue with vm config file loadingIssue with vm config file loading
kamg
parents: 11448
diff changeset
  3255
#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
  3256
    // Parse default .hotspotrc settings file
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3257
    if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3258
      return JNI_EINVAL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3259
    }
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3260
#else
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3261
    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
  3262
    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
  3263
      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
  3264
    }
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3265
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3266
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3267
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3268
  if (PrintVMOptions) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3269
    for (index = 0; index < args->nOptions; index++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3270
      const JavaVMOption *option = args->options + index;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3271
      if (match_option(option, "-XX:", &tail)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3272
        logOption(tail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3273
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3274
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3275
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3276
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3277
  // Parse JavaVMInitArgs structure passed in, as well as JAVA_TOOL_OPTIONS and _JAVA_OPTIONS
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3278
  jint result = parse_vm_init_args(args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3279
  if (result != JNI_OK) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3280
    return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3281
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3282
13194
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3283
  // 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
  3284
  // 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
  3285
  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
  3286
    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
  3287
            "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
  3288
            hotspotrc, hotspotrc);
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3289
  }
603ef19adcb8 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents: 12989
diff changeset
  3290
14285
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3291
#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
  3292
  UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages");
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3293
#endif
afa3d693e0f6 7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents: 14284
diff changeset
  3294
15762
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3295
#if INCLUDE_ALL_GCS
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3296
  #if (defined JAVASE_EMBEDDED || defined ARM)
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3297
    UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3298
  #endif
25f878aa5cd8 8003581: UseG1GC is not properly accounted for by INCLUDE_ALTERNATE_GCS
jprovino
parents: 15759
diff changeset
  3299
#endif
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3300
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3301
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3302
  if (TraceBytecodesAt != 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3303
    TraceBytecodes = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3304
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3305
  if (CountCompiledCalls) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3306
    if (UseCounterDecay) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3307
      warning("UseCounterDecay disabled because CountCalls is set");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3308
      UseCounterDecay = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3309
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3310
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3311
#endif // PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3312
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3313
  // 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
  3314
  if (!JDK_Version::is_gte_jdk17x_version()) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3315
    if (EnableInvokeDynamic) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3316
      if (!FLAG_IS_DEFAULT(EnableInvokeDynamic)) {
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3317
        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
  3318
      }
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3319
      EnableInvokeDynamic = false;
2534
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3320
    }
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3321
  }
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3322
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3323
  if (EnableInvokeDynamic && ScavengeRootsInCode == 0) {
3908
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3324
    if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) {
8883
5569135acca3 6817525: turn on method handle functionality by default for JSR 292
twisti
parents: 8727
diff changeset
  3325
      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
  3326
    }
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3327
    ScavengeRootsInCode = 1;
24b55ad4c228 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 3687
diff changeset
  3328
  }
2534
08dac9ce0cd7 6655638: dynamic languages need method handles
jrose
parents: 2348
diff changeset
  3329
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3330
  if (PrintGCDetails) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3331
    // Turn on -verbose:gc options as well
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3332
    PrintGC = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3333
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3334
12630
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3335
  if (!JDK_Version::is_gte_jdk18x_version()) {
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3336
    // 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
  3337
    // true by default in JDK8 and above.
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3338
    if (FLAG_IS_DEFAULT(PrintGCCause)) {
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3339
      FLAG_SET_DEFAULT(PrintGCCause, false);
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3340
    }
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3341
  }
ddf6ee008138 7166894: Add gc cause to GC logging for all collectors
brutisso
parents: 12498
diff changeset
  3342
5694
1e0532a6abff 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 5419
diff changeset
  3343
  // 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
  3344
  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
  3345
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3346
#if !INCLUDE_ALL_GCS
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 4013
diff changeset
  3347
  force_serial_gc();
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3348
#endif // INCLUDE_ALL_GCS
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3349
#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
  3350
  if (DumpSharedSpaces || RequireSharedSpaces) {
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3351
    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
  3352
      "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
  3353
    return JNI_ERR;
4fda1079e8a3 8008310: Some adjustments needed to minimal VM warnings and errors for unsupported command line options
jprovino
parents: 15800
diff changeset
  3354
  }
15940
601d4955fa75 8009835: Only produce a warning when -Xshare:auto is explicitly requested
jprovino
parents: 15936
diff changeset
  3355
  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
  3356
    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
  3357
    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
  3358
    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
  3359
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3360
  no_shared_spaces();
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3361
#endif // INCLUDE_CDS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3362
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3363
  // Set flags based on ergonomics.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3364
  set_ergonomics_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3365
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
  3366
  set_shared_spaces_flags();
4564
55dfb20908d0 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 4560
diff changeset
  3367
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3368
  // Check the GC selections again.
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3369
  if (!check_gc_consistency()) {
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3370
    return JNI_EINVAL;
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3371
  }
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
  3372
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3373
  if (TieredCompilation) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3374
    set_tiered_flags();
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3375
  } else {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3376
    // 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
  3377
    if (CompilationPolicyChoice >= 2) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3378
      vm_exit_during_initialization(
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3379
        "Incompatible compilation policy selected", NULL);
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3380
    }
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3381
  }
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6434
diff changeset
  3382
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3383
  // Set heap size based on available physical memory
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3384
  set_heap_size();
13975
2f7431485cfa 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 13925
diff changeset
  3385
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3386
#if INCLUDE_ALL_GCS
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3387
  // Set per-collector flags
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3388
  if (UseParallelGC || UseParallelOldGC) {
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3389
    set_parallel_gc_flags();
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3390
  } 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
  3391
    set_cms_and_parnew_gc_flags();
8687
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3392
  } 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
  3393
    set_parnew_gc_flags();
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3394
  } else if (UseG1GC) {
264727307495 6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents: 8685
diff changeset
  3395
    set_g1_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 382
diff changeset
  3396
  }
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 15091
diff changeset
  3397
  check_deprecated_gcs();
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15800
diff changeset
  3398
  check_deprecated_gc_flags();
16596
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3399
  if (AssumeMP && !UseSerialGC) {
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3400
    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
  3401
      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
  3402
              " 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
  3403
              " using -XX:ParallelGCThreads=N");
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3404
    }
905d4419a089 2178143: JVM crashes if the number of bound CPUs changed during runtime
minqi
parents: 16445
diff changeset
  3405
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3406
#else // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3407
  assert(verify_serial_gc_flags(), "SerialGC unset");
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3408
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3409
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3410
  // Set bytecode rewriting flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3411
  set_bytecode_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3412
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3413
  // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3414
  set_aggressive_opts_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3415
8309
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3416
  // Turn off biased locking for locking debug mode flags,
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3417
  // 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
  3418
  // biased locking.
8650
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3419
  if (UseHeavyMonitors
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3420
#ifdef COMPILER1
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3421
      || !UseFastLocking
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3422
#endif // COMPILER1
45f6a91a52de 7022999: Can't build with FORCE_TIERED=0
coleenp
parents: 8476
diff changeset
  3423
    ) {
8309
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3424
    if (!FLAG_IS_DEFAULT(UseBiasedLocking) && UseBiasedLocking) {
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3425
      // 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
  3426
      // can't enable biased locking here
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3427
      warning("Biased Locking is not supported with locking debug flags"
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3428
              "; ignoring UseBiasedLocking flag." );
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3429
    }
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3430
    UseBiasedLocking = false;
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3431
  }
e5c9c706242b 6840152: JVM crashes when heavyweight monitors are used
coleenp
parents: 8075
diff changeset
  3432
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3433
#ifdef CC_INTERP
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3434
  // Clear flags not supported by the C++ interpreter
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3435
  FLAG_SET_DEFAULT(ProfileInterpreter, false);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3436
  FLAG_SET_DEFAULT(UseBiasedLocking, false);
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3437
  LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedOops, false));
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13516
diff changeset
  3438
  LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedKlassPointers, false));
4560
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3439
#endif // CC_INTERP
b6f7db60cb24 6909153: Fix broken options on Zero
twisti
parents: 4444
diff changeset
  3440
1500
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3441
#ifdef COMPILER2
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3442
  if (!UseBiasedLocking || EmitSync != 0) {
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3443
    UseOptoBiasInlining = false;
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3444
  }
11445
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3445
  if (!EliminateLocks) {
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3446
    EliminateNestedLocks = false;
3c768dca60f5 7125896: Eliminate nested locks
kvn
parents: 11426
diff changeset
  3447
  }
15113
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3448
  if (!Inline) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3449
    IncrementalInline = false;
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3450
  }
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3451
#ifndef PRODUCT
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3452
  if (!IncrementalInline) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3453
    AlwaysIncrementalInline = false;
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3454
  }
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3455
#endif
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3456
  if (IncrementalInline && FLAG_IS_DEFAULT(MaxNodeLimit)) {
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3457
    // incremental inlining: bump MaxNodeLimit
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3458
    FLAG_SET_DEFAULT(MaxNodeLimit, (intx)75000);
823590505eb4 8005071: Incremental inlining for JSR 292
roland
parents: 14740
diff changeset
  3459
  }
1500
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3460
#endif
bea9a90f3e8f 6462850: generate biased locking code in C2 ideal graph
kvn
parents: 1496
diff changeset
  3461
4584
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3462
  if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3463
    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
  3464
    DebugNonSafepoints = true;
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3465
  }
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4579
diff changeset
  3466
4736
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3467
#ifndef PRODUCT
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3468
  if (CompileTheWorld) {
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3469
    // 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
  3470
    if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3471
      NmethodSweepFraction = 1;
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3472
    }
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3473
  }
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3474
#endif
e091227926da 6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents: 4590
diff changeset
  3475
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3476
  if (PrintCommandLineFlags) {
11441
a89f443814cd 7120511: Add diagnostic commands
fparain
parents: 11187
diff changeset
  3477
    CommandLineFlags::printSetFlags(tty);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3478
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3479
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3480
  // Apply CPU specific policy for the BiasedLocking
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3481
  if (UseBiasedLocking) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3482
    if (!VM_Version::use_biased_locking() &&
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3483
        !(FLAG_IS_CMDLINE(UseBiasedLocking))) {
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3484
      UseBiasedLocking = false;
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3485
    }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3486
  }
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 6174
diff changeset
  3487
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3488
  // 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
  3489
  // 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
  3490
  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
  3491
    bool set = false;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3492
    CommandLineFlags::wasSetOnCmdline("PauseAtExit", &set);
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3493
    if (!set) {
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3494
      FLAG_SET_DEFAULT(PauseAtExit, true);
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3495
    }
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3496
  }
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 8313
diff changeset
  3497
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3498
  return JNI_OK;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3499
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3500
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3501
jint Arguments::adjust_after_os() {
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3502
#if INCLUDE_ALL_GCS
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3503
  if (UseParallelGC || UseParallelOldGC) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3504
    if (UseNUMA) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3505
      if (FLAG_IS_DEFAULT(MinHeapDeltaBytes)) {
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3506
        FLAG_SET_DEFAULT(MinHeapDeltaBytes, 64*M);
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3507
      }
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3508
      // 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
  3509
      // 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
  3510
      UseNUMAInterleaving = true;
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3511
    }
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3512
  }
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15119
diff changeset
  3513
#endif // INCLUDE_ALL_GCS
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3514
  return JNI_OK;
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3515
}
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 14487
diff changeset
  3516
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3517
int Arguments::PropertyList_count(SystemProperty* pl) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3518
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3519
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3520
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3521
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3522
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3523
  return count;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3524
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3525
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3526
const char* Arguments::PropertyList_get_value(SystemProperty *pl, const char* key) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3527
  assert(key != NULL, "just checking");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3528
  SystemProperty* prop;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3529
  for (prop = pl; prop != NULL; prop = prop->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3530
    if (strcmp(key, prop->key()) == 0) return prop->value();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3531
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3532
  return NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3533
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3534
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3535
const char* Arguments::PropertyList_get_key_at(SystemProperty *pl, int index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3536
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3537
  const char* ret_val = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3538
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3539
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3540
    if(count >= index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3541
      ret_val = pl->key();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3542
      break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3543
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3544
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3545
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3546
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3547
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3548
  return ret_val;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3549
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3550
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3551
char* Arguments::PropertyList_get_value_at(SystemProperty* pl, int index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3552
  int count = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3553
  char* ret_val = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3554
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3555
  while(pl != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3556
    if(count >= index) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3557
      ret_val = pl->value();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3558
      break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3559
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3560
    count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3561
    pl = pl->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3562
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3563
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3564
  return ret_val;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3565
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3566
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3567
void Arguments::PropertyList_add(SystemProperty** plist, SystemProperty *new_p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3568
  SystemProperty* p = *plist;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3569
  if (p == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3570
    *plist = new_p;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3571
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3572
    while (p->next() != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3573
      p = p->next();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3574
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3575
    p->set_next(new_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3576
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3577
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3578
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3579
void Arguments::PropertyList_add(SystemProperty** plist, const char* k, char* v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3580
  if (plist == NULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3581
    return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3582
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3583
  SystemProperty* new_p = new SystemProperty(k, v, true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3584
  PropertyList_add(plist, new_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3585
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3586
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3587
// This add maintains unique property key in the list.
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3588
void Arguments::PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3589
  if (plist == NULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3590
    return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3591
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3592
  // If property key exist then update with new value.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3593
  SystemProperty* prop;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3594
  for (prop = *plist; prop != NULL; prop = prop->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3595
    if (strcmp(k, prop->key()) == 0) {
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3596
      if (append) {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3597
        prop->append_value(v);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3598
      } else {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3599
        prop->set_value(v);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2259
diff changeset
  3600
      }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3601
      return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3602
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3603
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3604
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3605
  PropertyList_add(plist, k, v);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3606
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3607
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3608
// Copies src into buf, replacing "%%" with "%" and "%p" with pid
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3609
// Returns true if all of the source pointed by src has been copied over to
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3610
// the destination buffer pointed by buf. Otherwise, returns false.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3611
// Notes:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3612
// 1. If the length (buflen) of the destination buffer excluding the
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3613
// NULL terminator character is not long enough for holding the expanded
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3614
// pid characters, it also returns false instead of returning the partially
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3615
// expanded one.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3616
// 2. The passed in "buflen" should be large enough to hold the null terminator.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3617
bool Arguments::copy_expand_pid(const char* src, size_t srclen,
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3618
                                char* buf, size_t buflen) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3619
  const char* p = src;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3620
  char* b = buf;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3621
  const char* src_end = &src[srclen];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3622
  char* buf_end = &buf[buflen - 1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3623
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3624
  while (p < src_end && b < buf_end) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3625
    if (*p == '%') {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3626
      switch (*(++p)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3627
      case '%':         // "%%" ==> "%"
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3628
        *b++ = *p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3629
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3630
      case 'p':  {       //  "%p" ==> current process id
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3631
        // buf_end points to the character before the last character so
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3632
        // that we could write '\0' to the end of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3633
        size_t buf_sz = buf_end - b + 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3634
        int ret = jio_snprintf(b, buf_sz, "%d", os::current_process_id());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3635
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3636
        // if jio_snprintf fails or the buffer is not long enough to hold
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3637
        // the expanded pid, returns false.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3638
        if (ret < 0 || ret >= (int)buf_sz) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3639
          return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3640
        } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3641
          b += ret;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3642
          assert(*b == '\0', "fail in copy_expand_pid");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3643
          if (p == src_end && b == buf_end + 1) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3644
            // reach the end of the buffer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3645
            return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3646
          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3647
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3648
        p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3649
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3650
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3651
      default :
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3652
        *b++ = '%';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3653
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3654
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3655
      *b++ = *p++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3656
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3657
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3658
  *b = '\0';
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3659
  return (p == src_end); // return false if not all of the source was copied
489c9b5090e2 Initial load
duke
parents:
diff changeset
  3660
}