1.1 --- a/src/share/vm/memory/metaspace.hpp Wed Sep 25 13:03:21 2013 -0400 1.2 +++ b/src/share/vm/memory/metaspace.hpp Thu Sep 26 12:18:21 2013 +0200 1.3 @@ -56,12 +56,15 @@ 1.4 // +-------------------+ 1.5 // 1.6 1.7 +class ChunkManager; 1.8 class ClassLoaderData; 1.9 class Metablock; 1.10 +class Metachunk; 1.11 class MetaWord; 1.12 class Mutex; 1.13 class outputStream; 1.14 class SpaceManager; 1.15 +class VirtualSpaceList; 1.16 1.17 // Metaspaces each have a SpaceManager and allocations 1.18 // are done by the SpaceManager. Allocations are done 1.19 @@ -76,8 +79,6 @@ 1.20 // allocate() method returns a block for use as a 1.21 // quantum of metadata. 1.22 1.23 -class VirtualSpaceList; 1.24 - 1.25 class Metaspace : public CHeapObj<mtClass> { 1.26 friend class VMStructs; 1.27 friend class SpaceManager; 1.28 @@ -102,6 +103,10 @@ 1.29 private: 1.30 void initialize(Mutex* lock, MetaspaceType type); 1.31 1.32 + Metachunk* get_initialization_chunk(MetadataType mdtype, 1.33 + size_t chunk_word_size, 1.34 + size_t chunk_bunch); 1.35 + 1.36 // Align up the word size to the allocation word size 1.37 static size_t align_word_size_up(size_t); 1.38 1.39 @@ -134,6 +139,10 @@ 1.40 static VirtualSpaceList* _space_list; 1.41 static VirtualSpaceList* _class_space_list; 1.42 1.43 + static ChunkManager* _chunk_manager_metadata; 1.44 + static ChunkManager* _chunk_manager_class; 1.45 + 1.46 + public: 1.47 static VirtualSpaceList* space_list() { return _space_list; } 1.48 static VirtualSpaceList* class_space_list() { return _class_space_list; } 1.49 static VirtualSpaceList* get_space_list(MetadataType mdtype) { 1.50 @@ -141,6 +150,14 @@ 1.51 return mdtype == ClassType ? class_space_list() : space_list(); 1.52 } 1.53 1.54 + static ChunkManager* chunk_manager_metadata() { return _chunk_manager_metadata; } 1.55 + static ChunkManager* chunk_manager_class() { return _chunk_manager_class; } 1.56 + static ChunkManager* get_chunk_manager(MetadataType mdtype) { 1.57 + assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype"); 1.58 + return mdtype == ClassType ? chunk_manager_class() : chunk_manager_metadata(); 1.59 + } 1.60 + 1.61 + private: 1.62 // This is used by DumpSharedSpaces only, where only _vsm is used. So we will 1.63 // maintain a single list for now. 1.64 void record_allocation(void* ptr, MetaspaceObj::Type type, size_t word_size); 1.65 @@ -199,6 +216,7 @@ 1.66 void dump(outputStream* const out) const; 1.67 1.68 // Free empty virtualspaces 1.69 + static void purge(MetadataType mdtype); 1.70 static void purge(); 1.71 1.72 void print_on(outputStream* st) const;