< prev index next >

src/hotspot/share/memory/metaspace/metaspaceStatistics.hpp

Print this page
rev 60538 : imported patch jep387-all.patch

*** 1,8 **** /* ! * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2018 SAP SE. 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. --- 1,8 ---- /* ! * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2018, 2020 SAP SE. 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.
*** 24,187 **** */ #ifndef SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP #define SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP - #include "utilities/globalDefinitions.hpp" #include "memory/metaspace.hpp" // for MetadataType enum ! #include "memory/metaspace/metachunk.hpp" // for ChunkIndex enum class outputStream; namespace metaspace { ! // Contains statistics for a number of free chunks. ! class FreeChunksStatistics { ! uintx _num; // Number of chunks ! size_t _cap; // Total capacity, in words ! ! public: ! FreeChunksStatistics(); ! void reset(); ! uintx num() const { return _num; } ! size_t cap() const { return _cap; } ! ! void add(uintx n, size_t s); ! void add(const FreeChunksStatistics& other); ! void print_on(outputStream* st, size_t scale) const; ! }; // end: FreeChunksStatistics ! // Contains statistics for a ChunkManager. ! class ChunkManagerStatistics { ! FreeChunksStatistics _chunk_stats[NumberOfInUseLists]; ! public: ! ! // Free chunk statistics, by chunk index. ! const FreeChunksStatistics& chunk_stats(ChunkIndex index) const { return _chunk_stats[index]; } ! FreeChunksStatistics& chunk_stats(ChunkIndex index) { return _chunk_stats[index]; } ! ! void reset(); ! size_t total_capacity() const; void print_on(outputStream* st, size_t scale) const; ! }; // ChunkManagerStatistics ! // Contains statistics for a number of chunks in use. ! // Each chunk has a used and free portion; however, there are current chunks (serving ! // potential future metaspace allocations) and non-current chunks. Unused portion of the ! // former is counted as free, unused portion of the latter counts as waste. ! class UsedChunksStatistics { ! uintx _num; // Number of chunks ! size_t _cap; // Total capacity in words. ! size_t _used; // Total used area, in words ! size_t _free; // Total free area (unused portions of current chunks), in words ! size_t _waste; // Total waste area (unused portions of non-current chunks), in words ! size_t _overhead; // Total sum of chunk overheads, in words. ! public: ! UsedChunksStatistics(); ! void reset(); ! uintx num() const { return _num; } ! // Total capacity, in words ! size_t cap() const { return _cap; } ! // Total used area, in words ! size_t used() const { return _used; } ! // Total free area (unused portions of current chunks), in words ! size_t free() const { return _free; } ! // Total waste area (unused portions of non-current chunks), in words ! size_t waste() const { return _waste; } ! // Total area spent in overhead (chunk headers), in words ! size_t overhead() const { return _overhead; } ! void add_num(uintx n) { _num += n; } ! void add_cap(size_t s) { _cap += s; } ! void add_used(size_t s) { _used += s; } ! void add_free(size_t s) { _free += s; } ! void add_waste(size_t s) { _waste += s; } ! void add_overhead(size_t s) { _overhead += s; } ! void add(const UsedChunksStatistics& other); void print_on(outputStream* st, size_t scale) const; ! #ifdef ASSERT ! void check_sanity() const; ! #endif ! }; // UsedChunksStatistics ! // Class containing statistics for one or more space managers. ! class SpaceManagerStatistics { ! UsedChunksStatistics _chunk_stats[NumberOfInUseLists]; ! uintx _free_blocks_num; ! size_t _free_blocks_cap_words; ! public: ! SpaceManagerStatistics(); ! // Chunk statistics by chunk index ! const UsedChunksStatistics& chunk_stats(ChunkIndex index) const { return _chunk_stats[index]; } ! UsedChunksStatistics& chunk_stats(ChunkIndex index) { return _chunk_stats[index]; } ! uintx free_blocks_num () const { return _free_blocks_num; } ! size_t free_blocks_cap_words () const { return _free_blocks_cap_words; } ! void reset(); ! void add_free_blocks_info(uintx num, size_t cap); ! // Returns total chunk statistics over all chunk types. ! UsedChunksStatistics totals() const; ! void add(const SpaceManagerStatistics& other); ! ! void print_on(outputStream* st, size_t scale, bool detailed) const; ! }; // SpaceManagerStatistics ! class ClassLoaderMetaspaceStatistics { ! SpaceManagerStatistics _sm_stats[Metaspace::MetadataTypeCount]; ! ! public: ! ! ClassLoaderMetaspaceStatistics(); ! ! const SpaceManagerStatistics& sm_stats(Metaspace::MetadataType mdType) const { return _sm_stats[mdType]; } ! SpaceManagerStatistics& sm_stats(Metaspace::MetadataType mdType) { return _sm_stats[mdType]; } ! ! const SpaceManagerStatistics& nonclass_sm_stats() const { return sm_stats(Metaspace::NonClassType); } ! SpaceManagerStatistics& nonclass_sm_stats() { return sm_stats(Metaspace::NonClassType); } ! const SpaceManagerStatistics& class_sm_stats() const { return sm_stats(Metaspace::ClassType); } ! SpaceManagerStatistics& class_sm_stats() { return sm_stats(Metaspace::ClassType); } ! ! void reset(); ! void add(const ClassLoaderMetaspaceStatistics& other); - // Returns total space manager statistics for both class and non-class metaspace - SpaceManagerStatistics totals() const; ! void print_on(outputStream* st, size_t scale, bool detailed) const; ! }; // ClassLoaderMetaspaceStatistics } // namespace metaspace #endif // SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP --- 24,166 ---- */ #ifndef SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP #define SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP #include "memory/metaspace.hpp" // for MetadataType enum ! #include "memory/metaspace/chunkLevel.hpp" ! #include "utilities/globalDefinitions.hpp" class outputStream; namespace metaspace { ! // Contains a number of data output structures: ! // ! // - cm_stats_t ! // - clms_stats_t -> arena_stats_t -> in_use_chunk_stats_t ! // ! // used for the various XXXX::add_to_statistic() methods in MetaspaceArena, ClassLoaderMetaspace ! // and ChunkManager, respectively. ! struct cm_stats_t { ! // How many chunks per level are checked in. ! int num_chunks[chunklevel::NUM_CHUNK_LEVELS]; ! // Size, in words, of the sum of all committed areas in this chunk manager, per level. ! size_t committed_word_size[chunklevel::NUM_CHUNK_LEVELS]; + cm_stats_t() : num_chunks(), committed_word_size() {} ! void add(const cm_stats_t& other); ! // Returns total word size of all chunks in this manager. ! size_t total_word_size() const; ! // Returns total committed word size of all chunks in this manager. ! size_t total_committed_word_size() const; void print_on(outputStream* st, size_t scale) const; ! DEBUG_ONLY(void verify() const;) ! }; ! // Contains statistics for one or multiple chunks in use. ! struct in_use_chunk_stats_t { ! // Number of chunks ! int num; ! // Note: ! // capacity = committed + uncommitted ! // committed = used + free + waste ! // Capacity (total sum of all chunk sizes) in words. ! // May contain committed and uncommitted space. ! size_t word_size; ! // Total committed area, in words. ! size_t committed_words; ! // Total used area, in words. ! size_t used_words; ! // Total free committed area, in words. ! size_t free_words; ! // Total waste committed area, in words. ! size_t waste_words; ! in_use_chunk_stats_t() ! : num(0), word_size(0), committed_words(0), ! used_words(0), free_words(0), waste_words(0) ! {} ! void add(const in_use_chunk_stats_t& other) { ! num += other.num; ! word_size += other.word_size; ! committed_words += other.committed_words; ! used_words += other.used_words; ! free_words += other.free_words; ! waste_words += other.waste_words; ! } void print_on(outputStream* st, size_t scale) const; ! DEBUG_ONLY(void verify() const;) ! }; ! // Class containing statistics for one or more MetaspaceArena objects. ! struct arena_stats_t { ! // chunk statistics by chunk level ! in_use_chunk_stats_t stats[chunklevel::NUM_CHUNK_LEVELS]; ! uintx free_blocks_num; ! size_t free_blocks_word_size; ! arena_stats_t() ! : stats(), ! free_blocks_num(0), ! free_blocks_word_size(0) ! {} ! void add(const arena_stats_t& other); ! void print_on(outputStream* st, size_t scale = K, bool detailed = true) const; ! in_use_chunk_stats_t totals() const; ! DEBUG_ONLY(void verify() const;) ! }; ! // Statistics for one or multiple ClassLoaderMetaspace objects ! struct clms_stats_t { ! arena_stats_t arena_stats_nonclass; ! arena_stats_t arena_stats_class; ! clms_stats_t() : arena_stats_nonclass(), arena_stats_class() {} ! void add(const clms_stats_t& other) { ! arena_stats_nonclass.add(other.arena_stats_nonclass); ! arena_stats_class.add(other.arena_stats_class); ! } ! void print_on(outputStream* st, size_t scale, bool detailed) const; ! // Returns total statistics for both class and non-class metaspace ! arena_stats_t totals() const; ! DEBUG_ONLY(void verify() const;) ! }; } // namespace metaspace #endif // SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP +
< prev index next >