846 bool mismatch = false;
847 for (int i = 0; i < Metaspace::MetadataTypeCount; i ++) {
848 Metaspace::MetadataType mdtype = (Metaspace::MetadataType)i;
849 UsedChunksStatistics chunk_stat = total_stat.sm_stats(mdtype).totals();
850 if (capacity_words(mdtype) != chunk_stat.cap() ||
851 used_words(mdtype) != chunk_stat.used() ||
852 overhead_words(mdtype) != chunk_stat.overhead()) {
853 mismatch = true;
854 tty->print_cr("MetaspaceUtils::verify_metrics: counter mismatch for mdtype=%u:", mdtype);
855 tty->print_cr("Expected cap " SIZE_FORMAT ", used " SIZE_FORMAT ", overhead " SIZE_FORMAT ".",
856 capacity_words(mdtype), used_words(mdtype), overhead_words(mdtype));
857 tty->print_cr("Got cap " SIZE_FORMAT ", used " SIZE_FORMAT ", overhead " SIZE_FORMAT ".",
858 chunk_stat.cap(), chunk_stat.used(), chunk_stat.overhead());
859 tty->flush();
860 }
861 }
862 assert(mismatch == false, "MetaspaceUtils::verify_metrics: counter mismatch.");
863 #endif
864 }
865
866
867 // Metaspace methods
868
869 size_t Metaspace::_first_chunk_word_size = 0;
870 size_t Metaspace::_first_class_chunk_word_size = 0;
871
872 size_t Metaspace::_commit_alignment = 0;
873 size_t Metaspace::_reserve_alignment = 0;
874
875 VirtualSpaceList* Metaspace::_space_list = NULL;
876 VirtualSpaceList* Metaspace::_class_space_list = NULL;
877
878 ChunkManager* Metaspace::_chunk_manager_metadata = NULL;
879 ChunkManager* Metaspace::_chunk_manager_class = NULL;
880
881 #define VIRTUALSPACEMULTIPLIER 2
882
883 #ifdef _LP64
884 static const uint64_t UnscaledClassSpaceMax = (uint64_t(max_juint) + 1);
885
|
846 bool mismatch = false;
847 for (int i = 0; i < Metaspace::MetadataTypeCount; i ++) {
848 Metaspace::MetadataType mdtype = (Metaspace::MetadataType)i;
849 UsedChunksStatistics chunk_stat = total_stat.sm_stats(mdtype).totals();
850 if (capacity_words(mdtype) != chunk_stat.cap() ||
851 used_words(mdtype) != chunk_stat.used() ||
852 overhead_words(mdtype) != chunk_stat.overhead()) {
853 mismatch = true;
854 tty->print_cr("MetaspaceUtils::verify_metrics: counter mismatch for mdtype=%u:", mdtype);
855 tty->print_cr("Expected cap " SIZE_FORMAT ", used " SIZE_FORMAT ", overhead " SIZE_FORMAT ".",
856 capacity_words(mdtype), used_words(mdtype), overhead_words(mdtype));
857 tty->print_cr("Got cap " SIZE_FORMAT ", used " SIZE_FORMAT ", overhead " SIZE_FORMAT ".",
858 chunk_stat.cap(), chunk_stat.used(), chunk_stat.overhead());
859 tty->flush();
860 }
861 }
862 assert(mismatch == false, "MetaspaceUtils::verify_metrics: counter mismatch.");
863 #endif
864 }
865
866 // Utils to check if a pointer or range is part of a committed metaspace region.
867 metaspace::VirtualSpaceNode* MetaspaceUtils::find_enclosing_virtual_space(const void* p) {
868 VirtualSpaceNode* vsn = Metaspace::space_list()->find_enclosing_space(p);
869 if (Metaspace::using_class_space() && vsn == NULL) {
870 vsn = Metaspace::class_space_list()->find_enclosing_space(p);
871 }
872 return vsn;
873 }
874
875 bool MetaspaceUtils::is_in_committed(const void* p) {
876 #if INCLUDE_CDS
877 if (UseSharedSpaces) {
878 for (int idx = MetaspaceShared::ro; idx <= MetaspaceShared::mc; idx++) {
879 if (FileMapInfo::current_info()->is_in_shared_region(p, idx)) {
880 return true;
881 }
882 }
883 }
884 #endif
885 return find_enclosing_virtual_space(p) != NULL;
886 }
887
888 bool MetaspaceUtils::is_range_in_committed(const void* from, const void* to) {
889 #if INCLUDE_CDS
890 if (UseSharedSpaces) {
891 for (int idx = MetaspaceShared::ro; idx <= MetaspaceShared::mc; idx++) {
892 if (FileMapInfo::current_info()->is_in_shared_region(from, idx)) {
893 return FileMapInfo::current_info()->is_in_shared_region(to, idx);
894 }
895 }
896 }
897 #endif
898 VirtualSpaceNode* vsn = find_enclosing_virtual_space(from);
899 return (vsn != NULL) && vsn->contains(to);
900 }
901
902
903 // Metaspace methods
904
905 size_t Metaspace::_first_chunk_word_size = 0;
906 size_t Metaspace::_first_class_chunk_word_size = 0;
907
908 size_t Metaspace::_commit_alignment = 0;
909 size_t Metaspace::_reserve_alignment = 0;
910
911 VirtualSpaceList* Metaspace::_space_list = NULL;
912 VirtualSpaceList* Metaspace::_class_space_list = NULL;
913
914 ChunkManager* Metaspace::_chunk_manager_metadata = NULL;
915 ChunkManager* Metaspace::_chunk_manager_class = NULL;
916
917 #define VIRTUALSPACEMULTIPLIER 2
918
919 #ifdef _LP64
920 static const uint64_t UnscaledClassSpaceMax = (uint64_t(max_juint) + 1);
921
|