src/share/vm/memory/metaspace.hpp

changeset 5771
b960c9df4f11
parent 5704
c4c768305a8f
child 5808
bc918fd1e584
     1.1 --- a/src/share/vm/memory/metaspace.hpp	Fri Sep 20 11:00:38 2013 +0200
     1.2 +++ b/src/share/vm/memory/metaspace.hpp	Sat Sep 21 10:09:42 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;

mercurial