src/share/vm/memory/metaspace.cpp

changeset 7867
57d4971ff1df
parent 7860
afc7b3416dc6
child 7994
04ff2f6cd0eb
child 9021
f23241cde362
     1.1 --- a/src/share/vm/memory/metaspace.cpp	Thu Jun 04 23:11:44 2015 -0700
     1.2 +++ b/src/share/vm/memory/metaspace.cpp	Tue Jun 09 20:10:29 2015 +0200
     1.3 @@ -622,7 +622,8 @@
     1.4    Metachunk* _chunks_in_use[NumberOfInUseLists];
     1.5    Metachunk* _current_chunk;
     1.6  
     1.7 -  // Maximum number of small chunks to allocate to a SpaceManager
     1.8 +  // Number of small chunks to allocate to a manager
     1.9 +  // If class space manager, small chunks are unlimited
    1.10    static uint const _small_chunk_limit;
    1.11  
    1.12    // Sum of all space in allocated chunks
    1.13 @@ -736,8 +737,6 @@
    1.14    // Block allocation and deallocation.
    1.15    // Allocates a block from the current chunk
    1.16    MetaWord* allocate(size_t word_size);
    1.17 -  // Allocates a block from a small chunk
    1.18 -  MetaWord* get_small_chunk_and_allocate(size_t word_size);
    1.19  
    1.20    // Helper for allocations
    1.21    MetaWord* allocate_work(size_t word_size);
    1.22 @@ -2032,8 +2031,9 @@
    1.23  size_t SpaceManager::calc_chunk_size(size_t word_size) {
    1.24  
    1.25    // Decide between a small chunk and a medium chunk.  Up to
    1.26 -  // _small_chunk_limit small chunks can be allocated.
    1.27 -  // After that a medium chunk is preferred.
    1.28 +  // _small_chunk_limit small chunks can be allocated but
    1.29 +  // once a medium chunk has been allocated, no more small
    1.30 +  // chunks will be allocated.
    1.31    size_t chunk_word_size;
    1.32    if (chunks_in_use(MediumIndex) == NULL &&
    1.33        sum_count_in_chunks_in_use(SmallIndex) < _small_chunk_limit) {
    1.34 @@ -2101,7 +2101,7 @@
    1.35                              word_size, words_used, words_left);
    1.36    }
    1.37  
    1.38 -  // Get another chunk
    1.39 +  // Get another chunk out of the virtual space
    1.40    size_t grow_chunks_by_words = calc_chunk_size(word_size);
    1.41    Metachunk* next = get_new_chunk(word_size, grow_chunks_by_words);
    1.42  
    1.43 @@ -2432,43 +2432,6 @@
    1.44    return next;
    1.45  }
    1.46  
    1.47 -/*
    1.48 - * The policy is to allocate up to _small_chunk_limit small chunks
    1.49 - * after which only medium chunks are allocated.  This is done to
    1.50 - * reduce fragmentation.  In some cases, this can result in a lot
    1.51 - * of small chunks being allocated to the point where it's not
    1.52 - * possible to expand.  If this happens, there may be no medium chunks
    1.53 - * available and OOME would be thrown.  Instead of doing that,
    1.54 - * if the allocation request size fits in a small chunk, an attempt
    1.55 - * will be made to allocate a small chunk.
    1.56 - */
    1.57 -MetaWord* SpaceManager::get_small_chunk_and_allocate(size_t word_size) {
    1.58 -  if (word_size + Metachunk::overhead() > small_chunk_size()) {
    1.59 -    return NULL;
    1.60 -  }
    1.61 -
    1.62 -  MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag);
    1.63 -  MutexLockerEx cl1(expand_lock(), Mutex::_no_safepoint_check_flag);
    1.64 -
    1.65 -  Metachunk* chunk = chunk_manager()->chunk_freelist_allocate(small_chunk_size());
    1.66 -
    1.67 -  MetaWord* mem = NULL;
    1.68 -
    1.69 -  if (chunk != NULL) {
    1.70 -    // Add chunk to the in-use chunk list and do an allocation from it.
    1.71 -    // Add to this manager's list of chunks in use.
    1.72 -    add_chunk(chunk, false);
    1.73 -    mem = chunk->allocate(word_size);
    1.74 -
    1.75 -    inc_used_metrics(word_size);
    1.76 -
    1.77 -    // Track metaspace memory usage statistic.
    1.78 -    track_metaspace_memory_usage();
    1.79 -  }
    1.80 -
    1.81 -  return mem;
    1.82 -}
    1.83 -
    1.84  MetaWord* SpaceManager::allocate(size_t word_size) {
    1.85    MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag);
    1.86  
    1.87 @@ -3548,18 +3511,7 @@
    1.88    }
    1.89  
    1.90    if (result == NULL) {
    1.91 -    SpaceManager* sm;
    1.92 -    if (is_class_space_allocation(mdtype)) {
    1.93 -      sm = loader_data->metaspace_non_null()->class_vsm();
    1.94 -    } else {
    1.95 -      sm = loader_data->metaspace_non_null()->vsm();
    1.96 -    }
    1.97 -
    1.98 -    result = sm->get_small_chunk_and_allocate(word_size);
    1.99 -
   1.100 -    if (result == NULL) {
   1.101 -      report_metadata_oome(loader_data, word_size, type, mdtype, CHECK_NULL);
   1.102 -    }
   1.103 +    report_metadata_oome(loader_data, word_size, type, mdtype, CHECK_NULL);
   1.104    }
   1.105  
   1.106    // Zero initialize.

mercurial