src/hotspot/share/gc/cms/cmsArguments.cpp
author manc
Fri, 07 Dec 2018 12:46:31 +0800
changeset 52904 d2f118d3f8e7
parent 52148 2d9f8845d0ae
child 54678 93f09ca4a7f8
permissions -rw-r--r--
8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy Summary: Consolidate code related to GC threads calculation into a single class Reviewed-by: tschatzl, pliden
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     1
/*
52148
2d9f8845d0ae 7041262: VM_Version should be called instead of Abstract_VM_Version so that overriding works
hseigel
parents: 49710
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     3
 * Copyright (c) 2017, Red Hat, Inc. and/or its affiliates.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     5
 *
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     8
 * published by the Free Software Foundation.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
     9
 *
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    14
 * accompanied this code).
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    15
 *
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    19
 *
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    22
 * questions.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    23
 *
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    24
 */
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    25
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    26
#include "precompiled.hpp"
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    27
#include "gc/cms/cmsArguments.hpp"
47913
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
    28
#include "gc/cms/cmsCollectorPolicy.hpp"
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
    29
#include "gc/cms/cmsHeap.hpp"
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    30
#include "gc/cms/compactibleFreeListSpace.hpp"
47913
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
    31
#include "gc/shared/gcArguments.inline.hpp"
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    32
#include "gc/shared/genCollectedHeap.hpp"
52904
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 52148
diff changeset
    33
#include "gc/shared/workerPolicy.hpp"
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    34
#include "runtime/arguments.hpp"
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    35
#include "runtime/globals.hpp"
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    36
#include "runtime/globals_extension.hpp"
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    37
#include "utilities/defaultStream.hpp"
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    38
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    39
size_t CMSArguments::conservative_max_heap_alignment() {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    40
  return GenCollectedHeap::conservative_max_heap_alignment();
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    41
}
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    42
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    43
void CMSArguments::set_parnew_gc_flags() {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    44
  assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    45
         "control point invariant");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    46
  assert(UseConcMarkSweepGC, "CMS is expected to be on here");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    47
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    48
  if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
52904
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 52148
diff changeset
    49
    FLAG_SET_DEFAULT(ParallelGCThreads, WorkerPolicy::parallel_worker_threads());
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    50
    assert(ParallelGCThreads > 0, "We should always have at least one thread by default");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    51
  } else if (ParallelGCThreads == 0) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    52
    jio_fprintf(defaultStream::error_stream(),
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    53
        "The ParNew GC can not be combined with -XX:ParallelGCThreads=0\n");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    54
    vm_exit(1);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    55
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    56
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    57
  // By default YoungPLABSize and OldPLABSize are set to 4096 and 1024 respectively,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    58
  // these settings are default for Parallel Scavenger. For ParNew+Tenured configuration
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    59
  // we set them to 1024 and 1024.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    60
  // See CR 6362902.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    61
  if (FLAG_IS_DEFAULT(YoungPLABSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    62
    FLAG_SET_DEFAULT(YoungPLABSize, (intx)1024);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    63
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    64
  if (FLAG_IS_DEFAULT(OldPLABSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    65
    FLAG_SET_DEFAULT(OldPLABSize, (intx)1024);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    66
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    67
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    68
  // When using compressed oops, we use local overflow stacks,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    69
  // rather than using a global overflow list chained through
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    70
  // the klass word of the object's pre-image.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    71
  if (UseCompressedOops && !ParGCUseLocalOverflow) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    72
    if (!FLAG_IS_DEFAULT(ParGCUseLocalOverflow)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    73
      warning("Forcing +ParGCUseLocalOverflow: needed if using compressed references");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    74
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    75
    FLAG_SET_DEFAULT(ParGCUseLocalOverflow, true);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    76
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    77
  assert(ParGCUseLocalOverflow || !UseCompressedOops, "Error");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    78
}
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    79
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    80
// Adjust some sizes to suit CMS and/or ParNew needs; these work well on
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    81
// sparc/solaris for certain applications, but would gain from
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    82
// further optimization and tuning efforts, and would almost
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    83
// certainly gain from analysis of platform and environment.
49629
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents: 47913
diff changeset
    84
void CMSArguments::initialize() {
b786280276dc 8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents: 47913
diff changeset
    85
  GCArguments::initialize();
49710
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    86
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    87
  assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    88
  assert(UseConcMarkSweepGC, "CMS is expected to be on here");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
    89
49710
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    90
  // CMS space iteration, which FLSVerifyAllHeapreferences entails,
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    91
  // insists that we hold the requisite locks so that the iteration is
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    92
  // MT-safe. For the verification at start-up and shut-down, we don't
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    93
  // yet have a good way of acquiring and releasing these locks,
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    94
  // which are not visible at the CollectedHeap level. We want to
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    95
  // be able to acquire these locks and then do the iteration rather
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    96
  // than just disable the lock verification. This will be fixed under
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    97
  // bug 4788986.
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    98
  if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) {
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
    99
    if (VerifyDuringStartup) {
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   100
      warning("Heap verification at start-up disabled "
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   101
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   102
      VerifyDuringStartup = false; // Disable verification at start-up
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   103
    }
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   104
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   105
    if (VerifyBeforeExit) {
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   106
      warning("Heap verification at shutdown disabled "
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   107
              "(due to current incompatibility with FLSVerifyAllHeapReferences)");
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   108
      VerifyBeforeExit = false; // Disable verification at shutdown
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   109
    }
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   110
  }
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   111
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   112
  if (!ClassUnloading) {
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   113
    FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false);
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   114
  }
f67333fc42bd 8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents: 49629
diff changeset
   115
47901
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   116
  // Set CMS global values
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   117
  CompactibleFreeListSpace::set_cms_values();
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   118
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   119
  // Turn off AdaptiveSizePolicy by default for cms until it is complete.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   120
  disable_adaptive_size_policy("UseConcMarkSweepGC");
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   121
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   122
  set_parnew_gc_flags();
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   123
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   124
  size_t max_heap = align_down(MaxHeapSize,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   125
                               CardTableRS::ct_max_alignment_constraint());
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   126
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   127
  // Now make adjustments for CMS
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   128
  intx   tenuring_default = (intx)6;
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   129
  size_t young_gen_per_worker = CMSYoungGenPerWorker;
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   130
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   131
  // Preferred young gen size for "short" pauses:
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   132
  // upper bound depends on # of threads and NewRatio.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   133
  const size_t preferred_max_new_size_unaligned =
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   134
    MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * ParallelGCThreads));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   135
  size_t preferred_max_new_size =
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   136
    align_up(preferred_max_new_size_unaligned, os::vm_page_size());
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   137
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   138
  // Unless explicitly requested otherwise, size young gen
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   139
  // for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   140
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   141
  // If either MaxNewSize or NewRatio is set on the command line,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   142
  // assume the user is trying to set the size of the young gen.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   143
  if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   144
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   145
    // Set MaxNewSize to our calculated preferred_max_new_size unless
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   146
    // NewSize was set on the command line and it is larger than
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   147
    // preferred_max_new_size.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   148
    if (!FLAG_IS_DEFAULT(NewSize)) {   // NewSize explicitly set at command-line
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   149
      FLAG_SET_ERGO(size_t, MaxNewSize, MAX2(NewSize, preferred_max_new_size));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   150
    } else {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   151
      FLAG_SET_ERGO(size_t, MaxNewSize, preferred_max_new_size);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   152
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   153
    log_trace(gc, heap)("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   154
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   155
    // Code along this path potentially sets NewSize and OldSize
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   156
    log_trace(gc, heap)("CMS set min_heap_size: " SIZE_FORMAT " initial_heap_size:  " SIZE_FORMAT " max_heap: " SIZE_FORMAT,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   157
                        Arguments::min_heap_size(), InitialHeapSize, max_heap);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   158
    size_t min_new = preferred_max_new_size;
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   159
    if (FLAG_IS_CMDLINE(NewSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   160
      min_new = NewSize;
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   161
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   162
    if (max_heap > min_new && Arguments::min_heap_size() > min_new) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   163
      // Unless explicitly requested otherwise, make young gen
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   164
      // at least min_new, and at most preferred_max_new_size.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   165
      if (FLAG_IS_DEFAULT(NewSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   166
        FLAG_SET_ERGO(size_t, NewSize, MAX2(NewSize, min_new));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   167
        FLAG_SET_ERGO(size_t, NewSize, MIN2(preferred_max_new_size, NewSize));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   168
        log_trace(gc, heap)("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   169
      }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   170
      // Unless explicitly requested otherwise, size old gen
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   171
      // so it's NewRatio x of NewSize.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   172
      if (FLAG_IS_DEFAULT(OldSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   173
        if (max_heap > NewSize) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   174
          FLAG_SET_ERGO(size_t, OldSize, MIN2(NewRatio*NewSize, max_heap - NewSize));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   175
          log_trace(gc, heap)("CMS ergo set OldSize: " SIZE_FORMAT, OldSize);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   176
        }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   177
      }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   178
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   179
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   180
  // Unless explicitly requested otherwise, definitely
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   181
  // promote all objects surviving "tenuring_default" scavenges.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   182
  if (FLAG_IS_DEFAULT(MaxTenuringThreshold) &&
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   183
      FLAG_IS_DEFAULT(SurvivorRatio)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   184
    FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   185
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   186
  // If we decided above (or user explicitly requested)
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   187
  // `promote all' (via MaxTenuringThreshold := 0),
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   188
  // prefer minuscule survivor spaces so as not to waste
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   189
  // space for (non-existent) survivors
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   190
  if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   191
    FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   192
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   193
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   194
  // OldPLABSize is interpreted in CMS as not the size of the PLAB in words,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   195
  // but rather the number of free blocks of a given size that are used when
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   196
  // replenishing the local per-worker free list caches.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   197
  if (FLAG_IS_DEFAULT(OldPLABSize)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   198
    if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   199
      // OldPLAB sizing manually turned off: Use a larger default setting,
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   200
      // unless it was manually specified. This is because a too-low value
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   201
      // will slow down scavenges.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   202
      FLAG_SET_ERGO(size_t, OldPLABSize, CompactibleFreeListSpaceLAB::_default_static_old_plab_size); // default value before 6631166
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   203
    } else {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   204
      FLAG_SET_DEFAULT(OldPLABSize, CompactibleFreeListSpaceLAB::_default_dynamic_old_plab_size); // old CMSParPromoteBlocksToClaim default
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   205
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   206
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   207
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   208
  // If either of the static initialization defaults have changed, note this
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   209
  // modification.
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   210
  if (!FLAG_IS_DEFAULT(OldPLABSize) || !FLAG_IS_DEFAULT(OldPLABWeight)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   211
    CompactibleFreeListSpaceLAB::modify_initialization(OldPLABSize, OldPLABWeight);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   212
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   213
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   214
  log_trace(gc)("MarkStackSize: %uk  MarkStackSizeMax: %uk", (unsigned int) (MarkStackSize / K), (uint) (MarkStackSizeMax / K));
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   215
}
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   216
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   217
void CMSArguments::disable_adaptive_size_policy(const char* collector_name) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   218
  if (UseAdaptiveSizePolicy) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   219
    if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) {
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   220
      warning("Disabling UseAdaptiveSizePolicy; it is incompatible with %s.",
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   221
              collector_name);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   222
    }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   223
    FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false);
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   224
  }
4c42aa431f40 8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff changeset
   225
}
47913
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
   226
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
   227
CollectedHeap* CMSArguments::create_heap() {
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
   228
  return create_heap_with_policy<CMSHeap, ConcurrentMarkSweepPolicy>();
cde4a65ba47d 8189389: Move heap creation into GC interface
rkennke
parents: 47901
diff changeset
   229
}