< prev index next >

src/hotspot/share/memory/metaspace.hpp

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

*** 53,78 **** // | | // | | // +-------------------+ // - class ChunkManager; class ClassLoaderData; - class Metablock; - class Metachunk; class MetaspaceTracer; class MetaWord; class Mutex; class outputStream; ! class PrintCLDMetaspaceInfoClosure; ! class SpaceManager; ! class VirtualSpaceList; class CollectedHeap; namespace metaspace { namespace internals { class ClassLoaderMetaspaceStatistics; }} // Metaspaces each have a SpaceManager and allocations // are done by the SpaceManager. Allocations are done // out of the current Metachunk. When the current Metachunk --- 53,79 ---- // | | // | | // +-------------------+ // class ClassLoaderData; class MetaspaceTracer; class MetaWord; class Mutex; class outputStream; ! class CollectedHeap; namespace metaspace { namespace internals { + class ChunkManager; class ClassLoaderMetaspaceStatistics; + class Metablock; + class Metachunk; + class PrintCLDMetaspaceInfoClosure; + class SpaceManager; + class VirtualSpaceList; }} // Metaspaces each have a SpaceManager and allocations // are done by the SpaceManager. Allocations are done // out of the current Metachunk. When the current Metachunk
*** 129,163 **** static size_t _commit_alignment; static size_t _reserve_alignment; DEBUG_ONLY(static bool _frozen;) // Virtual Space lists for both classes and other metadata ! static VirtualSpaceList* _space_list; ! static VirtualSpaceList* _class_space_list; ! static ChunkManager* _chunk_manager_metadata; ! static ChunkManager* _chunk_manager_class; static const MetaspaceTracer* _tracer; public: ! static VirtualSpaceList* space_list() { return _space_list; } ! static VirtualSpaceList* class_space_list() { return _class_space_list; } ! static VirtualSpaceList* get_space_list(MetadataType mdtype) { assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == ClassType ? class_space_list() : space_list(); } ! static ChunkManager* chunk_manager_metadata() { return _chunk_manager_metadata; } ! static ChunkManager* chunk_manager_class() { return _chunk_manager_class; } ! static ChunkManager* get_chunk_manager(MetadataType mdtype) { assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == ClassType ? chunk_manager_class() : chunk_manager_metadata(); } // convenience function ! static ChunkManager* get_chunk_manager(bool is_class) { return is_class ? chunk_manager_class() : chunk_manager_metadata(); } static const MetaspaceTracer* tracer() { return _tracer; } static void freeze() { --- 130,164 ---- static size_t _commit_alignment; static size_t _reserve_alignment; DEBUG_ONLY(static bool _frozen;) // Virtual Space lists for both classes and other metadata ! static metaspace::internals::VirtualSpaceList* _space_list; ! static metaspace::internals::VirtualSpaceList* _class_space_list; ! static metaspace::internals::ChunkManager* _chunk_manager_metadata; ! static metaspace::internals::ChunkManager* _chunk_manager_class; static const MetaspaceTracer* _tracer; public: ! static metaspace::internals::VirtualSpaceList* space_list() { return _space_list; } ! static metaspace::internals::VirtualSpaceList* class_space_list() { return _class_space_list; } ! static metaspace::internals::VirtualSpaceList* get_space_list(MetadataType mdtype) { assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == ClassType ? class_space_list() : space_list(); } ! static metaspace::internals::ChunkManager* chunk_manager_metadata() { return _chunk_manager_metadata; } ! static metaspace::internals::ChunkManager* chunk_manager_class() { return _chunk_manager_class; } ! static metaspace::internals::ChunkManager* get_chunk_manager(MetadataType mdtype) { assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == ClassType ? chunk_manager_class() : chunk_manager_metadata(); } // convenience function ! static metaspace::internals::ChunkManager* get_chunk_manager(bool is_class) { return is_class ? chunk_manager_class() : chunk_manager_metadata(); } static const MetaspaceTracer* tracer() { return _tracer; } static void freeze() {
*** 229,259 **** // Manages the metaspace portion belonging to a class loader class ClassLoaderMetaspace : public CHeapObj<mtClass> { friend class CollectedHeap; // For expand_and_allocate() friend class Metaspace; friend class MetaspaceUtils; ! friend class PrintCLDMetaspaceInfoClosure; friend class VM_CollectForMetadataAllocation; // For expand_and_allocate() private: void initialize(Mutex* lock, Metaspace::MetaspaceType type); // Initialize the first chunk for a Metaspace. Used for // special cases such as the boot class loader, reflection // class loader and anonymous class loader. void initialize_first_chunk(Metaspace::MetaspaceType type, Metaspace::MetadataType mdtype); ! Metachunk* get_initialization_chunk(Metaspace::MetaspaceType type, Metaspace::MetadataType mdtype); const Metaspace::MetaspaceType _space_type; Mutex* const _lock; ! SpaceManager* _vsm; ! SpaceManager* _class_vsm; ! SpaceManager* vsm() const { return _vsm; } ! SpaceManager* class_vsm() const { return _class_vsm; } ! SpaceManager* get_space_manager(Metaspace::MetadataType mdtype) { assert(mdtype != Metaspace::MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == Metaspace::ClassType ? class_vsm() : vsm(); } Mutex* lock() const { return _lock; } --- 230,260 ---- // Manages the metaspace portion belonging to a class loader class ClassLoaderMetaspace : public CHeapObj<mtClass> { friend class CollectedHeap; // For expand_and_allocate() friend class Metaspace; friend class MetaspaceUtils; ! friend class metaspace::internals::PrintCLDMetaspaceInfoClosure; friend class VM_CollectForMetadataAllocation; // For expand_and_allocate() private: void initialize(Mutex* lock, Metaspace::MetaspaceType type); // Initialize the first chunk for a Metaspace. Used for // special cases such as the boot class loader, reflection // class loader and anonymous class loader. void initialize_first_chunk(Metaspace::MetaspaceType type, Metaspace::MetadataType mdtype); ! metaspace::internals::Metachunk* get_initialization_chunk(Metaspace::MetaspaceType type, Metaspace::MetadataType mdtype); const Metaspace::MetaspaceType _space_type; Mutex* const _lock; ! metaspace::internals::SpaceManager* _vsm; ! metaspace::internals::SpaceManager* _class_vsm; ! metaspace::internals::SpaceManager* vsm() const { return _vsm; } ! metaspace::internals::SpaceManager* class_vsm() const { return _class_vsm; } ! metaspace::internals::SpaceManager* get_space_manager(Metaspace::MetadataType mdtype) { assert(mdtype != Metaspace::MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); return mdtype == Metaspace::ClassType ? class_vsm() : vsm(); } Mutex* lock() const { return _lock; }
*** 263,279 **** size_t class_chunk_size(size_t word_size); // Adds to the given statistic object. Must be locked with CLD metaspace lock. void add_to_statistics_locked(metaspace::internals::ClassLoaderMetaspaceStatistics* out) const; public: ClassLoaderMetaspace(Mutex* lock, Metaspace::MetaspaceType type); ~ClassLoaderMetaspace(); - Metaspace::MetaspaceType space_type() const { return _space_type; } - // Allocate space for metadata of type mdtype. This is space // within a Metachunk and is used by // allocate(ClassLoaderData*, size_t, bool, MetadataType, TRAPS) MetaWord* allocate(size_t word_size, Metaspace::MetadataType mdtype); --- 264,280 ---- size_t class_chunk_size(size_t word_size); // Adds to the given statistic object. Must be locked with CLD metaspace lock. void add_to_statistics_locked(metaspace::internals::ClassLoaderMetaspaceStatistics* out) const; + Metaspace::MetaspaceType space_type() const { return _space_type; } + public: ClassLoaderMetaspace(Mutex* lock, Metaspace::MetaspaceType type); ~ClassLoaderMetaspace(); // Allocate space for metadata of type mdtype. This is space // within a Metachunk and is used by // allocate(ClassLoaderData*, size_t, bool, MetadataType, TRAPS) MetaWord* allocate(size_t word_size, Metaspace::MetadataType mdtype);
*** 292,302 **** }; // ClassLoaderMetaspace class MetaspaceUtils : AllStatic { // Spacemanager updates running counters. ! friend class SpaceManager; // Running counters for statistics concerning in-use chunks. // Note: capacity = used + free + waste + overhead. Note that we do not // count free and waste. Their sum can be deduces from the three other values. // For more details, one should call print_report() from within a safe point. --- 293,303 ---- }; // ClassLoaderMetaspace class MetaspaceUtils : AllStatic { // Spacemanager updates running counters. ! friend class metaspace::internals::SpaceManager; // Running counters for statistics concerning in-use chunks. // Note: capacity = used + free + waste + overhead. Note that we do not // count free and waste. Their sum can be deduces from the three other values. // For more details, one should call print_report() from within a safe point.
< prev index next >