hotspot/src/share/vm/runtime/arguments.hpp
author tschatzl
Wed, 11 Sep 2013 16:25:02 +0200
changeset 19986 33d188c66ed9
parent 19732 88f375dd7d65
child 20006 9dc2add3103b
permissions -rw-r--r--
8010722: assert: failed: heap size is too big for compressed oops Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation. Reviewed-by: stefank, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
15432
9d976ca484d8 8000692: Remove old KERNEL code
zgu
parents: 15092
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: 5035
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5035
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: 5035
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: 6988
diff changeset
    25
#ifndef SHARE_VM_RUNTIME_ARGUMENTS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    26
#define SHARE_VM_RUNTIME_ARGUMENTS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    28
#include "runtime/java.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    29
#include "runtime/perfData.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    30
#include "utilities/top.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
    31
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
// Arguments parses the command line and recognizes options
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
// Invocation API hook typedefs (these should really be defined in jni.hpp)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
extern "C" {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  typedef void (JNICALL *abort_hook_t)(void);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
  typedef void (JNICALL *exit_hook_t)(jint code);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  typedef jint (JNICALL *vfprintf_hook_t)(FILE *fp, const char *format, va_list args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
// Forward declarations
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
class SysClassPath;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
// Element describing System and User (-Dkey=value flags) defined property.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
    47
class SystemProperty: public CHeapObj<mtInternal> {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
  char*           _key;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  char*           _value;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  SystemProperty* _next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  bool            _writeable;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  bool writeable()   { return _writeable; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  // Accessors
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  const char* key() const                   { return _key; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  char* value() const                       { return _value; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  SystemProperty* next() const              { return _next; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  void set_next(SystemProperty* next)       { _next = next; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  bool set_value(char *value) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
    if (writeable()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
      if (_value != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
        FreeHeap(_value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
      }
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
    66
      _value = AllocateHeap(strlen(value)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
      if (_value != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
        strcpy(_value, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
    return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  void append_value(const char *value) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
    char *sp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
    size_t len = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
    if (value != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
      len = strlen(value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
      if (_value != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
        len += strlen(_value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
      }
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
    83
      sp = AllocateHeap(len+2, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
      if (sp != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
        if (_value != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
          strcpy(sp, _value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
          strcat(sp, os::path_separator());
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
          strcat(sp, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
          FreeHeap(_value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
        } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
          strcpy(sp, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
        _value = sp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  // Constructor
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  SystemProperty(const char* key, const char* value, bool writeable) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
    if (key == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
      _key = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   103
      _key = AllocateHeap(strlen(key)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
      strcpy(_key, key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
    if (value == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
      _value = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   109
      _value = AllocateHeap(strlen(value)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
      strcpy(_value, value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
    _next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
    _writeable = writeable;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
// For use by -agentlib, -agentpath and -Xrun
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   119
class AgentLibrary : public CHeapObj<mtInternal> {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  friend class AgentLibraryList;
19553
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   121
public:
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   122
  // Is this library valid or not. Don't rely on os_lib == NULL as statically
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   123
  // linked lib could have handle of RTLD_DEFAULT which == 0 on some platforms
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   124
  enum AgentState {
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   125
    agent_invalid = 0,
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   126
    agent_valid   = 1
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   127
  };
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   128
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  char*           _name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
  char*           _options;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  void*           _os_lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  bool            _is_absolute_path;
19553
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   134
  bool            _is_static_lib;
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   135
  AgentState      _state;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  AgentLibrary*   _next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
  // Accessors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  const char* name() const                  { return _name; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  char* options() const                     { return _options; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  bool is_absolute_path() const             { return _is_absolute_path; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  void* os_lib() const                      { return _os_lib; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  void set_os_lib(void* os_lib)             { _os_lib = os_lib; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  AgentLibrary* next() const                { return _next; }
19553
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   146
  bool is_static_lib() const                { return _is_static_lib; }
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   147
  void set_static_lib(bool static_lib)      { _is_static_lib = static_lib; }
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   148
  bool valid()                              { return (_state == agent_valid); }
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   149
  void set_valid()                          { _state = agent_valid; }
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   150
  void set_invalid()                        { _state = agent_invalid; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  // Constructor
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   154
    _name = AllocateHeap(strlen(name)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
    strcpy(_name, name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
    if (options == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
      _options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   159
      _options = AllocateHeap(strlen(options)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
      strcpy(_options, options);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
    _is_absolute_path = is_absolute_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
    _os_lib = os_lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
    _next = NULL;
19553
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   165
    _state = agent_invalid;
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   166
    _is_static_lib = false;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
// maintain an order of entry list of AgentLibrary
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
class AgentLibraryList VALUE_OBJ_CLASS_SPEC {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  AgentLibrary*   _first;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  AgentLibrary*   _last;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  bool is_empty() const                     { return _first == NULL; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  AgentLibrary* first() const               { return _first; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  // add to the end of the list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  void add(AgentLibrary* lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
    if (is_empty()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
      _first = _last = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
      _last->_next = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
      _last = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
    lib->_next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  // search for and remove a library known to be in the list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  void remove(AgentLibrary* lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
    AgentLibrary* curr;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
    AgentLibrary* prev = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
    for (curr = first(); curr != NULL; prev = curr, curr = curr->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
      if (curr == lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
    assert(curr != NULL, "always should be found");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
    if (curr != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
      // it was found, by-pass this library
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
      if (prev == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
        _first = curr->_next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
        prev->_next = curr->_next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
      if (curr == _last) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
        _last = prev;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
      curr->_next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  AgentLibraryList() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
    _first = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
    _last = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
class Arguments : AllStatic {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
  friend class JvmtiExport;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  enum Mode {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
    _int,       // corresponds to -Xint
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
    _mixed,     // corresponds to -Xmixed
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
    _comp       // corresponds to -Xcomp
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
  enum ArgsRange {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
    arg_unreadable = -3,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
    arg_too_small  = -2,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
    arg_too_big    = -1,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
    arg_in_range   = 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
  // an array containing all flags specified in the .hotspotrc file
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  static char** _jvm_flags_array;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
  static int    _num_jvm_flags;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
  // an array containing all jvm arguments specified in the command line
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
  static char** _jvm_args_array;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  static int    _num_jvm_args;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
  // string containing all java command (class/jarfile name and app args)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
  static char* _java_command;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
  // Property list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
  static SystemProperty* _system_properties;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
  // Quick accessor to System properties in the list:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
  static SystemProperty *_java_ext_dirs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
  static SystemProperty *_java_endorsed_dirs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
  static SystemProperty *_sun_boot_library_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
  static SystemProperty *_java_library_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
  static SystemProperty *_java_home;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
  static SystemProperty *_java_class_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
  static SystemProperty *_sun_boot_class_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
489c9b5090e2 Initial load
duke
parents:
diff changeset
   263
  // Meta-index for knowing what packages are in the boot class path
489c9b5090e2 Initial load
duke
parents:
diff changeset
   264
  static char* _meta_index_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   265
  static char* _meta_index_dir;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   266
489c9b5090e2 Initial load
duke
parents:
diff changeset
   267
  // java.vendor.url.bug, bug reporting URL for fatal errors.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
  static const char* _java_vendor_url_bug;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
  // sun.java.launcher, private property to provide information about
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  // java/gamma launcher
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
  static const char* _sun_java_launcher;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
489c9b5090e2 Initial load
duke
parents:
diff changeset
   274
  // sun.java.launcher.pid, private property
489c9b5090e2 Initial load
duke
parents:
diff changeset
   275
  static int    _sun_java_launcher_pid;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   277
  // was this VM created by the gamma launcher
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   278
  static bool   _created_by_gamma_launcher;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   279
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
  // Option flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
  static bool   _has_profile;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
  static const char*  _gc_log_filename;
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   283
  // Value of the conservative maximum heap alignment needed
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   284
  static size_t  _conservative_max_heap_alignment;
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   285
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
  static uintx  _min_heap_size;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
  // -Xrun arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
  static AgentLibraryList _libraryList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  static void add_init_library(const char* name, char* options)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
    { _libraryList.add(new AgentLibrary(name, options, false, NULL)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
  // -agentlib and -agentpath arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   294
  static AgentLibraryList _agentList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
  static void add_init_agent(const char* name, char* options, bool absolute_path)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
    { _agentList.add(new AgentLibrary(name, options, absolute_path, NULL)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
  // Late-binding agents not started via arguments
19553
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   299
  static void add_loaded_agent(AgentLibrary *agentLib)
9bbd930be684 8014135: The JVMTI specification does not conform to recent changes in JNI specification
bpittore
parents: 19319
diff changeset
   300
    { _agentList.add(agentLib); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
  static void add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
    { _agentList.add(new AgentLibrary(name, options, absolute_path, os_lib)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  static Mode _mode;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  static void set_mode_flags(Mode mode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
  static bool _java_compiler;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
  static void set_java_compiler(bool arg) { _java_compiler = arg; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
  static bool java_compiler()   { return _java_compiler; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
  // -Xdebug flag
489c9b5090e2 Initial load
duke
parents:
diff changeset
   312
  static bool _xdebug_mode;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
  static void set_xdebug_mode(bool arg) { _xdebug_mode = arg; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   314
  static bool xdebug_mode()             { return _xdebug_mode; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   315
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
  // Used to save default settings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
  static bool _AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  static bool _UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
  static bool _BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
  static bool _ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  static bool _CIDynamicCompilePriority;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6414
diff changeset
   323
  // Tiered
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6414
diff changeset
   324
  static void set_tiered_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
  // CMS/ParNew garbage collectors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
  static void set_parnew_gc_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
  static void set_cms_and_parnew_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   328
  // UseParallel[Old]GC
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
  static void set_parallel_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   330
  // Garbage-First (UseG1GC)
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   331
  static void set_g1_gc_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
  // GC ergonomics
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   333
  static void set_conservative_max_heap_alignment();
15957
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
   334
  static void set_use_compressed_oops();
19319
0ad35be0733a 8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents: 18687
diff changeset
   335
  static void set_use_compressed_klass_ptrs();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
  static void set_ergonomics_flags();
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
   337
  static void set_shared_spaces_flags();
16605
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 15957
diff changeset
   338
  // limits the given memory size by the maximum amount of memory this process is
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 15957
diff changeset
   339
  // currently allowed to allocate or reserve.
ba13efd453bc 7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
tschatzl
parents: 15957
diff changeset
   340
  static julong limit_by_allocatable_memory(julong size);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   341
  // Setup heap size
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   342
  static void set_heap_size();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  // Based on automatic selection criteria, should the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   344
  // low pause collector be used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  static bool should_auto_select_low_pause_collector();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
  // Bytecode rewriting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
  static void set_bytecode_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   349
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
  // Invocation API hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   351
  static abort_hook_t     _abort_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
  static exit_hook_t      _exit_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
  static vfprintf_hook_t  _vfprintf_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
489c9b5090e2 Initial load
duke
parents:
diff changeset
   355
  // System properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   356
  static bool add_property(const char* prop);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   357
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
  // Aggressive optimization flags.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
  static void set_aggressive_opts_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   360
489c9b5090e2 Initial load
duke
parents:
diff changeset
   361
  // Argument parsing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   362
  static void do_pd_flag_adjustments();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   363
  static bool parse_argument(const char* arg, FlagValueOrigin origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   364
  static bool process_argument(const char* arg, jboolean ignore_unrecognized, FlagValueOrigin origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   365
  static void process_java_launcher_argument(const char*, void*);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   366
  static void process_java_compiler_argument(char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   367
  static jint parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   368
  static jint parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   369
  static jint parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   370
  static jint parse_vm_init_args(const JavaVMInitArgs* args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   371
  static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, FlagValueOrigin origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   372
  static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   373
  static bool is_bad_option(const JavaVMOption* option, jboolean ignore,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
    const char* option_type);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   375
  static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   376
    return is_bad_option(option, ignore, NULL);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
  }
4885
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4434
diff changeset
   378
  static bool verify_interval(uintx val, uintx min,
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4434
diff changeset
   379
                              uintx max, const char* name);
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 5547
diff changeset
   380
  static bool verify_min_value(intx val, intx min, const char* name);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
  static bool verify_percentage(uintx value, const char* name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
  static void describe_range_error(ArgsRange errcode);
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1388
diff changeset
   383
  static ArgsRange check_memory_size(julong size, julong min_size);
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1388
diff changeset
   384
  static ArgsRange parse_memory_size(const char* s, julong* long_arg,
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1388
diff changeset
   385
                                     julong min_size);
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   386
  // Parse a string for a unsigned integer.  Returns true if value
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   387
  // is an unsigned integer greater than or equal to the minimum
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   388
  // parameter passed and returns the value in uintx_arg.  Returns
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   389
  // false otherwise, with uintx_arg undefined.
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   390
  static bool parse_uintx(const char* value, uintx* uintx_arg,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   391
                          uintx min_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   392
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
  // methods to build strings from individual args
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
  static void build_jvm_args(const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
  static void build_jvm_flags(const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
  static void add_string(char*** bldarray, int* count, const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
  static const char* build_resource_string(char** args, int count);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  static bool methodExists(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
    char* className, char* methodName,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
    int classesNum, char** classes, bool* allMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
    int methodsNum, char** methods, bool* allClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
  );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
  static void parseOnlyLine(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   406
    const char* line,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   407
    short* classesNum, short* classesMax, char*** classes, bool** allMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
    short* methodsNum, short* methodsMax, char*** methods, bool** allClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   409
  );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   411
  // Returns true if the string s is in the list of flags that have recently
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   412
  // been made obsolete.  If we detect one of these flags on the command
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   413
  // line, instead of failing we print a warning message and ignore the
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   414
  // flag.  This gives the user a release or so to stop using the flag.
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   415
  static bool is_newly_obsolete(const char* s, JDK_Version* buffer);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   416
489c9b5090e2 Initial load
duke
parents:
diff changeset
   417
  static short  CompileOnlyClassesNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   418
  static short  CompileOnlyClassesMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   419
  static char** CompileOnlyClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   420
  static bool*  CompileOnlyAllMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   421
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
  static short  CompileOnlyMethodsNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
  static short  CompileOnlyMethodsMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   424
  static char** CompileOnlyMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   425
  static bool*  CompileOnlyAllClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
  static short  InterpretOnlyClassesNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
  static short  InterpretOnlyClassesMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
  static char** InterpretOnlyClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
  static bool*  InterpretOnlyAllMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
  static bool   CheckCompileOnly;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
  static char*  SharedArchivePath;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
 public:
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   437
  // Parses the arguments, first phase
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
  static jint parse(const JavaVMInitArgs* args);
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   439
  // Apply ergonomics
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   440
  static jint apply_ergo();
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 13963
diff changeset
   441
  // Adjusts the arguments after the OS have adjusted the arguments
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 13963
diff changeset
   442
  static jint adjust_after_os();
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   443
  // Check for consistency in the selection of the garbage collector.
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   444
  static bool check_gc_consistency();
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 14580
diff changeset
   445
  static void check_deprecated_gcs();
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15432
diff changeset
   446
  static void check_deprecated_gc_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
  // Check consistecy or otherwise of VM argument settings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
  static bool check_vm_args_consistency();
6414
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 5547
diff changeset
   449
  // Check stack pages settings
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 5547
diff changeset
   450
  static bool check_stack_pages();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
  // Used by os_solaris
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
  static bool process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   453
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   454
  static size_t conservative_max_heap_alignment() { return _conservative_max_heap_alignment; }
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   455
  // Return the maximum size a heap with compressed oops can take
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   456
  static size_t max_heap_for_compressed_oops();
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19732
diff changeset
   457
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   458
  // return a char* array containing all options
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
  static char** jvm_flags_array()          { return _jvm_flags_array; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
  static char** jvm_args_array()           { return _jvm_args_array; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
  static int num_jvm_flags()               { return _num_jvm_flags; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
  static int num_jvm_args()                { return _num_jvm_args; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   463
  // return the arguments passed to the Java application
489c9b5090e2 Initial load
duke
parents:
diff changeset
   464
  static const char* java_command()        { return _java_command; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   465
489c9b5090e2 Initial load
duke
parents:
diff changeset
   466
  // print jvm_flags, jvm_args and java_command
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
  static void print_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
489c9b5090e2 Initial load
duke
parents:
diff changeset
   469
  // convenient methods to obtain / print jvm_flags and jvm_args
489c9b5090e2 Initial load
duke
parents:
diff changeset
   470
  static const char* jvm_flags()           { return build_resource_string(_jvm_flags_array, _num_jvm_flags); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   471
  static const char* jvm_args()            { return build_resource_string(_jvm_args_array, _num_jvm_args); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   472
  static void print_jvm_flags_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   473
  static void print_jvm_args_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   474
489c9b5090e2 Initial load
duke
parents:
diff changeset
   475
  // -Dkey=value flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   476
  static SystemProperty*  system_properties()   { return _system_properties; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   477
  static const char*    get_property(const char* key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   478
489c9b5090e2 Initial load
duke
parents:
diff changeset
   479
  // -Djava.vendor.url.bug
489c9b5090e2 Initial load
duke
parents:
diff changeset
   480
  static const char* java_vendor_url_bug()  { return _java_vendor_url_bug; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   481
489c9b5090e2 Initial load
duke
parents:
diff changeset
   482
  // -Dsun.java.launcher
489c9b5090e2 Initial load
duke
parents:
diff changeset
   483
  static const char* sun_java_launcher()    { return _sun_java_launcher; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   484
  // Was VM created by a Java launcher?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   485
  static bool created_by_java_launcher();
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   486
  // Was VM created by the gamma Java launcher?
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   487
  static bool created_by_gamma_launcher();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   488
  // -Dsun.java.launcher.pid
489c9b5090e2 Initial load
duke
parents:
diff changeset
   489
  static int sun_java_launcher_pid()        { return _sun_java_launcher_pid; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   490
489c9b5090e2 Initial load
duke
parents:
diff changeset
   491
  // -Xloggc:<file>, if not specified will be NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
   492
  static const char* gc_log_filename()      { return _gc_log_filename; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   493
18687
5a0543c157c9 7133260: AllocationProfiler uses space in metadata and doesn't seem to do anything useful.
jiangli
parents: 18090
diff changeset
   494
  // -Xprof
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   495
  static bool has_profile()                 { return _has_profile; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   496
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   497
  // -Xms, -Xmx
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   498
  static uintx min_heap_size()              { return _min_heap_size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   499
  static void  set_min_heap_size(uintx v)   { _min_heap_size = v;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   500
489c9b5090e2 Initial load
duke
parents:
diff changeset
   501
  // -Xrun
489c9b5090e2 Initial load
duke
parents:
diff changeset
   502
  static AgentLibrary* libraries()          { return _libraryList.first(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   503
  static bool init_libraries_at_startup()   { return !_libraryList.is_empty(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   504
  static void convert_library_to_agent(AgentLibrary* lib)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   505
                                            { _libraryList.remove(lib);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   506
                                              _agentList.add(lib); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   507
489c9b5090e2 Initial load
duke
parents:
diff changeset
   508
  // -agentlib -agentpath
489c9b5090e2 Initial load
duke
parents:
diff changeset
   509
  static AgentLibrary* agents()             { return _agentList.first(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   510
  static bool init_agents_at_startup()      { return !_agentList.is_empty(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   511
489c9b5090e2 Initial load
duke
parents:
diff changeset
   512
  // abort, exit, vfprintf hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   513
  static abort_hook_t    abort_hook()       { return _abort_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   514
  static exit_hook_t     exit_hook()        { return _exit_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   515
  static vfprintf_hook_t vfprintf_hook()    { return _vfprintf_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   516
489c9b5090e2 Initial load
duke
parents:
diff changeset
   517
  static bool GetCheckCompileOnly ()        { return CheckCompileOnly; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   518
489c9b5090e2 Initial load
duke
parents:
diff changeset
   519
  static const char* GetSharedArchivePath() { return SharedArchivePath; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   520
489c9b5090e2 Initial load
duke
parents:
diff changeset
   521
  static bool CompileMethod(char* className, char* methodName) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   522
    return
489c9b5090e2 Initial load
duke
parents:
diff changeset
   523
      methodExists(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   524
        className, methodName,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   525
        CompileOnlyClassesNum, CompileOnlyClasses, CompileOnlyAllMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   526
        CompileOnlyMethodsNum, CompileOnlyMethods, CompileOnlyAllClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   527
      );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   528
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   529
489c9b5090e2 Initial load
duke
parents:
diff changeset
   530
  // Java launcher properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   531
  static void process_sun_java_launcher_properties(JavaVMInitArgs* args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   532
489c9b5090e2 Initial load
duke
parents:
diff changeset
   533
  // System properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   534
  static void init_system_properties();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   535
6961
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   536
  // Update/Initialize System properties after JDK version number is known
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   537
  static void init_version_specific_system_properties();
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   538
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   539
  // Property List manipulation
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   540
  static void PropertyList_add(SystemProperty** plist, SystemProperty *element);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   541
  static void PropertyList_add(SystemProperty** plist, const char* k, char* v);
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   542
  static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v) {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   543
    PropertyList_unique_add(plist, k, v, false);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   544
  }
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   545
  static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   546
  static const char* PropertyList_get_value(SystemProperty* plist, const char* key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   547
  static int  PropertyList_count(SystemProperty* pl);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   548
  static const char* PropertyList_get_key_at(SystemProperty* pl,int index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   549
  static char* PropertyList_get_value_at(SystemProperty* pl,int index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   550
489c9b5090e2 Initial load
duke
parents:
diff changeset
   551
  // Miscellaneous System property value getter and setters.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   552
  static void set_dll_dir(char *value) { _sun_boot_library_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   553
  static void set_java_home(char *value) { _java_home->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   554
  static void set_library_path(char *value) { _java_library_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   555
  static void set_ext_dirs(char *value) { _java_ext_dirs->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   556
  static void set_endorsed_dirs(char *value) { _java_endorsed_dirs->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   557
  static void set_sysclasspath(char *value) { _sun_boot_class_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   558
  static void append_sysclasspath(const char *value) { _sun_boot_class_path->append_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   559
  static void set_meta_index_path(char* meta_index_path, char* meta_index_dir) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   560
    _meta_index_path = meta_index_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   561
    _meta_index_dir  = meta_index_dir;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   562
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   563
489c9b5090e2 Initial load
duke
parents:
diff changeset
   564
  static char *get_java_home() { return _java_home->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   565
  static char *get_dll_dir() { return _sun_boot_library_path->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   566
  static char *get_endorsed_dir() { return _java_endorsed_dirs->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   567
  static char *get_sysclasspath() { return _sun_boot_class_path->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   568
  static char* get_meta_index_path() { return _meta_index_path; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   569
  static char* get_meta_index_dir()  { return _meta_index_dir;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   570
489c9b5090e2 Initial load
duke
parents:
diff changeset
   571
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   572
  static Mode mode()                        { return _mode; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   573
489c9b5090e2 Initial load
duke
parents:
diff changeset
   574
  // Utility: copies src into buf, replacing "%%" with "%" and "%p" with pid.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   575
  static bool copy_expand_pid(const char* src, size_t srclen, char* buf, size_t buflen);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   576
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
   577
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
   578
#endif // SHARE_VM_RUNTIME_ARGUMENTS_HPP