< prev index next >

src/share/vm/memory/metaspace.hpp

Print this page
rev 10748 : [backport] Handle metadata induced GC


  48 //               |       ||----------        |
  49 //               +------>||| block 0 |       |
  50 //                       ||----------        |
  51 //                       ||| block 1 |       |
  52 //                       ||----------        |
  53 //                       ||                  |
  54 //                       |-------------------|
  55 //                       |                   |
  56 //                       |                   |
  57 //                       +-------------------+
  58 //
  59 
  60 class ChunkManager;
  61 class ClassLoaderData;
  62 class Metablock;
  63 class Metachunk;
  64 class MetaspaceTracer;
  65 class MetaWord;
  66 class Mutex;
  67 class outputStream;

  68 class SpaceManager;
  69 class VirtualSpaceList;
  70 
  71 // Metaspaces each have a  SpaceManager and allocations
  72 // are done by the SpaceManager.  Allocations are done
  73 // out of the current Metachunk.  When the current Metachunk
  74 // is exhausted, the SpaceManager gets a new one from
  75 // the current VirtualSpace.  When the VirtualSpace is exhausted
  76 // the SpaceManager gets a new one.  The SpaceManager
  77 // also manages freelists of available Chunks.
  78 //
  79 // Currently the space manager maintains the list of
  80 // virtual spaces and the list of chunks in use.  Its
  81 // allocate() method returns a block for use as a
  82 // quantum of metadata.
  83 
  84 class Metaspace : public CHeapObj<mtClass> {
  85   friend class VMStructs;
  86   friend class SpaceManager;
  87   friend class VM_CollectForMetadataAllocation;
  88   friend class MetaspaceGC;
  89   friend class MetaspaceAux;

  90 
  91  public:
  92   enum MetadataType {
  93     ClassType,
  94     NonClassType,
  95     MetadataTypeCount
  96   };
  97   enum MetaspaceType {
  98     StandardMetaspaceType,
  99     BootMetaspaceType,
 100     ROMetaspaceType,
 101     ReadWriteMetaspaceType,
 102     AnonymousMetaspaceType,
 103     ReflectionMetaspaceType
 104   };
 105 
 106  private:
 107   static void verify_global_initialization();
 108 
 109   void initialize(Mutex* lock, MetaspaceType type);




  48 //               |       ||----------        |
  49 //               +------>||| block 0 |       |
  50 //                       ||----------        |
  51 //                       ||| block 1 |       |
  52 //                       ||----------        |
  53 //                       ||                  |
  54 //                       |-------------------|
  55 //                       |                   |
  56 //                       |                   |
  57 //                       +-------------------+
  58 //
  59 
  60 class ChunkManager;
  61 class ClassLoaderData;
  62 class Metablock;
  63 class Metachunk;
  64 class MetaspaceTracer;
  65 class MetaWord;
  66 class Mutex;
  67 class outputStream;
  68 class ShenandoahCollectorPolicy;
  69 class SpaceManager;
  70 class VirtualSpaceList;
  71 
  72 // Metaspaces each have a  SpaceManager and allocations
  73 // are done by the SpaceManager.  Allocations are done
  74 // out of the current Metachunk.  When the current Metachunk
  75 // is exhausted, the SpaceManager gets a new one from
  76 // the current VirtualSpace.  When the VirtualSpace is exhausted
  77 // the SpaceManager gets a new one.  The SpaceManager
  78 // also manages freelists of available Chunks.
  79 //
  80 // Currently the space manager maintains the list of
  81 // virtual spaces and the list of chunks in use.  Its
  82 // allocate() method returns a block for use as a
  83 // quantum of metadata.
  84 
  85 class Metaspace : public CHeapObj<mtClass> {
  86   friend class VMStructs;
  87   friend class SpaceManager;
  88   friend class VM_CollectForMetadataAllocation;
  89   friend class MetaspaceGC;
  90   friend class MetaspaceAux;
  91   friend class ShenandoahCollectorPolicy;
  92 
  93  public:
  94   enum MetadataType {
  95     ClassType,
  96     NonClassType,
  97     MetadataTypeCount
  98   };
  99   enum MetaspaceType {
 100     StandardMetaspaceType,
 101     BootMetaspaceType,
 102     ROMetaspaceType,
 103     ReadWriteMetaspaceType,
 104     AnonymousMetaspaceType,
 105     ReflectionMetaspaceType
 106   };
 107 
 108  private:
 109   static void verify_global_initialization();
 110 
 111   void initialize(Mutex* lock, MetaspaceType type);


< prev index next >