src/hotspot/share/memory/metaspace/metaspaceStatistics.cpp
author ccheung
Thu, 12 Sep 2019 09:59:19 -0700
changeset 58110 85e1de070bef
parent 50193 49c3e91c424f
child 58063 bdf136b8ae0e
permissions -rw-r--r--
8186988: use log_warning() and log_error() instead of tty->print_cr for CDS warning and error messages Reviewed-by: stuefe, iklam, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49980
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     1
/*
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
50193
49c3e91c424f 8176808: Split up metaspace.cpp
stuefe
parents: 49980
diff changeset
     3
 * Copyright (c) 2018 SAP SE. All rights reserved.
49980
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     5
 *
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     8
 * published by the Free Software Foundation.
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
     9
 *
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    14
 * accompanied this code).
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    15
 *
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    19
 *
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    22
 * questions.
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    23
 *
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    24
 */
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    25
#include "precompiled.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    26
50193
49c3e91c424f 8176808: Split up metaspace.cpp
stuefe
parents: 49980
diff changeset
    27
#include "memory/metaspace/metachunk.hpp"
49980
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    28
#include "memory/metaspace/metaspaceCommon.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    29
#include "memory/metaspace/metaspaceStatistics.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    30
#include "utilities/debug.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    31
#include "utilities/globalDefinitions.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    32
#include "utilities/ostream.hpp"
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    33
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    34
namespace metaspace {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    35
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    36
// FreeChunksStatistics methods
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    37
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    38
FreeChunksStatistics::FreeChunksStatistics()
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    39
: _num(0), _cap(0)
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    40
{}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    41
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    42
void FreeChunksStatistics::reset() {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    43
  _num = 0; _cap = 0;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    44
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    45
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    46
void FreeChunksStatistics::add(uintx n, size_t s) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    47
  _num += n; _cap += s;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    48
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    49
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    50
void FreeChunksStatistics::add(const FreeChunksStatistics& other) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    51
  _num += other._num;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    52
  _cap += other._cap;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    53
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    54
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    55
void FreeChunksStatistics::print_on(outputStream* st, size_t scale) const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    56
  st->print(UINTX_FORMAT, _num);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    57
  st->print(" chunks, total capacity ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    58
  print_scaled_words(st, _cap, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    59
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    60
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    61
// ChunkManagerStatistics methods
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    62
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    63
void ChunkManagerStatistics::reset() {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    64
  for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    65
    _chunk_stats[i].reset();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    66
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    67
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    68
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    69
size_t ChunkManagerStatistics::total_capacity() const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    70
  return _chunk_stats[SpecializedIndex].cap() +
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    71
      _chunk_stats[SmallIndex].cap() +
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    72
      _chunk_stats[MediumIndex].cap() +
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    73
      _chunk_stats[HumongousIndex].cap();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    74
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    75
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    76
void ChunkManagerStatistics::print_on(outputStream* st, size_t scale) const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    77
  FreeChunksStatistics totals;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    78
  for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    79
    st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    80
    st->print("%12s chunks: ", chunk_size_name(i));
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    81
    if (_chunk_stats[i].num() > 0) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    82
      st->print(UINTX_FORMAT_W(4) ", capacity ", _chunk_stats[i].num());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    83
      print_scaled_words(st, _chunk_stats[i].cap(), scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    84
    } else {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    85
      st->print("(none)");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    86
    }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    87
    totals.add(_chunk_stats[i]);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    88
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    89
  st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    90
  st->print("%19s: " UINTX_FORMAT_W(4) ", capacity=", "Total", totals.num());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    91
  print_scaled_words(st, totals.cap(), scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    92
  st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    93
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    94
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    95
// UsedChunksStatistics methods
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    96
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    97
UsedChunksStatistics::UsedChunksStatistics()
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    98
: _num(0), _cap(0), _used(0), _free(0), _waste(0), _overhead(0)
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
    99
{}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   100
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   101
void UsedChunksStatistics::reset() {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   102
  _num = 0;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   103
  _cap = _overhead = _used = _free = _waste = 0;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   104
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   105
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   106
void UsedChunksStatistics::add(const UsedChunksStatistics& other) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   107
  _num += other._num;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   108
  _cap += other._cap;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   109
  _used += other._used;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   110
  _free += other._free;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   111
  _waste += other._waste;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   112
  _overhead += other._overhead;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   113
  DEBUG_ONLY(check_sanity());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   114
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   115
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   116
void UsedChunksStatistics::print_on(outputStream* st, size_t scale) const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   117
  int col = st->position();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   118
  st->print(UINTX_FORMAT_W(4) " chunk%s, ", _num, _num != 1 ? "s" : "");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   119
  if (_num > 0) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   120
    col += 14; st->fill_to(col);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   121
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   122
    print_scaled_words(st, _cap, scale, 5);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   123
    st->print(" capacity, ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   124
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   125
    col += 18; st->fill_to(col);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   126
    print_scaled_words_and_percentage(st, _used, _cap, scale, 5);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   127
    st->print(" used, ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   128
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   129
    col += 20; st->fill_to(col);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   130
    print_scaled_words_and_percentage(st, _free, _cap, scale, 5);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   131
    st->print(" free, ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   132
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   133
    col += 20; st->fill_to(col);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   134
    print_scaled_words_and_percentage(st, _waste, _cap, scale, 5);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   135
    st->print(" waste, ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   136
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   137
    col += 20; st->fill_to(col);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   138
    print_scaled_words_and_percentage(st, _overhead, _cap, scale, 5);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   139
    st->print(" overhead");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   140
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   141
  DEBUG_ONLY(check_sanity());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   142
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   143
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   144
#ifdef ASSERT
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   145
void UsedChunksStatistics::check_sanity() const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   146
  assert(_overhead == (Metachunk::overhead() * _num), "Sanity: Overhead.");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   147
  assert(_cap == _used + _free + _waste + _overhead, "Sanity: Capacity.");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   148
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   149
#endif
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   150
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   151
// SpaceManagerStatistics methods
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   152
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   153
SpaceManagerStatistics::SpaceManagerStatistics() { reset(); }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   154
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   155
void SpaceManagerStatistics::reset() {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   156
  for (int i = 0; i < NumberOfInUseLists; i ++) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   157
    _chunk_stats[i].reset();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   158
    _free_blocks_num = 0; _free_blocks_cap_words = 0;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   159
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   160
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   161
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   162
void SpaceManagerStatistics::add_free_blocks_info(uintx num, size_t cap) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   163
  _free_blocks_num += num;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   164
  _free_blocks_cap_words += cap;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   165
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   166
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   167
void SpaceManagerStatistics::add(const SpaceManagerStatistics& other) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   168
  for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   169
    _chunk_stats[i].add(other._chunk_stats[i]);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   170
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   171
  _free_blocks_num += other._free_blocks_num;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   172
  _free_blocks_cap_words += other._free_blocks_cap_words;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   173
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   174
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   175
// Returns total chunk statistics over all chunk types.
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   176
UsedChunksStatistics SpaceManagerStatistics::totals() const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   177
  UsedChunksStatistics stat;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   178
  for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   179
    stat.add(_chunk_stats[i]);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   180
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   181
  return stat;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   182
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   183
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   184
void SpaceManagerStatistics::print_on(outputStream* st, size_t scale,  bool detailed) const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   185
  streamIndentor sti(st);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   186
  if (detailed) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   187
    st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   188
    st->print("Usage by chunk type:");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   189
    {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   190
      streamIndentor sti2(st);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   191
      for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   192
        st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   193
        st->print("%15s: ", chunk_size_name(i));
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   194
        if (_chunk_stats[i].num() == 0) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   195
          st->print(" (none)");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   196
        } else {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   197
          _chunk_stats[i].print_on(st, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   198
        }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   199
      }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   200
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   201
      st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   202
      st->print("%15s: ", "-total-");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   203
      totals().print_on(st, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   204
    }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   205
    if (_free_blocks_num > 0) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   206
      st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   207
      st->print("deallocated: " UINTX_FORMAT " blocks with ", _free_blocks_num);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   208
      print_scaled_words(st, _free_blocks_cap_words, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   209
    }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   210
  } else {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   211
    totals().print_on(st, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   212
    st->print(", ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   213
    st->print("deallocated: " UINTX_FORMAT " blocks with ", _free_blocks_num);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   214
    print_scaled_words(st, _free_blocks_cap_words, scale);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   215
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   216
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   217
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   218
// ClassLoaderMetaspaceStatistics methods
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   219
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   220
ClassLoaderMetaspaceStatistics::ClassLoaderMetaspaceStatistics() { reset(); }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   221
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   222
void ClassLoaderMetaspaceStatistics::reset() {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   223
  nonclass_sm_stats().reset();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   224
  if (Metaspace::using_class_space()) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   225
    class_sm_stats().reset();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   226
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   227
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   228
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   229
// Returns total space manager statistics for both class and non-class metaspace
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   230
SpaceManagerStatistics ClassLoaderMetaspaceStatistics::totals() const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   231
  SpaceManagerStatistics stats;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   232
  stats.add(nonclass_sm_stats());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   233
  if (Metaspace::using_class_space()) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   234
    stats.add(class_sm_stats());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   235
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   236
  return stats;
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   237
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   238
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   239
void ClassLoaderMetaspaceStatistics::add(const ClassLoaderMetaspaceStatistics& other) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   240
  nonclass_sm_stats().add(other.nonclass_sm_stats());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   241
  if (Metaspace::using_class_space()) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   242
    class_sm_stats().add(other.class_sm_stats());
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   243
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   244
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   245
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   246
void ClassLoaderMetaspaceStatistics::print_on(outputStream* st, size_t scale, bool detailed) const {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   247
  streamIndentor sti(st);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   248
  st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   249
  if (Metaspace::using_class_space()) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   250
    st->print("Non-Class: ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   251
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   252
  nonclass_sm_stats().print_on(st, scale, detailed);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   253
  if (detailed) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   254
    st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   255
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   256
  if (Metaspace::using_class_space()) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   257
    st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   258
    st->print("    Class: ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   259
    class_sm_stats().print_on(st, scale, detailed);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   260
    if (detailed) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   261
      st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   262
    }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   263
    st->cr_indent();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   264
    st->print("     Both: ");
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   265
    totals().print_on(st, scale, detailed);
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   266
    if (detailed) {
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   267
      st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   268
    }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   269
  }
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   270
  st->cr();
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   271
}
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   272
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   273
} // end namespace metaspace
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   274
57dd7b4ba338 8201572: Improve Metaspace Statistics
stuefe
parents:
diff changeset
   275
50193
49c3e91c424f 8176808: Split up metaspace.cpp
stuefe
parents: 49980
diff changeset
   276