hotspot/src/share/vm/gc/parallel/generationSizer.cpp
author stefank
Thu, 13 Apr 2017 09:57:51 +0200
changeset 46620 750c6edff33b
parent 46564 0ec329b23bbf
child 46625 edefffab74e2
permissions -rw-r--r--
8178500: Replace usages of round_to and round_down with align_up and align_down Reviewed-by: rehn, tschatzl
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     1
/*
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 28631
diff changeset
     2
 * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     4
 *
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     7
 * published by the Free Software Foundation.
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     8
 *
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    13
 * accompanied this code).
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    14
 *
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    18
 *
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    21
 * questions.
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    22
 *
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    23
 */
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    24
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    25
#include "precompiled.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 28631
diff changeset
    26
#include "gc/parallel/generationSizer.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 28631
diff changeset
    27
#include "gc/shared/collectorPolicy.hpp"
46564
0ec329b23bbf 8182696: Remove gcTrace.hpp include from referenceProcessor.hpp
stefank
parents: 37462
diff changeset
    28
#include "runtime/globals_extension.hpp"
0ec329b23bbf 8182696: Remove gcTrace.hpp include from referenceProcessor.hpp
stefank
parents: 37462
diff changeset
    29
#include "utilities/globalDefinitions.hpp"
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    30
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    31
void GenerationSizer::initialize_alignments() {
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    32
  _space_alignment = _gen_alignment = default_gen_alignment();
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    33
  _heap_alignment = compute_heap_alignment();
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    34
}
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    35
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    36
void GenerationSizer::initialize_flags() {
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    37
  // Do basic sizing work
24353
148147d21135 8027643: Merge GenCollectorPolicy and TwoGenerationCollectorPolicy
jwilhelm
parents: 21570
diff changeset
    38
  GenCollectorPolicy::initialize_flags();
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    39
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    40
  // The survivor ratio's are calculated "raw", unlike the
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    41
  // default gc, which adds 2 to the ratio value. We need to
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    42
  // make sure the values are valid before using them.
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    43
  if (MinSurvivorRatio < 3) {
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    44
    FLAG_SET_ERGO(uintx, MinSurvivorRatio, 3);
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    45
  }
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    46
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    47
  if (InitialSurvivorRatio < 3) {
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    48
    FLAG_SET_ERGO(uintx, InitialSurvivorRatio, 3);
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    49
  }
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    50
}
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    51
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    52
void GenerationSizer::initialize_size_info() {
28631
a56cae1b428d 8066875: VirtualSpace does not use large pages
ehelin
parents: 27251
diff changeset
    53
  const size_t max_page_sz = os::page_size_for_region_aligned(_max_heap_byte_size, 8);
26700
8107d0778244 8049864: TestParallelHeapSizeFlags fails with unexpected heap size
ehelin
parents: 25366
diff changeset
    54
  const size_t min_pages = 4; // 1 for eden + 1 for each survivor + 1 for old
28631
a56cae1b428d 8066875: VirtualSpace does not use large pages
ehelin
parents: 27251
diff changeset
    55
  const size_t min_page_sz = os::page_size_for_region_aligned(_min_heap_byte_size, min_pages);
26700
8107d0778244 8049864: TestParallelHeapSizeFlags fails with unexpected heap size
ehelin
parents: 25366
diff changeset
    56
  const size_t page_sz = MIN2(max_page_sz, min_page_sz);
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    57
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    58
  // Can a page size be something else than a power of two?
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    59
  assert(is_power_of_2((intptr_t)page_sz), "must be a power of 2");
46620
750c6edff33b 8178500: Replace usages of round_to and round_down with align_up and align_down
stefank
parents: 46564
diff changeset
    60
  size_t new_alignment = align_up(page_sz, _gen_alignment);
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    61
  if (new_alignment != _gen_alignment) {
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    62
    _gen_alignment = new_alignment;
21570
7006807e3cc8 8027960: Assertion assert(end >= start) failed during nightly testing on solaris
sjohanss
parents: 21561
diff changeset
    63
    _space_alignment = new_alignment;
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    64
    // Redo everything from the start
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    65
    initialize_flags();
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    66
  }
24353
148147d21135 8027643: Merge GenCollectorPolicy and TwoGenerationCollectorPolicy
jwilhelm
parents: 21570
diff changeset
    67
  GenCollectorPolicy::initialize_size_info();
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
diff changeset
    68
}