diff --git a/src/hotspot/share/memory/allocation.hpp b/src/hotspot/share/memory/allocation.hpp --- a/src/hotspot/share/memory/allocation.hpp +++ b/src/hotspot/share/memory/allocation.hpp @@ -140,6 +140,7 @@ f(mtModule, "Module") \ f(mtSafepoint, "Safepoint") \ f(mtSynchronizer, "Synchronization") \ + f(mtMetaspace, "Metaspace") \ f(mtNone, "Unknown") \ //end diff --git a/src/hotspot/share/memory/metaspace/blocktree.hpp b/src/hotspot/share/memory/metaspace/blocktree.hpp --- a/src/hotspot/share/memory/metaspace/blocktree.hpp +++ b/src/hotspot/share/memory/metaspace/blocktree.hpp @@ -35,7 +35,7 @@ namespace metaspace { -class BlockTree: public CHeapObj { +class BlockTree: public CHeapObj { struct node_t { diff --git a/src/hotspot/share/memory/metaspace/chunkHeaderPool.cpp b/src/hotspot/share/memory/metaspace/chunkHeaderPool.cpp --- a/src/hotspot/share/memory/metaspace/chunkHeaderPool.cpp +++ b/src/hotspot/share/memory/metaspace/chunkHeaderPool.cpp @@ -54,8 +54,7 @@ } void ChunkHeaderPool::allocate_new_slab() { - slab_t* slab = (slab_t*)os::malloc(sizeof(slab_t), mtInternal); - memset(slab, 0, sizeof(slab_t)); + slab_t* slab = new slab_t(); if (_current_slab != NULL) { _current_slab->next = slab; } diff --git a/src/hotspot/share/memory/metaspace/chunkHeaderPool.hpp b/src/hotspot/share/memory/metaspace/chunkHeaderPool.hpp --- a/src/hotspot/share/memory/metaspace/chunkHeaderPool.hpp +++ b/src/hotspot/share/memory/metaspace/chunkHeaderPool.hpp @@ -39,10 +39,15 @@ static const int slab_capacity = 128; - struct slab_t { + struct slab_t : public CHeapObj { slab_t* next; int top; - Metachunk elems [slab_capacity]; // var sized; + Metachunk elems [128]; // var sized; + slab_t() : next(NULL), top(0) { + for (int i = 0; i < slab_capacity; i++) { + elems[i].clear(); + } + } }; IntCounter _num_slabs; diff --git a/src/hotspot/share/memory/metaspace/chunkManager.hpp b/src/hotspot/share/memory/metaspace/chunkManager.hpp --- a/src/hotspot/share/memory/metaspace/chunkManager.hpp +++ b/src/hotspot/share/memory/metaspace/chunkManager.hpp @@ -42,7 +42,7 @@ // It keeps the freelists for chunks. If the freelist is exhausted it // allocates new chunks from a connected VirtualSpaceList. // -class ChunkManager : public CHeapObj { +class ChunkManager : public CHeapObj { // A chunk manager is connected to a virtual space list which is used // to allocate new root chunks when no free chunks are found. diff --git a/src/hotspot/share/memory/metaspace/commitLimiter.hpp b/src/hotspot/share/memory/metaspace/commitLimiter.hpp --- a/src/hotspot/share/memory/metaspace/commitLimiter.hpp +++ b/src/hotspot/share/memory/metaspace/commitLimiter.hpp @@ -41,7 +41,7 @@ // // Other versions of this Limiter can be implemented for tests (see metaspace // gtests). -class CommitLimiter : public CHeapObj { +class CommitLimiter : public CHeapObj { // Counts total words committed for metaspace SizeCounter _cnt; diff --git a/src/hotspot/share/memory/metaspace/freeBlocks.hpp b/src/hotspot/share/memory/metaspace/freeBlocks.hpp --- a/src/hotspot/share/memory/metaspace/freeBlocks.hpp +++ b/src/hotspot/share/memory/metaspace/freeBlocks.hpp @@ -50,7 +50,7 @@ // due to interrupted class loading. These blocks are small or // very small. -class FreeBlocks : public CHeapObj { +class FreeBlocks : public CHeapObj { typedef BinList32 SmallBlocksType; diff --git a/src/hotspot/share/memory/metaspace/metachunk.hpp b/src/hotspot/share/memory/metaspace/metachunk.hpp --- a/src/hotspot/share/memory/metaspace/metachunk.hpp +++ b/src/hotspot/share/memory/metaspace/metachunk.hpp @@ -126,6 +126,20 @@ _prev_in_vs(NULL), _next_in_vs(NULL) {} + void clear() { + _base = NULL; + _used_words = 0; + _committed_words = 0; + _level = chklvl::ROOT_CHUNK_LEVEL; + _state = state_free; + _vsnode = NULL; + _prev = NULL; + _next = NULL; + _prev_in_vs = NULL; + _next_in_vs = NULL; + } + + size_t word_size() const { return chklvl::word_size_for_level(_level); } MetaWord* base() const { return _base; } diff --git a/src/hotspot/share/memory/metaspaceClosure.hpp b/src/hotspot/share/memory/metaspaceClosure.hpp --- a/src/hotspot/share/memory/metaspaceClosure.hpp +++ b/src/hotspot/share/memory/metaspaceClosure.hpp @@ -106,7 +106,7 @@ // Symbol* bar() { return (Symbol*) _obj; } // // [2] All Array dimensions are statically declared. - class Ref : public CHeapObj { + class Ref : public CHeapObj { Writability _writability; Ref* _next; NONCOPYABLE(Ref); diff --git a/src/hotspot/share/memory/metaspaceCounters.cpp b/src/hotspot/share/memory/metaspaceCounters.cpp --- a/src/hotspot/share/memory/metaspaceCounters.cpp +++ b/src/hotspot/share/memory/metaspaceCounters.cpp @@ -29,7 +29,7 @@ #include "runtime/perfData.hpp" #include "utilities/exceptions.hpp" -class MetaspacePerfCounters: public CHeapObj { +class MetaspacePerfCounters: public CHeapObj { friend class VMStructs; PerfVariable* _capacity; PerfVariable* _used;