src/share/vm/memory/allocation.cpp

changeset 5368
cf9d71d3e474
parent 5321
2b9380b0bf0b
child 5614
9758d9f36299
child 6461
bdd155477289
     1.1 --- a/src/share/vm/memory/allocation.cpp	Fri Jul 05 08:09:40 2013 -0700
     1.2 +++ b/src/share/vm/memory/allocation.cpp	Mon Jul 08 10:58:48 2013 -0700
     1.3 @@ -236,10 +236,11 @@
     1.4    size_t       _num_used;     // number of chunks currently checked out
     1.5    const size_t _size;         // size of each chunk (must be uniform)
     1.6  
     1.7 -  // Our three static pools
     1.8 +  // Our four static pools
     1.9    static ChunkPool* _large_pool;
    1.10    static ChunkPool* _medium_pool;
    1.11    static ChunkPool* _small_pool;
    1.12 +  static ChunkPool* _tiny_pool;
    1.13  
    1.14    // return first element or null
    1.15    void* get_first() {
    1.16 @@ -319,15 +320,18 @@
    1.17    static ChunkPool* large_pool()  { assert(_large_pool  != NULL, "must be initialized"); return _large_pool;  }
    1.18    static ChunkPool* medium_pool() { assert(_medium_pool != NULL, "must be initialized"); return _medium_pool; }
    1.19    static ChunkPool* small_pool()  { assert(_small_pool  != NULL, "must be initialized"); return _small_pool;  }
    1.20 +  static ChunkPool* tiny_pool()   { assert(_tiny_pool   != NULL, "must be initialized"); return _tiny_pool;   }
    1.21  
    1.22    static void initialize() {
    1.23      _large_pool  = new ChunkPool(Chunk::size        + Chunk::aligned_overhead_size());
    1.24      _medium_pool = new ChunkPool(Chunk::medium_size + Chunk::aligned_overhead_size());
    1.25      _small_pool  = new ChunkPool(Chunk::init_size   + Chunk::aligned_overhead_size());
    1.26 +    _tiny_pool   = new ChunkPool(Chunk::tiny_size   + Chunk::aligned_overhead_size());
    1.27    }
    1.28  
    1.29    static void clean() {
    1.30      enum { BlocksToKeep = 5 };
    1.31 +     _tiny_pool->free_all_but(BlocksToKeep);
    1.32       _small_pool->free_all_but(BlocksToKeep);
    1.33       _medium_pool->free_all_but(BlocksToKeep);
    1.34       _large_pool->free_all_but(BlocksToKeep);
    1.35 @@ -337,6 +341,7 @@
    1.36  ChunkPool* ChunkPool::_large_pool  = NULL;
    1.37  ChunkPool* ChunkPool::_medium_pool = NULL;
    1.38  ChunkPool* ChunkPool::_small_pool  = NULL;
    1.39 +ChunkPool* ChunkPool::_tiny_pool   = NULL;
    1.40  
    1.41  void chunkpool_init() {
    1.42    ChunkPool::initialize();
    1.43 @@ -376,6 +381,7 @@
    1.44     case Chunk::size:        return ChunkPool::large_pool()->allocate(bytes, alloc_failmode);
    1.45     case Chunk::medium_size: return ChunkPool::medium_pool()->allocate(bytes, alloc_failmode);
    1.46     case Chunk::init_size:   return ChunkPool::small_pool()->allocate(bytes, alloc_failmode);
    1.47 +   case Chunk::tiny_size:   return ChunkPool::tiny_pool()->allocate(bytes, alloc_failmode);
    1.48     default: {
    1.49       void* p = os::malloc(bytes, mtChunk, CALLER_PC);
    1.50       if (p == NULL && alloc_failmode == AllocFailStrategy::EXIT_OOM) {
    1.51 @@ -392,6 +398,7 @@
    1.52     case Chunk::size:        ChunkPool::large_pool()->free(c); break;
    1.53     case Chunk::medium_size: ChunkPool::medium_pool()->free(c); break;
    1.54     case Chunk::init_size:   ChunkPool::small_pool()->free(c); break;
    1.55 +   case Chunk::tiny_size:   ChunkPool::tiny_pool()->free(c); break;
    1.56     default:                 os::free(c, mtChunk);
    1.57    }
    1.58  }

mercurial