/* * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
/* * Base class that provides helpers
*/ class MemReporterBase : public StackObj { private: const size_t _scale; // report in this scale
outputStream* const _output; // destination
public:
// Default scale to use if no scale given. staticconst size_t default_scale = K;
/* * The class is for generating summary tracking report.
*/ class MemSummaryReporter : public MemReporterBase { private:
MallocMemorySnapshot* _malloc_snapshot;
VirtualMemorySnapshot* _vm_snapshot;
size_t _instance_class_count;
size_t _array_class_count;
public: // This constructor is for normal reporting from a recent baseline.
MemSummaryReporter(MemBaseline& baseline, outputStream* output,
size_t scale = default_scale) : MemReporterBase(output, scale),
_malloc_snapshot(baseline.malloc_memory_snapshot()),
_vm_snapshot(baseline.virtual_memory_snapshot()),
_instance_class_count(baseline.instance_class_count()),
_array_class_count(baseline.array_class_count()) { }
// Generate summary report virtualvoid report(); private: // Report summary for each memory type void report_summary_of_type(MEMFLAGS type, MallocMemory* malloc_memory,
VirtualMemory* virtual_memory);
// Generate detail report. // The report contains summary and detail sections. virtualvoid report() {
MemSummaryReporter::report();
report_virtual_memory_map();
report_detail();
}
private: // Report detail tracking data. void report_detail(); // Report virtual memory map void report_virtual_memory_map(); // Report malloc allocation sites; returns number of omitted sites int report_malloc_sites(); // Report virtual memory reservation sites; returns number of omitted sites int report_virtual_memory_allocation_sites();
// Report a virtual memory region void report_virtual_memory_region(const ReservedMemoryRegion* rgn);
};
/* * The class is for generating summary comparison report. * It compares current memory baseline against an early baseline.
*/ class MemSummaryDiffReporter : public MemReporterBase { protected:
MemBaseline& _early_baseline;
MemBaseline& _current_baseline;
/* * The class is for generating detail comparison report. * It compares current memory baseline against an early baseline, * both baselines have to be detail baseline.
*/ class MemDetailDiffReporter : public MemSummaryDiffReporter { public:
MemDetailDiffReporter(MemBaseline& early_baseline, MemBaseline& current_baseline,
outputStream* output, size_t scale = default_scale) :
MemSummaryDiffReporter(early_baseline, current_baseline, output, scale) { }
// Malloc allocation site comparison void diff_malloc_sites() const; // Virtual memory reservation site comparison void diff_virtual_memory_sites() const;
// New malloc allocation site in recent baseline void new_malloc_site (const MallocSite* site) const; // The malloc allocation site is not in recent baseline void old_malloc_site (const MallocSite* site) const; // Compare malloc allocation site, it is in both baselines void diff_malloc_site(const MallocSite* early, const MallocSite* current) const;
// New virtual memory allocation site in recent baseline void new_virtual_memory_site (const VirtualMemoryAllocationSite* callsite) const; // The virtual memory allocation site is not in recent baseline void old_virtual_memory_site (const VirtualMemoryAllocationSite* callsite) const; // Compare virtual memory allocation site, it is in both baseline void diff_virtual_memory_site(const VirtualMemoryAllocationSite* early, const VirtualMemoryAllocationSite* current) const;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.