g1StringDedupStat.cpp revision 8638:767f36deb0dc
1/* 2 * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25#include "precompiled.hpp" 26#include "gc/g1/g1StringDedupStat.hpp" 27 28G1StringDedupStat::G1StringDedupStat() : 29 _inspected(0), 30 _skipped(0), 31 _hashed(0), 32 _known(0), 33 _new(0), 34 _new_bytes(0), 35 _deduped(0), 36 _deduped_bytes(0), 37 _deduped_young(0), 38 _deduped_young_bytes(0), 39 _deduped_old(0), 40 _deduped_old_bytes(0), 41 _idle(0), 42 _exec(0), 43 _block(0), 44 _start(0.0), 45 _idle_elapsed(0.0), 46 _exec_elapsed(0.0), 47 _block_elapsed(0.0) { 48} 49 50void G1StringDedupStat::add(const G1StringDedupStat& stat) { 51 _inspected += stat._inspected; 52 _skipped += stat._skipped; 53 _hashed += stat._hashed; 54 _known += stat._known; 55 _new += stat._new; 56 _new_bytes += stat._new_bytes; 57 _deduped += stat._deduped; 58 _deduped_bytes += stat._deduped_bytes; 59 _deduped_young += stat._deduped_young; 60 _deduped_young_bytes += stat._deduped_young_bytes; 61 _deduped_old += stat._deduped_old; 62 _deduped_old_bytes += stat._deduped_old_bytes; 63 _idle += stat._idle; 64 _exec += stat._exec; 65 _block += stat._block; 66 _idle_elapsed += stat._idle_elapsed; 67 _exec_elapsed += stat._exec_elapsed; 68 _block_elapsed += stat._block_elapsed; 69} 70 71void G1StringDedupStat::print_summary(outputStream* st, const G1StringDedupStat& last_stat, const G1StringDedupStat& total_stat) { 72 double total_deduped_bytes_percent = 0.0; 73 74 if (total_stat._new_bytes > 0) { 75 // Avoid division by zero 76 total_deduped_bytes_percent = (double)total_stat._deduped_bytes / (double)total_stat._new_bytes * 100.0; 77 } 78 79 st->date_stamp(PrintGCDateStamps); 80 st->stamp(PrintGCTimeStamps); 81 st->print_cr( 82 "[GC concurrent-string-deduplication, " 83 G1_STRDEDUP_BYTES_FORMAT_NS "->" G1_STRDEDUP_BYTES_FORMAT_NS "(" G1_STRDEDUP_BYTES_FORMAT_NS "), avg " 84 G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT "]", 85 G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes), 86 G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes - last_stat._deduped_bytes), 87 G1_STRDEDUP_BYTES_PARAM(last_stat._deduped_bytes), 88 total_deduped_bytes_percent, 89 last_stat._exec_elapsed); 90} 91 92void G1StringDedupStat::print_statistics(outputStream* st, const G1StringDedupStat& stat, bool total) { 93 double young_percent = 0.0; 94 double old_percent = 0.0; 95 double skipped_percent = 0.0; 96 double hashed_percent = 0.0; 97 double known_percent = 0.0; 98 double new_percent = 0.0; 99 double deduped_percent = 0.0; 100 double deduped_bytes_percent = 0.0; 101 double deduped_young_percent = 0.0; 102 double deduped_young_bytes_percent = 0.0; 103 double deduped_old_percent = 0.0; 104 double deduped_old_bytes_percent = 0.0; 105 106 if (stat._inspected > 0) { 107 // Avoid division by zero 108 skipped_percent = (double)stat._skipped / (double)stat._inspected * 100.0; 109 hashed_percent = (double)stat._hashed / (double)stat._inspected * 100.0; 110 known_percent = (double)stat._known / (double)stat._inspected * 100.0; 111 new_percent = (double)stat._new / (double)stat._inspected * 100.0; 112 } 113 114 if (stat._new > 0) { 115 // Avoid division by zero 116 deduped_percent = (double)stat._deduped / (double)stat._new * 100.0; 117 } 118 119 if (stat._deduped > 0) { 120 // Avoid division by zero 121 deduped_young_percent = (double)stat._deduped_young / (double)stat._deduped * 100.0; 122 deduped_old_percent = (double)stat._deduped_old / (double)stat._deduped * 100.0; 123 } 124 125 if (stat._new_bytes > 0) { 126 // Avoid division by zero 127 deduped_bytes_percent = (double)stat._deduped_bytes / (double)stat._new_bytes * 100.0; 128 } 129 130 if (stat._deduped_bytes > 0) { 131 // Avoid division by zero 132 deduped_young_bytes_percent = (double)stat._deduped_young_bytes / (double)stat._deduped_bytes * 100.0; 133 deduped_old_bytes_percent = (double)stat._deduped_old_bytes / (double)stat._deduped_bytes * 100.0; 134 } 135 136 if (total) { 137 st->print_cr( 138 " [Total Exec: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Idle: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]", 139 stat._exec, stat._exec_elapsed, stat._idle, stat._idle_elapsed, stat._block, stat._block_elapsed); 140 } else { 141 st->print_cr( 142 " [Last Exec: " G1_STRDEDUP_TIME_FORMAT ", Idle: " G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]", 143 stat._exec_elapsed, stat._idle_elapsed, stat._block, stat._block_elapsed); 144 } 145 st->print_cr( 146 " [Inspected: " G1_STRDEDUP_OBJECTS_FORMAT "]\n" 147 " [Skipped: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" 148 " [Hashed: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" 149 " [Known: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" 150 " [New: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "]\n" 151 " [Deduplicated: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" 152 " [Young: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" 153 " [Old: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]", 154 stat._inspected, 155 stat._skipped, skipped_percent, 156 stat._hashed, hashed_percent, 157 stat._known, known_percent, 158 stat._new, new_percent, G1_STRDEDUP_BYTES_PARAM(stat._new_bytes), 159 stat._deduped, deduped_percent, G1_STRDEDUP_BYTES_PARAM(stat._deduped_bytes), deduped_bytes_percent, 160 stat._deduped_young, deduped_young_percent, G1_STRDEDUP_BYTES_PARAM(stat._deduped_young_bytes), deduped_young_bytes_percent, 161 stat._deduped_old, deduped_old_percent, G1_STRDEDUP_BYTES_PARAM(stat._deduped_old_bytes), deduped_old_bytes_percent); 162} 163