< prev index next >

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

Print this page
rev 50068 : [mq]: metaspace-split

*** 23,40 **** */ #ifndef SHARE_MEMORY_METASPACE_METASPACECOMMON_HPP_ #define SHARE_MEMORY_METASPACE_METASPACECOMMON_HPP_ #include "utilities/globalDefinitions.hpp" - class outputStream; namespace metaspace { namespace internals { // Print a size, in words, scaled. void print_scaled_words(outputStream* st, size_t word_size, size_t scale = 0, int width = -1); // Convenience helper: prints a size value and a percentage. void print_scaled_words_and_percentage(outputStream* st, size_t word_size, size_t compare_word_size, size_t scale = 0, int width = -1); --- 23,49 ---- */ #ifndef SHARE_MEMORY_METASPACE_METASPACECOMMON_HPP_ #define SHARE_MEMORY_METASPACE_METASPACECOMMON_HPP_ + #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" class outputStream; namespace metaspace { namespace internals { + enum ChunkSizes { // in words. + ClassSpecializedChunk = 128, + SpecializedChunk = 128, + ClassSmallChunk = 256, + SmallChunk = 512, + ClassMediumChunk = 4 * K, + MediumChunk = 8 * K + }; + // Print a size, in words, scaled. void print_scaled_words(outputStream* st, size_t word_size, size_t scale = 0, int width = -1); // Convenience helper: prints a size value and a percentage. void print_scaled_words_and_percentage(outputStream* st, size_t word_size, size_t compare_word_size, size_t scale = 0, int width = -1);
*** 48,56 **** --- 57,131 ---- // Prints a percentage value. Values smaller than 1% but not 0 are displayed as "<1%", values // larger than 99% but not 100% are displayed as ">100%". void print_percentage(outputStream* st, size_t total, size_t part); + + #define assert_is_aligned(value, alignment) \ + assert(is_aligned((value), (alignment)), \ + SIZE_FORMAT_HEX " is not aligned to " \ + SIZE_FORMAT, (size_t)(uintptr_t)value, (alignment)) + + // Internal statistics. + #ifdef ASSERT + struct internal_statistics_t { + // Number of allocations. + uintx num_allocs; + // Number of times a ClassLoaderMetaspace was born... + uintx num_metaspace_births; + // ... and died. + uintx num_metaspace_deaths; + // Number of times VirtualSpaceListNodes were created... + uintx num_vsnodes_created; + // ... and purged. + uintx num_vsnodes_purged; + // Number of times we expanded the committed section of the space. + uintx num_committed_space_expanded; + // Number of deallocations + uintx num_deallocs; + // Number of deallocations triggered from outside ("real" deallocations). + uintx num_external_deallocs; + // Number of times an allocation was satisfied from deallocated blocks. + uintx num_allocs_from_deallocated_blocks; + }; + extern internal_statistics_t g_internal_statistics; + #endif + + // ChunkIndex defines the type of chunk. + // Chunk types differ by size: specialized < small < medium, chunks + // larger than medium are humongous chunks of varying size. + enum ChunkIndex { + ZeroIndex = 0, + SpecializedIndex = ZeroIndex, + SmallIndex = SpecializedIndex + 1, + MediumIndex = SmallIndex + 1, + HumongousIndex = MediumIndex + 1, + NumberOfFreeLists = 3, + NumberOfInUseLists = 4 + }; + + // Utility functions. + size_t get_size_for_nonhumongous_chunktype(ChunkIndex chunk_type, bool is_class); + ChunkIndex get_chunk_type_by_size(size_t size, bool is_class); + + ChunkIndex next_chunk_index(ChunkIndex i); + ChunkIndex prev_chunk_index(ChunkIndex i); + // Returns a descriptive name for a chunk type. + const char* chunk_size_name(ChunkIndex index); + + // Verify chunk type. + inline bool is_valid_chunktype(ChunkIndex index) { + return index == SpecializedIndex || index == SmallIndex || + index == MediumIndex || index == HumongousIndex; + } + + inline bool is_valid_nonhumongous_chunktype(ChunkIndex index) { + return is_valid_chunktype(index) && index != HumongousIndex; + } + + + + } // namespace internals } // namespace metaspace #endif /* SHARE_MEMORY_METASPACE_METASPACESTATISTICS_HPP_ */
< prev index next >