src/hotspot/share/gc/shared/gcConfig.cpp
author pliden
Wed, 28 Mar 2018 11:38:47 +0200
changeset 49629 b786280276dc
child 49922 3a64eea72624
child 56422 b09629f4b243
permissions -rw-r--r--
8199925: Break out GC selection logic from GCArguments to GCConfig Reviewed-by: eosterlund, rkennke
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49629
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     1
/*
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     4
 *
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     7
 * published by the Free Software Foundation.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     8
 *
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    13
 * accompanied this code).
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    14
 *
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    18
 *
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    21
 * questions.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    22
 *
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    23
 */
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    24
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    25
#include "precompiled.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    26
#include "gc/serial/serialArguments.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    27
#include "gc/shared/gcConfig.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    28
#include "runtime/java.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    29
#include "runtime/os.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    30
#include "utilities/macros.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    31
#if INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    32
#include "gc/parallel/parallelArguments.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    33
#include "gc/cms/cmsArguments.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    34
#include "gc/g1/g1Arguments.hpp"
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    35
#endif // INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    36
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    37
struct SupportedGC {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    38
  bool&               _flag;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    39
  CollectedHeap::Name _name;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    40
  GCArguments&        _arguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    41
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    42
  SupportedGC(bool& flag, CollectedHeap::Name name, GCArguments& arguments) :
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    43
      _flag(flag), _name(name), _arguments(arguments) {}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    44
};
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    45
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    46
static SerialArguments   serialArguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    47
#if INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    48
static ParallelArguments parallelArguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    49
static CMSArguments      cmsArguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    50
static G1Arguments       g1Arguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    51
#endif // INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    52
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    53
// Table of supported GCs, for translating between command
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    54
// line flag, CollectedHeap::Name and GCArguments instance.
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    55
static const SupportedGC SupportedGCs[] = {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    56
  SupportedGC(UseSerialGC,        CollectedHeap::Serial,   serialArguments),
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    57
#if INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    58
  SupportedGC(UseParallelGC,      CollectedHeap::Parallel, parallelArguments),
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    59
  SupportedGC(UseParallelOldGC,   CollectedHeap::Parallel, parallelArguments),
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    60
  SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS,      cmsArguments),
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    61
  SupportedGC(UseG1GC,            CollectedHeap::G1,       g1Arguments),
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    62
#endif // INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    63
};
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    64
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    65
GCArguments* GCConfig::_arguments = NULL;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    66
bool GCConfig::_gc_selected_ergonomically = false;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    67
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    68
void GCConfig::select_gc_ergonomically() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    69
#if INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    70
  if (os::is_server_class_machine()) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    71
    FLAG_SET_ERGO_IF_DEFAULT(bool, UseG1GC, true);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    72
  } else {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    73
    FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    74
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    75
#else
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    76
  UNSUPPORTED_OPTION(UseG1GC);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    77
  UNSUPPORTED_OPTION(UseParallelGC);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    78
  UNSUPPORTED_OPTION(UseParallelOldGC);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    79
  UNSUPPORTED_OPTION(UseConcMarkSweepGC);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    80
  FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    81
#endif // INCLUDE_ALL_GCS
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    82
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    83
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    84
bool GCConfig::is_no_gc_selected() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    85
  for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    86
    if (SupportedGCs[i]._flag) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    87
      return false;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    88
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    89
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    90
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    91
  return true;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    92
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    93
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    94
bool GCConfig::is_exactly_one_gc_selected() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    95
  CollectedHeap::Name selected = CollectedHeap::None;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    96
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    97
  for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    98
    if (SupportedGCs[i]._flag) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
    99
      if (SupportedGCs[i]._name == selected || selected == CollectedHeap::None) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   100
        // Selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   101
        selected = SupportedGCs[i]._name;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   102
      } else {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   103
        // More than one selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   104
        return false;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   105
      }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   106
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   107
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   108
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   109
  return selected != CollectedHeap::None;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   110
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   111
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   112
GCArguments* GCConfig::select_gc() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   113
  if (is_no_gc_selected()) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   114
    // Try select GC ergonomically
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   115
    select_gc_ergonomically();
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   116
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   117
    if (is_no_gc_selected()) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   118
      // Failed to select GC ergonomically
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   119
      vm_exit_during_initialization("Garbage collector not selected "
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   120
                                    "(default collector explicitly disabled)", NULL);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   121
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   122
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   123
    // Succeeded to select GC ergonomically
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   124
    _gc_selected_ergonomically = true;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   125
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   126
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   127
  if (is_exactly_one_gc_selected()) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   128
    // Exacly one GC selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   129
    for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   130
      if (SupportedGCs[i]._flag) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   131
        return &SupportedGCs[i]._arguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   132
      }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   133
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   134
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   135
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   136
  // More than one GC selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   137
  vm_exit_during_initialization("Multiple garbage collectors selected", NULL);
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   138
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   139
  return NULL;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   140
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   141
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   142
void GCConfig::initialize() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   143
  assert(_arguments == NULL, "Already initialized");
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   144
  _arguments = select_gc();
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   145
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   146
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   147
bool GCConfig::is_gc_supported(CollectedHeap::Name name) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   148
  for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   149
    if (SupportedGCs[i]._name == name) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   150
      // Supported
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   151
      return true;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   152
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   153
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   154
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   155
  // Not supported
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   156
  return false;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   157
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   158
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   159
bool GCConfig::is_gc_selected(CollectedHeap::Name name) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   160
  for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   161
    if (SupportedGCs[i]._name == name && SupportedGCs[i]._flag) {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   162
      // Selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   163
      return true;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   164
    }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   165
  }
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   166
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   167
  // Not selected
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   168
  return false;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   169
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   170
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   171
bool GCConfig::is_gc_selected_ergonomically() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   172
  return _gc_selected_ergonomically;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   173
}
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   174
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   175
GCArguments* GCConfig::arguments() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   176
  assert(_arguments != NULL, "Not initialized");
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   177
  return _arguments;
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
diff changeset
   178
}