hotspot/src/share/vm/runtime/arguments.hpp
author tschatzl
Wed, 27 Mar 2013 19:21:18 +0100
changeset 16605 ba13efd453bc
parent 15957 58302a2ffb9a
child 18090 d73d91e93e42
permissions -rw-r--r--
7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM Summary: Ergonomics now also takes available virtual memory into account when deciding for a heap size. The helper method to determine the maximum allocatable memory block now uses the appropriate OS specific calls to retrieve available virtual memory for the java process. In 32 bit environments this method now also searches for the maximum actually reservable amount of memory. Merge previously separate implementations for Linux/BSD/Solaris into a single method. Reviewed-by: jmasa, tamao
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;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  char*           _name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  char*           _options;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  void*           _os_lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  bool            _is_absolute_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  AgentLibrary*   _next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  // Accessors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  const char* name() const                  { return _name; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
  char* options() const                     { return _options; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  bool is_absolute_path() const             { return _is_absolute_path; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  void* os_lib() const                      { return _os_lib; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  void set_os_lib(void* os_lib)             { _os_lib = os_lib; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
  AgentLibrary* next() const                { return _next; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
  // Constructor
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  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
   139
    _name = AllocateHeap(strlen(name)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
    strcpy(_name, name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
    if (options == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
      _options = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
    } else {
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 8681
diff changeset
   144
      _options = AllocateHeap(strlen(options)+1, mtInternal);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
      strcpy(_options, options);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
    _is_absolute_path = is_absolute_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
    _os_lib = os_lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
    _next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
// maintain an order of entry list of AgentLibrary
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
class AgentLibraryList VALUE_OBJ_CLASS_SPEC {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  AgentLibrary*   _first;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  AgentLibrary*   _last;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
  bool is_empty() const                     { return _first == NULL; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
  AgentLibrary* first() const               { return _first; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
  // add to the end of the list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  void add(AgentLibrary* lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
    if (is_empty()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
      _first = _last = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
      _last->_next = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
      _last = lib;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
    lib->_next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  // search for and remove a library known to be in the list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  void remove(AgentLibrary* lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
    AgentLibrary* curr;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
    AgentLibrary* prev = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
    for (curr = first(); curr != NULL; prev = curr, curr = curr->next()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
      if (curr == lib) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
        break;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
    assert(curr != NULL, "always should be found");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
    if (curr != NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
      // it was found, by-pass this library
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
      if (prev == NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
        _first = curr->_next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
        prev->_next = curr->_next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
      if (curr == _last) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
        _last = prev;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
      curr->_next = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  AgentLibraryList() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
    _first = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
    _last = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
class Arguments : AllStatic {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  friend class JvmtiExport;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  enum Mode {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
    _int,       // corresponds to -Xint
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
    _mixed,     // corresponds to -Xmixed
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
    _comp       // corresponds to -Xcomp
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  enum ArgsRange {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
    arg_unreadable = -3,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
    arg_too_small  = -2,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
    arg_too_big    = -1,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
    arg_in_range   = 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
  // an array containing all flags specified in the .hotspotrc file
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  static char** _jvm_flags_array;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  static int    _num_jvm_flags;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
  // an array containing all jvm arguments specified in the command line
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
  static char** _jvm_args_array;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  static int    _num_jvm_args;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
  // string containing all java command (class/jarfile name and app args)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
  static char* _java_command;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
  // Property list
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
  static SystemProperty* _system_properties;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  // Quick accessor to System properties in the list:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
  static SystemProperty *_java_ext_dirs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
  static SystemProperty *_java_endorsed_dirs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
  static SystemProperty *_sun_boot_library_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
  static SystemProperty *_java_library_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
  static SystemProperty *_java_home;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  static SystemProperty *_java_class_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
  static SystemProperty *_sun_boot_class_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
  // Meta-index for knowing what packages are in the boot class path
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  static char* _meta_index_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
  static char* _meta_index_dir;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
  // java.vendor.url.bug, bug reporting URL for fatal errors.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
  static const char* _java_vendor_url_bug;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
  // sun.java.launcher, private property to provide information about
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
  // java/gamma launcher
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
  static const char* _sun_java_launcher;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
  // sun.java.launcher.pid, private property
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
  static int    _sun_java_launcher_pid;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   260
  // was this VM created by the gamma launcher
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   261
  static bool   _created_by_gamma_launcher;
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   262
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   263
  // Option flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   264
  static bool   _has_profile;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   265
  static bool   _has_alloc_profile;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   266
  static const char*  _gc_log_filename;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   267
  static uintx  _min_heap_size;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
  // -Xrun arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
  static AgentLibraryList _libraryList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  static void add_init_library(const char* name, char* options)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
    { _libraryList.add(new AgentLibrary(name, options, false, NULL)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
489c9b5090e2 Initial load
duke
parents:
diff changeset
   274
  // -agentlib and -agentpath arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   275
  static AgentLibraryList _agentList;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
  static void add_init_agent(const char* name, char* options, bool absolute_path)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   277
    { _agentList.add(new AgentLibrary(name, options, absolute_path, NULL)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   278
489c9b5090e2 Initial load
duke
parents:
diff changeset
   279
  // Late-binding agents not started via arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
  static void add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
    { _agentList.add(new AgentLibrary(name, options, absolute_path, os_lib)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
  static Mode _mode;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
  static void set_mode_flags(Mode mode);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
  static bool _java_compiler;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
  static void set_java_compiler(bool arg) { _java_compiler = arg; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
  static bool java_compiler()   { return _java_compiler; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  // -Xdebug flag
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
  static bool _xdebug_mode;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
  static void set_xdebug_mode(bool arg) { _xdebug_mode = arg; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
  static bool xdebug_mode()             { return _xdebug_mode; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   294
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
  // Used to save default settings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
  static bool _AlwaysCompileLoopMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
  static bool _UseOnStackReplacement;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
  static bool _BackgroundCompilation;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
  static bool _ClipInlining;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
  static bool _CIDynamicCompilePriority;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6414
diff changeset
   302
  // Tiered
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 6414
diff changeset
   303
  static void set_tiered_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
  // CMS/ParNew garbage collectors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  static void set_parnew_gc_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  static void set_cms_and_parnew_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   307
  // UseParallel[Old]GC
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
  static void set_parallel_gc_flags();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   309
  // Garbage-First (UseG1GC)
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 183
diff changeset
   310
  static void set_g1_gc_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
  // GC ergonomics
15957
58302a2ffb9a 8001049: VM crashes when running with large -Xms and not specifying ObjectAlignmentInBytes
brutisso
parents: 15950
diff changeset
   312
  static void set_use_compressed_oops();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
  static void set_ergonomics_flags();
8681
c691d94813f9 7018056: large pages not always enabled by default
jcoomes
parents: 8476
diff changeset
   314
  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
   315
  // 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
   316
  // 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
   317
  static julong limit_by_allocatable_memory(julong size);
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   318
  // Setup heap size
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   319
  static void set_heap_size();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
  // Based on automatic selection criteria, should the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  // low pause collector be used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
  static bool should_auto_select_low_pause_collector();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   323
489c9b5090e2 Initial load
duke
parents:
diff changeset
   324
  // Bytecode rewriting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
  static void set_bytecode_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
  // Invocation API hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
  static abort_hook_t     _abort_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
  static exit_hook_t      _exit_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
  static vfprintf_hook_t  _vfprintf_hook;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
  // System properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
  static bool add_property(const char* prop);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   334
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
  // Aggressive optimization flags.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
  static void set_aggressive_opts_flags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
489c9b5090e2 Initial load
duke
parents:
diff changeset
   338
  // Argument parsing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
  static void do_pd_flag_adjustments();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
  static bool parse_argument(const char* arg, FlagValueOrigin origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   341
  static bool process_argument(const char* arg, jboolean ignore_unrecognized, FlagValueOrigin origin);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   342
  static void process_java_launcher_argument(const char*, void*);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  static void process_java_compiler_argument(char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   344
  static jint parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  static jint parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
  static jint parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
  static jint parse_vm_init_args(const JavaVMInitArgs* args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
  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
   349
  static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
  static bool is_bad_option(const JavaVMOption* option, jboolean ignore,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   351
    const char* option_type);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
  static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
    return is_bad_option(option, ignore, NULL);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
  }
4885
cee90a57b58f 6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents: 4434
diff changeset
   355
  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
   356
                              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
   357
  static bool verify_min_value(intx val, intx min, const char* name);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
  static bool verify_percentage(uintx value, const char* name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
  static void describe_range_error(ArgsRange errcode);
1676
d80e69372634 6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents: 1388
diff changeset
   360
  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
   361
  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
   362
                                     julong min_size);
5035
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   363
  // Parse a string for a unsigned integer.  Returns true if value
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   364
  // is an unsigned integer greater than or equal to the minimum
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   365
  // parameter passed and returns the value in uintx_arg.  Returns
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   366
  // false otherwise, with uintx_arg undefined.
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   367
  static bool parse_uintx(const char* value, uintx* uintx_arg,
0e498c4df637 6928081: G1: rename parameters common with CMS
jmasa
parents: 4885
diff changeset
   368
                          uintx min_size);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   369
489c9b5090e2 Initial load
duke
parents:
diff changeset
   370
  // methods to build strings from individual args
489c9b5090e2 Initial load
duke
parents:
diff changeset
   371
  static void build_jvm_args(const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   372
  static void build_jvm_flags(const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   373
  static void add_string(char*** bldarray, int* count, const char* arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
  static const char* build_resource_string(char** args, int count);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   375
489c9b5090e2 Initial load
duke
parents:
diff changeset
   376
  static bool methodExists(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
    char* className, char* methodName,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
    int classesNum, char** classes, bool* allMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
    int methodsNum, char** methods, bool* allClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   380
  );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
  static void parseOnlyLine(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
    const char* line,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
    short* classesNum, short* classesMax, char*** classes, bool** allMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
    short* methodsNum, short* methodsMax, char*** methods, bool** allClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
  );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
950
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   388
  // 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
   389
  // 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
   390
  // line, instead of failing we print a warning message and ignore the
6112b627bb36 6721093: -XX:AppendRatio=N not supported
kamg
parents: 670
diff changeset
   391
  // 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
   392
  static bool is_newly_obsolete(const char* s, JDK_Version* buffer);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
  static short  CompileOnlyClassesNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
  static short  CompileOnlyClassesMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
  static char** CompileOnlyClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
  static bool*  CompileOnlyAllMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  static short  CompileOnlyMethodsNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
  static short  CompileOnlyMethodsMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
  static char** CompileOnlyMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
  static bool*  CompileOnlyAllClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
  static short  InterpretOnlyClassesNum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
  static short  InterpretOnlyClassesMax;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   406
  static char** InterpretOnlyClasses;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   407
  static bool*  InterpretOnlyAllMethods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
489c9b5090e2 Initial load
duke
parents:
diff changeset
   409
  static bool   CheckCompileOnly;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
489c9b5090e2 Initial load
duke
parents:
diff changeset
   411
  static char*  SharedArchivePath;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   412
489c9b5090e2 Initial load
duke
parents:
diff changeset
   413
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   414
  // Parses the arguments
489c9b5090e2 Initial load
duke
parents:
diff changeset
   415
  static jint parse(const JavaVMInitArgs* args);
14580
3e2316663327 7198334: UseNUMA modifies system parameters on non-NUMA system
brutisso
parents: 13963
diff changeset
   416
  // 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
   417
  static jint adjust_after_os();
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   418
  // 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
   419
  static bool check_gc_consistency();
15092
9228d92ed521 8003820: Deprecate untested and rarely used GC combinations
brutisso
parents: 14580
diff changeset
   420
  static void check_deprecated_gcs();
15950
e69feec75343 8008368: Deprecate MaxGCMinorPauseMillis
tamao
parents: 15432
diff changeset
   421
  static void check_deprecated_gc_flags();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
  // Check consistecy or otherwise of VM argument settings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
  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
   424
  // Check stack pages settings
ef8d1e9052a8 6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents: 5547
diff changeset
   425
  static bool check_stack_pages();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
  // Used by os_solaris
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
  static bool process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
  // return a char* array containing all options
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
  static char** jvm_flags_array()          { return _jvm_flags_array; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
  static char** jvm_args_array()           { return _jvm_args_array; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
  static int num_jvm_flags()               { return _num_jvm_flags; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
  static int num_jvm_args()                { return _num_jvm_args; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
  // return the arguments passed to the Java application
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
  static const char* java_command()        { return _java_command; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
489c9b5090e2 Initial load
duke
parents:
diff changeset
   437
  // print jvm_flags, jvm_args and java_command
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
  static void print_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   439
489c9b5090e2 Initial load
duke
parents:
diff changeset
   440
  // convenient methods to obtain / print jvm_flags and jvm_args
489c9b5090e2 Initial load
duke
parents:
diff changeset
   441
  static const char* jvm_flags()           { return build_resource_string(_jvm_flags_array, _num_jvm_flags); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   442
  static const char* jvm_args()            { return build_resource_string(_jvm_args_array, _num_jvm_args); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   443
  static void print_jvm_flags_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   444
  static void print_jvm_args_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   445
489c9b5090e2 Initial load
duke
parents:
diff changeset
   446
  // -Dkey=value flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
  static SystemProperty*  system_properties()   { return _system_properties; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
  static const char*    get_property(const char* key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   449
489c9b5090e2 Initial load
duke
parents:
diff changeset
   450
  // -Djava.vendor.url.bug
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
  static const char* java_vendor_url_bug()  { return _java_vendor_url_bug; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
489c9b5090e2 Initial load
duke
parents:
diff changeset
   453
  // -Dsun.java.launcher
489c9b5090e2 Initial load
duke
parents:
diff changeset
   454
  static const char* sun_java_launcher()    { return _sun_java_launcher; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
  // Was VM created by a Java launcher?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
  static bool created_by_java_launcher();
8476
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   457
  // Was VM created by the gamma Java launcher?
7e34c2d4cf9b 7022037: Pause when exiting if debugger is attached on windows
sla
parents: 7397
diff changeset
   458
  static bool created_by_gamma_launcher();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
  // -Dsun.java.launcher.pid
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
  static int sun_java_launcher_pid()        { return _sun_java_launcher_pid; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
  // -Xloggc:<file>, if not specified will be NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
   463
  static const char* gc_log_filename()      { return _gc_log_filename; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   464
489c9b5090e2 Initial load
duke
parents:
diff changeset
   465
  // -Xprof/-Xaprof
489c9b5090e2 Initial load
duke
parents:
diff changeset
   466
  static bool has_profile()                 { return _has_profile; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
  static bool has_alloc_profile()           { return _has_alloc_profile; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
4434
4b41e5b42f81 6887571: Increase default heap config sizes
phh
parents: 2358
diff changeset
   469
  // -Xms, -Xmx
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   470
  static uintx min_heap_size()              { return _min_heap_size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   471
  static void  set_min_heap_size(uintx v)   { _min_heap_size = v;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   472
489c9b5090e2 Initial load
duke
parents:
diff changeset
   473
  // -Xrun
489c9b5090e2 Initial load
duke
parents:
diff changeset
   474
  static AgentLibrary* libraries()          { return _libraryList.first(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   475
  static bool init_libraries_at_startup()   { return !_libraryList.is_empty(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   476
  static void convert_library_to_agent(AgentLibrary* lib)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   477
                                            { _libraryList.remove(lib);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   478
                                              _agentList.add(lib); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   479
489c9b5090e2 Initial load
duke
parents:
diff changeset
   480
  // -agentlib -agentpath
489c9b5090e2 Initial load
duke
parents:
diff changeset
   481
  static AgentLibrary* agents()             { return _agentList.first(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   482
  static bool init_agents_at_startup()      { return !_agentList.is_empty(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   483
489c9b5090e2 Initial load
duke
parents:
diff changeset
   484
  // abort, exit, vfprintf hooks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   485
  static abort_hook_t    abort_hook()       { return _abort_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   486
  static exit_hook_t     exit_hook()        { return _exit_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   487
  static vfprintf_hook_t vfprintf_hook()    { return _vfprintf_hook; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   488
489c9b5090e2 Initial load
duke
parents:
diff changeset
   489
  static bool GetCheckCompileOnly ()        { return CheckCompileOnly; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   490
489c9b5090e2 Initial load
duke
parents:
diff changeset
   491
  static const char* GetSharedArchivePath() { return SharedArchivePath; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   492
489c9b5090e2 Initial load
duke
parents:
diff changeset
   493
  static bool CompileMethod(char* className, char* methodName) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   494
    return
489c9b5090e2 Initial load
duke
parents:
diff changeset
   495
      methodExists(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   496
        className, methodName,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   497
        CompileOnlyClassesNum, CompileOnlyClasses, CompileOnlyAllMethods,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   498
        CompileOnlyMethodsNum, CompileOnlyMethods, CompileOnlyAllClasses
489c9b5090e2 Initial load
duke
parents:
diff changeset
   499
      );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   500
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   501
489c9b5090e2 Initial load
duke
parents:
diff changeset
   502
  // Java launcher properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   503
  static void process_sun_java_launcher_properties(JavaVMInitArgs* args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   504
489c9b5090e2 Initial load
duke
parents:
diff changeset
   505
  // System properties
489c9b5090e2 Initial load
duke
parents:
diff changeset
   506
  static void init_system_properties();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   507
6961
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   508
  // Update/Initialize System properties after JDK version number is known
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   509
  static void init_version_specific_system_properties();
a32b2fc66321 6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents: 6453
diff changeset
   510
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   511
  // Property List manipulation
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   512
  static void PropertyList_add(SystemProperty** plist, SystemProperty *element);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   513
  static void PropertyList_add(SystemProperty** plist, const char* k, char* v);
2358
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   514
  static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v) {
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   515
    PropertyList_unique_add(plist, k, v, false);
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   516
  }
7c8346929fc6 6819213: revive sun.boot.library.path
phh
parents: 2105
diff changeset
   517
  static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   518
  static const char* PropertyList_get_value(SystemProperty* plist, const char* key);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   519
  static int  PropertyList_count(SystemProperty* pl);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   520
  static const char* PropertyList_get_key_at(SystemProperty* pl,int index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   521
  static char* PropertyList_get_value_at(SystemProperty* pl,int index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   522
489c9b5090e2 Initial load
duke
parents:
diff changeset
   523
  // Miscellaneous System property value getter and setters.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   524
  static void set_dll_dir(char *value) { _sun_boot_library_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   525
  static void set_java_home(char *value) { _java_home->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   526
  static void set_library_path(char *value) { _java_library_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   527
  static void set_ext_dirs(char *value) { _java_ext_dirs->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   528
  static void set_endorsed_dirs(char *value) { _java_endorsed_dirs->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   529
  static void set_sysclasspath(char *value) { _sun_boot_class_path->set_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   530
  static void append_sysclasspath(const char *value) { _sun_boot_class_path->append_value(value); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   531
  static void set_meta_index_path(char* meta_index_path, char* meta_index_dir) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   532
    _meta_index_path = meta_index_path;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   533
    _meta_index_dir  = meta_index_dir;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   534
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   535
489c9b5090e2 Initial load
duke
parents:
diff changeset
   536
  static char *get_java_home() { return _java_home->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   537
  static char *get_dll_dir() { return _sun_boot_library_path->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   538
  static char *get_endorsed_dir() { return _java_endorsed_dirs->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   539
  static char *get_sysclasspath() { return _sun_boot_class_path->value(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   540
  static char* get_meta_index_path() { return _meta_index_path; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   541
  static char* get_meta_index_dir()  { return _meta_index_dir;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   542
489c9b5090e2 Initial load
duke
parents:
diff changeset
   543
  // Operation modi
489c9b5090e2 Initial load
duke
parents:
diff changeset
   544
  static Mode mode()                        { return _mode; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   545
489c9b5090e2 Initial load
duke
parents:
diff changeset
   546
  // Utility: copies src into buf, replacing "%%" with "%" and "%p" with pid.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   547
  static bool copy_expand_pid(const char* src, size_t srclen, char* buf, size_t buflen);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   548
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
   549
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6988
diff changeset
   550
#endif // SHARE_VM_RUNTIME_ARGUMENTS_HPP