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 }