hotspot/src/share/vm/gc/g1/youngList.cpp
author mgerdin
Wed, 27 Apr 2016 11:25:16 +0200
changeset 38109 6503703df058
parent 37985 539c597ee0fa
child 38162 4e2c3433a3ae
permissions -rw-r--r--
8155209: Move setting of young index in cset to G1CollectionSet Reviewed-by: sjohanss, ehelin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     1
/*
37039
79f62b89a7a6 8151178: Move the collection set out of the G1 collector policy
mgerdin
parents: 36365
diff changeset
     2
 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     4
 *
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     7
 * published by the Free Software Foundation.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     8
 *
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    13
 * accompanied this code).
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    14
 *
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    18
 *
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    21
 * questions.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    22
 *
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    23
 */
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    24
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    25
#include "precompiled.hpp"
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    26
#include "gc/g1/g1CollectedHeap.hpp"
37039
79f62b89a7a6 8151178: Move the collection set out of the G1 collector policy
mgerdin
parents: 36365
diff changeset
    27
#include "gc/g1/g1CollectionSet.hpp"
37985
539c597ee0fa 8154154: Separate G1 specific policy code from the CollectorPolicy class hierarchy
mgerdin
parents: 37039
diff changeset
    28
#include "gc/g1/g1Policy.hpp"
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    29
#include "gc/g1/heapRegion.hpp"
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    30
#include "gc/g1/heapRegion.inline.hpp"
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    31
#include "gc/g1/heapRegionRemSet.hpp"
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    32
#include "gc/g1/youngList.hpp"
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 33203
diff changeset
    33
#include "logging/log.hpp"
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    34
#include "utilities/ostream.hpp"
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    35
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    36
YoungList::YoungList(G1CollectedHeap* g1h) :
36365
bcc9c9afda49 8150390: Move rs length sampling data to the sampling thread
mgerdin
parents: 36090
diff changeset
    37
    _g1h(g1h), _head(NULL), _length(0),
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    38
    _survivor_head(NULL), _survivor_tail(NULL), _survivor_length(0) {
36365
bcc9c9afda49 8150390: Move rs length sampling data to the sampling thread
mgerdin
parents: 36090
diff changeset
    39
  guarantee(check_list_empty(), "just making sure...");
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    40
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    41
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    42
void YoungList::push_region(HeapRegion *hr) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    43
  assert(!hr->is_young(), "should not already be young");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    44
  assert(hr->get_next_young_region() == NULL, "cause it should!");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    45
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    46
  hr->set_next_young_region(_head);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    47
  _head = hr;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    48
38109
6503703df058 8155209: Move setting of young index in cset to G1CollectionSet
mgerdin
parents: 37985
diff changeset
    49
  _g1h->g1_policy()->set_region_eden(hr);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    50
  ++_length;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    51
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    52
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    53
void YoungList::add_survivor_region(HeapRegion* hr) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    54
  assert(hr->is_survivor(), "should be flagged as survivor region");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    55
  assert(hr->get_next_young_region() == NULL, "cause it should!");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    56
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    57
  hr->set_next_young_region(_survivor_head);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    58
  if (_survivor_head == NULL) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    59
    _survivor_tail = hr;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    60
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    61
  _survivor_head = hr;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    62
  ++_survivor_length;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    63
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    64
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    65
void YoungList::empty_list(HeapRegion* list) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    66
  while (list != NULL) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    67
    HeapRegion* next = list->get_next_young_region();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    68
    list->set_next_young_region(NULL);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    69
    list->uninstall_surv_rate_group();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    70
    // This is called before a Full GC and all the non-empty /
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    71
    // non-humongous regions at the end of the Full GC will end up as
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    72
    // old anyway.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    73
    list->set_old();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    74
    list = next;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    75
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    76
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    77
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    78
void YoungList::empty_list() {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    79
  assert(check_list_well_formed(), "young list should be well formed");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    80
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    81
  empty_list(_head);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    82
  _head = NULL;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    83
  _length = 0;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    84
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    85
  empty_list(_survivor_head);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    86
  _survivor_head = NULL;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    87
  _survivor_tail = NULL;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    88
  _survivor_length = 0;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    89
36365
bcc9c9afda49 8150390: Move rs length sampling data to the sampling thread
mgerdin
parents: 36090
diff changeset
    90
  assert(check_list_empty(), "just making sure...");
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    91
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    92
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    93
bool YoungList::check_list_well_formed() {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    94
  bool ret = true;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    95
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    96
  uint length = 0;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    97
  HeapRegion* curr = _head;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    98
  HeapRegion* last = NULL;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
    99
  while (curr != NULL) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   100
    if (!curr->is_young()) {
36090
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   101
      log_error(gc, verify)("### YOUNG REGION " PTR_FORMAT "-" PTR_FORMAT " "
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   102
                            "incorrectly tagged (y: %d, surv: %d)",
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   103
                            p2i(curr->bottom()), p2i(curr->end()),
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   104
                            curr->is_young(), curr->is_survivor());
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   105
      ret = false;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   106
    }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   107
    ++length;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   108
    last = curr;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   109
    curr = curr->get_next_young_region();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   110
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   111
  ret = ret && (length == _length);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   112
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   113
  if (!ret) {
36090
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   114
    log_error(gc, verify)("### YOUNG LIST seems not well formed!");
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   115
    log_error(gc, verify)("###   list has %u entries, _length is %u", length, _length);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   116
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   117
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   118
  return ret;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   119
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   120
36365
bcc9c9afda49 8150390: Move rs length sampling data to the sampling thread
mgerdin
parents: 36090
diff changeset
   121
bool YoungList::check_list_empty() {
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   122
  bool ret = true;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   123
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   124
  if (_length != 0) {
36090
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   125
    log_error(gc, verify)("### YOUNG LIST should have 0 length, not %u", _length);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   126
    ret = false;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   127
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   128
  if (_head != NULL) {
36090
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   129
    log_error(gc, verify)("### YOUNG LIST does not have a NULL head");
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   130
    ret = false;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   131
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   132
  if (!ret) {
36090
cffc1dd98258 8149541: Use log_error() instead of log_info() when verification reports a problem
brutisso
parents: 35061
diff changeset
   133
    log_error(gc, verify)("### YOUNG LIST does not seem empty");
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   134
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   135
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   136
  return ret;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   137
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   138
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   139
void
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   140
YoungList::reset_auxilary_lists() {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   141
  guarantee( is_empty(), "young list should be empty" );
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   142
  assert(check_list_well_formed(), "young list should be well formed");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   143
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   144
  // Add survivor regions to SurvRateGroup.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   145
  _g1h->g1_policy()->note_start_adding_survivor_regions();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   146
  _g1h->g1_policy()->finished_recalculating_age_indexes(true /* is_survivors */);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   147
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   148
  for (HeapRegion* curr = _survivor_head;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   149
       curr != NULL;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   150
       curr = curr->get_next_young_region()) {
38109
6503703df058 8155209: Move setting of young index in cset to G1CollectionSet
mgerdin
parents: 37985
diff changeset
   151
    _g1h->g1_policy()->set_region_survivor(curr);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   152
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   153
    // The region is a non-empty survivor so let's add it to
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   154
    // the incremental collection set for the next evacuation
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   155
    // pause.
37039
79f62b89a7a6 8151178: Move the collection set out of the G1 collector policy
mgerdin
parents: 36365
diff changeset
   156
    _g1h->collection_set()->add_survivor_regions(curr);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   157
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   158
  _g1h->g1_policy()->note_stop_adding_survivor_regions();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   159
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   160
  _head   = _survivor_head;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   161
  _length = _survivor_length;
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   162
  if (_survivor_head != NULL) {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   163
    assert(_survivor_tail != NULL, "cause it shouldn't be");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   164
    assert(_survivor_length > 0, "invariant");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   165
    _survivor_tail->set_next_young_region(NULL);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   166
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   167
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   168
  // Don't clear the survivor list handles until the start of
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   169
  // the next evacuation pause - we need it in order to re-tag
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   170
  // the survivor regions from this evacuation pause as 'young'
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   171
  // at the start of the next.
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   172
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   173
  _g1h->g1_policy()->finished_recalculating_age_indexes(false /* is_survivors */);
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   174
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   175
  assert(check_list_well_formed(), "young list should be well formed");
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   176
}
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   177
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   178
void YoungList::print() {
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   179
  HeapRegion* lists[] = {_head,   _survivor_head};
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   180
  const char* names[] = {"YOUNG", "SURVIVOR"};
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   181
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   182
  for (uint list = 0; list < ARRAY_SIZE(lists); ++list) {
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 33203
diff changeset
   183
    tty->print_cr("%s LIST CONTENTS", names[list]);
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   184
    HeapRegion *curr = lists[list];
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   185
    if (curr == NULL) {
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 33203
diff changeset
   186
      tty->print_cr("  empty");
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   187
    }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   188
    while (curr != NULL) {
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 33203
diff changeset
   189
      tty->print_cr("  " HR_FORMAT ", P: " PTR_FORMAT ", N: " PTR_FORMAT ", age: %4d",
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   190
                             HR_FORMAT_PARAMS(curr),
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   191
                             p2i(curr->prev_top_at_mark_start()),
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   192
                             p2i(curr->next_top_at_mark_start()),
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   193
                             curr->age_in_surv_rate_group_cond());
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   194
      curr = curr->get_next_young_region();
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   195
    }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   196
  }
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   197
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 33203
diff changeset
   198
  tty->cr();
33203
e1034e5d33eb 8139427: Break out YoungList to own class.
david
parents:
diff changeset
   199
}